diff --git a/.changes/0.5.0-e2e1.md b/.changes/0.5.0-e2e1.md new file mode 100644 index 0000000..05b7aab --- /dev/null +++ b/.changes/0.5.0-e2e1.md @@ -0,0 +1,27 @@ +## 0.5.0-e2e1 (September 16, 2026) + + +ENHANCEMENTS: + +* `tfctl auth status` now explains why authentication failed instead of printing a bare "Unauthorized". It distinguishes a missing token, a token the server rejected (401), and a request that never reached the server, and prints the matching remedy. On SSO-protected Terraform Enterprise the 401 message also calls out a lapsed browser SSO session. JSON and agent output gain a machine-readable `reason` field. + +* `run start` now accepts `--wait`, which blocks until the run reaches a terminal state, streaming each status transition and exiting non-zero if the run fails, is canceled, is discarded, or fails a mandatory policy. A run whose plan finishes but needs a manual apply (auto-apply disabled) stops instead of hanging. `--timeout` bounds how long to wait; if it elapses, tfctl stops watching and exits non-zero while the run continues in HCP Terraform. On completion the run URL is printed. `run status` now surfaces the same run URL as well. + +* Added a `redact` profile property and a `TFCTL_REDACT` environment variable to control masking of sensitive values in output, with modes `strict` (the default), `known`, and `off`, plus a `--no-redact` global flag to show masked values for a single command + +* Added a `-r name=id` flag to `api` and `create` for setting JSON:API relationships without a full request body. The relationship's linkage type is inferred from the schema (e.g. `-r project=prj-...` links to type `projects`); ambiguous or unknown relationships can be pinned with `-r name:type=id`, and to-many relationships accept comma-separated ids + + +BUG FIXES: + +* Delete permissions now resolve correctly for resources with non-standard API paths (e.g. `explorer-saved-queries`, `run-tasks`) + +* Credentials returned by the API are no longer printed. A created token, and the `hosted-state-download-url` and `hosted-json-state-download-url` of a state version, which grant access to state without a token, were rendered in every output format including `--json` and `--jq`. `--dry-run` echoed the request body and headers, so previewing a sensitive variable printed the value being set + +* Fixed a gap in the output masking added in #101: CopyRaw only attempted to parse and mask a raw response body when its Content-Type was application/json (or ended in +json). At least one Terraform Enterprise endpoint (plan JSON export) serves valid JSON labeled application/octet-stream, so its response bypassed masking entirely. A body labeled application/octet-stream is now peeked at, without buffering it, to check whether it opens with a JSON object or array before deciding whether to mask it, so this content type is no longer treated as a blanket mask candidate: genuinely binary or large bodies served under the same label, such as state archives and plan or apply logs, are streamed through exactly as before + + +NOTES: + +* Sensitive values in command output are now masked by default. A script that reads a state version download URL, or a newly created token, out of `tfctl` output will see `(redacted)` until it passes `--no-redact` or sets `redact = "off"` in its profile + diff --git a/.changes/unreleased/BUG FIXES-20260729-114501.yaml b/.changes/unreleased/BUG FIXES-20260729-114501.yaml deleted file mode 100644 index 5a66ac4..0000000 --- a/.changes/unreleased/BUG FIXES-20260729-114501.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright IBM Corp. 2026 -# SPDX-License-Identifier: MPL-2.0 - -kind: BUG FIXES -body: "Delete permissions now resolve correctly for resources with non-standard API paths (e.g. `explorer-saved-queries`, `run-tasks`)" -time: 2026-07-29T11:45:01.000000-06:00 diff --git a/.changes/unreleased/BUG FIXES-20260806-170000.yaml b/.changes/unreleased/BUG FIXES-20260806-170000.yaml deleted file mode 100644 index 405a256..0000000 --- a/.changes/unreleased/BUG FIXES-20260806-170000.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright IBM Corp. 2026 -# SPDX-License-Identifier: MPL-2.0 - -kind: BUG FIXES -body: "Credentials returned by the API are no longer printed. A created token, and the `hosted-state-download-url` and `hosted-json-state-download-url` of a state version, which grant access to state without a token, were rendered in every output format including `--json` and `--jq`. `--dry-run` echoed the request body and headers, so previewing a sensitive variable printed the value being set" -time: 2026-08-06T17:00:00.000000-04:00 diff --git a/.changes/unreleased/BUG FIXES-20260820-083800.yaml b/.changes/unreleased/BUG FIXES-20260820-083800.yaml deleted file mode 100644 index 5c69599..0000000 --- a/.changes/unreleased/BUG FIXES-20260820-083800.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright IBM Corp. 2026 -# SPDX-License-Identifier: MPL-2.0 - -kind: BUG FIXES -body: "Fixed a gap in the output masking added in #101: CopyRaw only attempted to parse and mask a raw response body when its Content-Type was application/json (or ended in +json). At least one Terraform Enterprise endpoint (plan JSON export) serves valid JSON labeled application/octet-stream, so its response bypassed masking entirely. A body labeled application/octet-stream is now peeked at, without buffering it, to check whether it opens with a JSON object or array before deciding whether to mask it, so this content type is no longer treated as a blanket mask candidate: genuinely binary or large bodies served under the same label, such as state archives and plan or apply logs, are streamed through exactly as before" -time: 2026-08-20T08:38:00.000000-04:00 diff --git a/.changes/unreleased/ENHANCEMENTS-20260717-015613.yaml b/.changes/unreleased/ENHANCEMENTS-20260717-015613.yaml deleted file mode 100644 index e40d285..0000000 --- a/.changes/unreleased/ENHANCEMENTS-20260717-015613.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright IBM Corp. 2026 -# SPDX-License-Identifier: MPL-2.0 - -kind: ENHANCEMENTS -body: '`tfctl auth status` now explains why authentication failed instead of printing a bare "Unauthorized". It distinguishes a missing token, a token the server rejected (401), and a request that never reached the server, and prints the matching remedy. On SSO-protected Terraform Enterprise the 401 message also calls out a lapsed browser SSO session. JSON and agent output gain a machine-readable `reason` field.' -time: 2026-07-17T01:56:13-04:00 diff --git a/.changes/unreleased/ENHANCEMENTS-20260717-023923.yaml b/.changes/unreleased/ENHANCEMENTS-20260717-023923.yaml deleted file mode 100644 index aef8acd..0000000 --- a/.changes/unreleased/ENHANCEMENTS-20260717-023923.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright IBM Corp. 2026 -# SPDX-License-Identifier: MPL-2.0 - -kind: ENHANCEMENTS -body: '`run start` now accepts `--wait`, which blocks until the run reaches a terminal state, streaming each status transition and exiting non-zero if the run fails, is canceled, is discarded, or fails a mandatory policy. A run whose plan finishes but needs a manual apply (auto-apply disabled) stops instead of hanging. `--timeout` bounds how long to wait; if it elapses, tfctl stops watching and exits non-zero while the run continues in HCP Terraform. On completion the run URL is printed. `run status` now surfaces the same run URL as well.' -time: 2026-07-17T02:39:23-04:00 diff --git a/.changes/unreleased/ENHANCEMENTS-20260806-170001.yaml b/.changes/unreleased/ENHANCEMENTS-20260806-170001.yaml deleted file mode 100644 index 4ebf137..0000000 --- a/.changes/unreleased/ENHANCEMENTS-20260806-170001.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright IBM Corp. 2026 -# SPDX-License-Identifier: MPL-2.0 - -kind: ENHANCEMENTS -body: "Added a `redact` profile property and a `TFCTL_REDACT` environment variable to control masking of sensitive values in output, with modes `strict` (the default), `known`, and `off`, plus a `--no-redact` global flag to show masked values for a single command" -time: 2026-08-06T17:00:01.000000-04:00 diff --git a/.changes/unreleased/ENHANCEMENTS-20260819-161936.yaml b/.changes/unreleased/ENHANCEMENTS-20260819-161936.yaml deleted file mode 100644 index cef666b..0000000 --- a/.changes/unreleased/ENHANCEMENTS-20260819-161936.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright IBM Corp. 2026 -# SPDX-License-Identifier: MPL-2.0 - -kind: ENHANCEMENTS -body: "Added a `-r name=id` flag to `api` and `create` for setting JSON:API relationships without a full request body. The relationship's linkage type is inferred from the schema (e.g. `-r project=prj-...` links to type `projects`); ambiguous or unknown relationships can be pinned with `-r name:type=id`, and to-many relationships accept comma-separated ids" -time: 2026-08-19T16:19:36.000000-04:00 diff --git a/.changes/unreleased/NOTES-20260806-170002.yaml b/.changes/unreleased/NOTES-20260806-170002.yaml deleted file mode 100644 index f50ebff..0000000 --- a/.changes/unreleased/NOTES-20260806-170002.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright IBM Corp. 2026 -# SPDX-License-Identifier: MPL-2.0 - -kind: NOTES -body: 'Sensitive values in command output are now masked by default. A script that reads a state version download URL, or a newly created token, out of `tfctl` output will see `(redacted)` until it passes `--no-redact` or sets `redact = "off"` in its profile' -time: 2026-08-06T17:00:02.000000-04:00 diff --git a/Makefile b/Makefile index ebef880..084e45c 100644 --- a/Makefile +++ b/Makefile @@ -70,8 +70,8 @@ go/fmt: @gofmt -s -w . # Check formatting -.PHONY: fmt-check -fmt-check: +.PHONY: go/fmt-check +go/fmt-check: @test -z "$$(gofmt -s -l . | tee /dev/stderr)" || (echo "Code is not formatted. Run 'make go/fmt'" && exit 1) # Release targets @@ -120,7 +120,11 @@ logotools: } .PHONY: check -check: fmt-check go/lint go/test +check: go/fmt-check go/lint go/test + +.PHONY: e2e +e2e: bin + @bash e2e/test.sh # Help (make usage) .PHONY: help @@ -143,7 +147,8 @@ help: @echo " go/test Run all tests" @echo " go/lint Run golangci-lint" @echo " go/fmt Format go code" - @echo " fmt-check Check go code formatting" + @echo " go/fmt-check Check go code formatting" + @echo " e2e Run the HCP Terraform end-to-end test" @echo "" @echo "Release:" @echo " gen/openapi Update embedded OpenAPI spec" @@ -151,4 +156,4 @@ help: @echo " requires VERSION argument" @echo " cleanup-release Clean up after a release" @echo " requires DEV_VERSION argument" - @echo "" \ No newline at end of file + @echo "" diff --git a/e2e/main.tf b/e2e/main.tf new file mode 100644 index 0000000..4f67894 --- /dev/null +++ b/e2e/main.tf @@ -0,0 +1,10 @@ +# Copyright IBM Corp. 2026 +# SPDX-License-Identifier: MPL-2.0 + +terraform { + required_version = ">= 1.4.0" +} + +resource "terraform_data" "e2e" { + input = "tfctl-e2e" +} diff --git a/e2e/test.sh b/e2e/test.sh new file mode 100755 index 0000000..e2c1758 --- /dev/null +++ b/e2e/test.sh @@ -0,0 +1,206 @@ +#!/usr/bin/env bash +# Copyright IBM Corp. 2026 +# SPDX-License-Identifier: MPL-2.0 + + +set -euo pipefail + +# End-to-end test for tfctl +# +# Runs dist/tfctl through some basic test cases. Presumes the default profile +# is already configured. 'setup' creates $organization and all cases should +# use it. +# +# System prerequisites are: +# tar +#. curl + +root_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +tfctl_bin="${TFCTL_BIN:-$root_dir/dist/tfctl}" +run_id="${GITHUB_RUN_ID:-$(date +%s)}-${GITHUB_RUN_ATTEMPT:-$RANDOM}" +organization="tfctl-e2e-${run_id}" +organization_created=false + +teardown() { + local status=$? + + if [ "$organization_created" = true ]; then + "$tfctl_bin" harness exec --allow-delete=organizations -- \ + "$tfctl_bin" api "/organizations/$organization" -X DELETE || status=1 + fi + + exit "$status" +} +trap teardown EXIT + +setup() { + if [ ! -x "$tfctl_bin" ]; then + printf 'tfctl binary not found at %s\n' "$tfctl_bin" >&2 + exit 1 + fi + + for command in curl tar; do + if ! command -v "$command" >/dev/null 2>&1; then + printf '%s is required to run the end-to-end test\n' "$command" >&2 + exit 1 + fi + done + + printf 'Creating organization %s\n' "$organization" + "$tfctl_bin" api "/organizations" -X POST -a "name=$organization" -a "email=tfctl-e2e@example.com" --quiet + organization_created=true +} + +run_case() { + local name=$1 + printf '\n=== %s ===\n' "$name" + "$name" +} + +assert_contains() { + local value=$1 + local expected=$2 + + case "$value" in + *"$expected"*) ;; + *) + printf 'expected output to contain %q:\n%s\n' "$expected" "$value" >&2 + return 1 + ;; + esac +} + +assert_not_contains() { + local value=$1 + local unexpected=$2 + + case "$value" in + *"$unexpected"*) + printf 'expected output not to contain %q:\n%s\n' "$unexpected" "$value" >&2 + return 1 + ;; + *) ;; + esac +} + +create_auto_apply_workspace() { + local workspace="tfctl-e2e-$RANDOM" + + "$tfctl_bin" create workspace --organization "$organization" --jq '.data.id' \ + -a "name=$workspace" -a auto-apply=true +} + +upload_configuration() { + local workspace_id=$1 + local archive=$2 + local configuration_id configuration_status upload_url + + upload_url="$("$tfctl_bin" api "/workspaces/$workspace_id/configuration-versions" --no-redact --jq '.data.attributes["upload-url"]' -i \ + '{"data":{"type":"configuration-versions","attributes":{"auto-queue-runs":false}}}')" + + printf 'Uploading configuration\n' + curl --fail --silent --show-error --request PUT --upload-file "$archive" "$upload_url" + + configuration_id="$("$tfctl_bin" api "/workspaces/$workspace_id" --jq \ + '.data.relationships["current-configuration-version"].data.id')" + + for _ in $(seq 1 60); do + configuration_status="$("$tfctl_bin" api "/configuration-versions/$configuration_id" --jq '.data.attributes.status')" + if [ "$configuration_status" = "uploaded" ]; then + return + fi + if [ "$configuration_status" = "errored" ]; then + printf 'current configuration version %s failed to upload\n' "$configuration_id" >&2 + return 1 + fi + sleep 2 + done + + printf 'current configuration version %s did not finish uploading\n' "$configuration_id" >&2 + return 1 +} + +case_get_formats() { + local workspace workspace_id output + workspace="tfctl-e2e-formats-$RANDOM" + workspace_id="$("$tfctl_bin" create workspace --organization "$organization" --jq '.data.id' -a "name=$workspace")" + + output="$("$tfctl_bin" get workspaces --organization "$organization")" + assert_contains "$output" "ID" + output="$("$tfctl_bin" get workspaces --organization "$organization" --json)" + assert_contains "$output" "\"$workspace\"" + output="$("$tfctl_bin" get workspaces --organization "$organization" --markdown)" + assert_contains "$output" "$workspace" + + output="$("$tfctl_bin" get workspace "$workspace_id")" + assert_contains "$output" "$workspace" + output="$("$tfctl_bin" get workspace "$workspace_id" --json)" + assert_contains "$output" "\"id\": \"$workspace_id\"" + output="$("$tfctl_bin" get workspace "$workspace_id" --markdown)" + assert_contains "$output" "$workspace" +} + +case_dry_run_is_no_op() { + local workspace output + workspace="tfctl-e2e-dry-run-$RANDOM" + + output="$("$tfctl_bin" create workspace --organization "$organization" -a "name=$workspace" --dry-run 2>&1)" + assert_contains "$output" "would send POST request" + + output="$("$tfctl_bin" get workspaces --organization "$organization" --json)" + assert_not_contains "$output" "$workspace" +} + +case_quiet_minimizes_output() ( + local workspace stdout stderr + workspace="tfctl-e2e-quiet-$RANDOM" + stdout="$(mktemp)" + stderr="$(mktemp)" + trap 'rm -f "$stdout" "$stderr"' EXIT + + "$tfctl_bin" create workspace --organization "$organization" -a "name=$workspace" --quiet >"$stdout" 2>"$stderr" + [ ! -s "$stdout" ] + [ ! -s "$stderr" ] +) + +case_harness_install() ( + local temp_dir skill_path + temp_dir="$(mktemp -d)" + skill_path="$temp_dir/.agents/skills/tfctl/SKILL.md" + trap 'rm -rf "$temp_dir"' EXIT + + ( + cd "$temp_dir" + "$tfctl_bin" harness install opencode + ) + [ -s "$skill_path" ] +) + +case_profile_display() { + local output + output="$("$tfctl_bin" profile display --json)" + assert_contains "$output" "\"Name\":" + assert_not_contains "$output" "token" +} + +case_create_and_apply_workspace() ( + local archive workspace_id + archive="$(mktemp)" + trap 'rm -f "$archive"' EXIT + + printf 'Creating auto-apply workspace\n' + workspace_id="$(create_auto_apply_workspace)" + tar -C "$root_dir/e2e" -czf "$archive" main.tf + upload_configuration "$workspace_id" "$archive" + + printf 'Starting and waiting for the auto-apply run\n' + "$tfctl_bin" run start "$workspace_id" --wait --timeout 20m +) + +setup +run_case case_get_formats +run_case case_dry_run_is_no_op +run_case case_quiet_minimizes_output +run_case case_harness_install +run_case case_profile_display +run_case case_create_and_apply_workspace diff --git a/internal/commands/versioncmd/versioncmd.go b/internal/commands/versioncmd/versioncmd.go index ca165c0..b3f8caf 100644 --- a/internal/commands/versioncmd/versioncmd.go +++ b/internal/commands/versioncmd/versioncmd.go @@ -64,8 +64,12 @@ func runDetectOutdatedVersion(_ context.Context, io iostreams.IOStreams) { fmt.Fprintf(io.ErrUnessential(), "A new version of %s is available: %s\n", version.Name, cs.String(fmt.Sprintf("v%s", versionInfo.Latest)).Color(cs.Purple()).Bold()) fmt.Fprintln(io.ErrUnessential()) } else { - fmt.Fprintln(io.ErrUnessential(), heredoc.New(io).Mustf(`Release notes for this version are available at - {{ template "mdCodeOrBold" "https://github.com/hashicorp/tfctl-cli/blob/%s/CHANGELOG.md" }}`, version.Version)) + if version.IsDev() { + fmt.Fprintln(io.ErrUnessential(), heredoc.New(io).Mustf(`This is a development version of %s, not an official release.`, version.Name)) + } else { + fmt.Fprintln(io.ErrUnessential(), heredoc.New(io).Mustf(`Release notes for this version are available at + {{ template "mdCodeOrBold" "https://github.com/hashicorp/tfctl-cli/blob/%s/CHANGELOG.md" }}`, version.Version)) + } fmt.Fprintln(io.ErrUnessential()) } diff --git a/internal/pkg/openapi/spec/hcpt_v2_public_beta.json b/internal/pkg/openapi/spec/hcpt_v2_public_beta.json index e07eb2d..0770f0b 100644 --- a/internal/pkg/openapi/spec/hcpt_v2_public_beta.json +++ b/internal/pkg/openapi/spec/hcpt_v2_public_beta.json @@ -1,7 +1,7 @@ { "openapi": "3.0.0", "info": { - "version": "5e36b1b7", + "version": "e1367995", "title": "HCP Terraform/Terraform Enterprise API v2-Beta", "description": "OpenAPI Specification for the HCP Terraform/Terraform Enterprise API V2 Public Beta.", "license": { @@ -76,17 +76,6 @@ "url": "https://developer.hashicorp.com/terraform/cloud-docs/api-docs/subscriptions" } }, - { - "name": "billing-invoices", - "x-vis": [ - "hcpt" - ], - "x-displayName": "Billing Invoices", - "description": "Billing invoice management for credit-card-billed HCP Terraform organizations", - "externalDocs": { - "url": "https://developer.hashicorp.com/terraform/cloud-docs/api-docs/invoices" - } - }, { "name": "configuration-versions", "x-displayName": "Configuration Versions", @@ -119,6 +108,11 @@ "url": "https://developer.hashicorp.com/terraform/cloud-docs/api-docs/organization-memberships" } }, + { + "name": "recoverable-items", + "x-displayName": "Recoverable Items", + "description": "Recoverable items (soft-deleted resources) management" + }, { "name": "token-ttl-policies", "x-displayName": "Token TTL Policies", @@ -458,38 +452,58 @@ ], "x-displayName": "Admin Banners", "description": "Site-wide announcement banner management for Terraform Enterprise administrators." + }, + { + "name": "admin-saml-settings", + "x-vis": [ + "tfe" + ], + "x-displayName": "Admin SAML Settings", + "description": "Site-wide SAML single sign-on configuration for Terraform Enterprise administrators." + }, + { + "name": "saml-idp-certificates", + "x-vis": [ + "tfe" + ], + "x-tfe-min-version": "2.1.0", + "x-displayName": "SAML IdP Certificates", + "description": "Management of SAML Identity Provider (IdP) certificates for Terraform Enterprise. Allows site administrators to list, show, create, update, delete, and download trusted IdP certificates used for SAML SSO verification.\n" + }, + { + "name": "admin-scim-settings", + "x-vis": [ + "tfe" + ], + "x-displayName": "Admin SCIM Settings", + "description": "Site-wide SCIM provisioning configuration for Terraform Enterprise administrators." + }, + { + "name": "admin-customization-settings", + "x-displayName": "Admin Customization Settings", + "description": "Admin customization settings for Terraform Enterprise and HCP Terraform. TFE-only attributes (internal-support-url, internal-documentation-url, internal-tutorials-url, avatar-sources) are available only on Terraform Enterprise.\n" } ], "paths": { - "/admin/banners": { + "/banners": { "x-vis": [ "tfe" ], - "post": { - "operationId": "createAdminBanner", - "summary": "Create Site-Wide Announcement Banner", - "x-tfe-min-version": "v202601-1", - "description": "Creates a site-wide announcement banner. Only one banner can be active at a time; creating a new banner automatically deactivates any existing active banner. If neither scheduled-publish-at nor scheduled-expire-at are provided, the banner is published immediately.\n\n\nThis operation is only available in Terraform Enterprise.", + "get": { + "operationId": "getActiveBanners", + "security": [], + "summary": "Retrieve Active Site-Wide Announcement Banners", + "description": "Returns the currently active site-wide announcement banners as an array. Scheduling is evaluated at request time: banners whose scheduled-publish-at has not yet passed or whose scheduled-expire-at has already passed are excluded. Audience filtering is applied server-side: unauthenticated callers receive only all_users banners; authenticated callers receive all active banners regardless of audience. Returns an empty array when no matching banner exists.\n\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "admin-banners" + "banners" ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/admin-banners-envelope" - } - } - } - }, "responses": { - "201": { - "description": "Banner created successfully.", + "200": { + "description": "Active banners retrieved successfully. Array is empty when none are active.", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/admin-banners-envelope" + "$ref": "#/components/schemas/admin-banners-collection-envelope" } } } @@ -504,47 +518,42 @@ } } } - } + }, + "parameters": [ + { + "in": "query", + "name": "fields[admin-banners]", + "description": "Return only the specified fields for admin-banners resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ] } }, - "/account/details": { + "/admin/banners": { + "x-vis": [ + "tfe" + ], "get": { - "operationId": "getAccountDetails", - "summary": "Account Details", - "description": "Get your account details", + "operationId": "listAdminBanners", + "summary": "List All Non-Deactivated Site-Wide Announcement Banners (Admin)", + "description": "Returns all non-deactivated banners (deactivated_at IS NULL), regardless of scheduling. Scheduled-but-not-yet-published banners are included so that the admin customization form can pre-populate them for editing or cancellation. Requires site-admin authentication; unauthenticated or non-admin requests receive 404. Returns an empty array when no non-deactivated banner exists. For the public display endpoint (publish-window filtered, no auth required) use GET /api/v2/banners.\n\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "accounts" + "admin-banners" ], "responses": { "200": { - "description": "Account details", + "description": "Non-deactivated banners retrieved successfully. Array is empty when none exist.", "content": { "application/vnd.api+json": { - "examples": { - "successResponse": { - "summary": "Example successful response", - "value": { - "data": { - "type": "users", - "id": "user-12345678", - "attributes": {}, - "relationships": {}, - "links": { - "self": "https://app.terraform.io/api/v2/account/details" - } - } - } - } - }, "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/users-envelope" - }, - { - "description": "User resource representing the account details of the authenticated user.\nFor internal reasons, HCP Terraform associates team and organization tokens\nwith a synthetic user account called service user.\n" - } - ] + "$ref": "#/components/schemas/admin-banners-collection-envelope" } } } @@ -559,34 +568,47 @@ } } } - } - } - }, - "/account/update": { - "patch": { - "operationId": "updateAccount", - "summary": "Update account", - "description": "Update your username and email address. Other attributes are ignored.", + }, + "parameters": [ + { + "in": "query", + "name": "fields[admin-banners]", + "description": "Return only the specified fields for admin-banners resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ] + }, + "post": { + "operationId": "createAdminBanner", + "summary": "Create Site-Wide Announcement Banner", + "description": "Creates a site-wide announcement banner. Only one banner can be active at a time; creating a new banner automatically deactivates any existing active banner. If neither scheduled-publish-at nor scheduled-expire-at are provided, the banner is published immediately.\n\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "accounts" + "admin-banners" ], "requestBody": { "required": true, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/users-envelope" + "$ref": "#/components/schemas/admin-banners-envelope" } } } }, "responses": { - "200": { - "description": "Account updated", + "201": { + "description": "Banner created successfully.", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/users-envelope" + "$ref": "#/components/schemas/admin-banners-envelope" } } } @@ -604,68 +626,55 @@ } } }, - "/account/password": { + "/admin/banners/{id}": { + "x-vis": [ + "tfe" + ], "patch": { - "operationId": "updateAccountPassword", - "summary": "Update account password", - "description": "Change your account password", + "operationId": "updateAdminBanner", + "summary": "Update Site-Wide Announcement Banner", + "description": "Updates an existing site-wide announcement banner. Partial updates are supported: only fields present in the request body are modified. All model validations apply, including the schedule all-or-nothing rule. Returns the updated banner on success.\n\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "accounts" + "admin-banners" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The external ID of the banner to update (e.g. ab-xxxxxxxxxxxxxxxx)." + } ], "requestBody": { "required": true, "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "type": "object", - "required": [ - "type", - "attributes" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "users" - ] - }, - "attributes": { - "type": "object", - "properties": { - "current_password": { - "type": "string", - "description": "The user's current password. Unlike most API data attributes, this one uses underscore_case instead of kebab-case." - }, - "password": { - "type": "string", - "description": "The user's new password." - }, - "password_confirmation": { - "type": "string", - "description": "The confirmation of the user's new password. Unlike most API data attributes, this one uses underscore_case instead of kebab-case." - } - } - } - } - } - } + "$ref": "#/components/schemas/admin-banners-envelope" } } } }, "responses": { "200": { - "description": "Account updated", + "description": "Banner updated successfully.", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/users-envelope" + "$ref": "#/components/schemas/admin-banners-envelope" + } + } + } + }, + "404": { + "description": "Banner not found. The provided id does not match any banner.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } @@ -681,55 +690,35 @@ } } } - } - }, - "/account/hcp-organizations/{hcp_organization_id}": { - "x-vis": [ - "hcpt" - ], - "get": { - "operationId": "getHCPOrganization", - "summary": "HCP Organization", + }, + "delete": { + "operationId": "deactivateAdminBanner", + "summary": "Deactivate Site-Wide Announcement Banner", + "description": "Deactivates a site-wide announcement banner. This is a soft delete: the banner row is retained for audit history, but deactivated-at is set to the current timestamp and the banner is no longer returned by the active banner endpoint. Returns 204 No Content on success.\n\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "accounts" + "admin-banners" ], - "description": "Get details of a specific HCP organization\n\nThis operation is only available in HCP Terraform.", "parameters": [ { - "name": "hcp_organization_id", "in": "path", - "required": true, + "name": "id", "schema": { "type": "string" - } + }, + "required": true, + "description": "The external ID of the banner to deactivate (e.g. ab-xxxxxxxxxxxxxxxx)." } ], "responses": { - "200": { - "description": "Successful response", + "204": { + "description": "Banner deactivated successfully." + }, + "404": { + "description": "Banner not found. The provided id does not match any banner.", "content": { "application/vnd.api+json": { "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/hcp-organization-envelope" - }, - { - "type": "object", - "properties": { - "included": { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/hcp-billing-account" - } - ] - } - } - } - } - ] + "$ref": "#/components/schemas/errors" } } } @@ -747,67 +736,30 @@ } } }, - "/feature-sets": { + "/admin/saml-settings": { "x-vis": [ - "hcpt" + "tfe" ], "get": { - "summary": "List Feature Sets", - "description": "Lists the feature sets available in HCP Terraform. Returns feature sets that are active, current, and public.\n\nThis operation is only available in HCP Terraform.", - "operationId": "listFeatureSets", + "operationId": "getAdminSamlSettings", + "summary": "Show SAML Settings", + "description": "Returns the site-wide SAML single sign-on configuration. SAML settings are a singleton resource; the returned resource always has the id `saml`.\n\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "feature-sets" - ], - "parameters": [ - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" - } + "admin-saml-settings" ], "responses": { "200": { - "description": "Successfully retrieved feature sets", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/feature-sets" - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - } - } - } - } - } - }, - "401": { - "description": "Unauthorized", + "description": "SAML settings retrieved successfully.", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/admin-saml-settings-envelope" } } } }, - "404": { - "description": "Not found", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -816,79 +768,53 @@ } } } - } - } - }, - "/organizations/{organization_name}/feature-sets": { - "x-vis": [ - "hcpt" - ], - "get": { - "summary": "List Feature Sets for Organization", - "description": "Lists the feature sets a particular organization is eligible to access.\n\nThis operation is only available in HCP Terraform.", - "operationId": "listOrganizationFeatureSets", - "tags": [ - "feature-sets" - ], + }, "parameters": [ { - "name": "organization_name", - "in": "path", - "required": true, - "description": "The name of the organization", + "in": "query", + "name": "fields[saml-settings]", + "description": "Return only the specified fields for saml-settings resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string" + } } - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" } + ] + }, + "patch": { + "operationId": "updateAdminSamlSettings", + "summary": "Update SAML Settings", + "description": "Updates the site-wide SAML single sign-on configuration. Partial updates are supported: only attributes present in the request body are modified. Rotating `idp-cert` retains the previous certificate as `old-idp-cert` until it is revoked.\n\n\nThis operation is only available in Terraform Enterprise.", + "tags": [ + "admin-saml-settings" ], - "responses": { - "200": { - "description": "Successfully retrieved feature sets for the organization", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/feature-sets" - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - } - } - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/admin-saml-settings-envelope" } } - }, - "401": { - "description": "Unauthorized", + } + }, + "responses": { + "200": { + "description": "SAML settings updated successfully.", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/admin-saml-settings-envelope" } } } }, - "403": { - "description": "Forbidden", + "422": { + "description": "Validation error.", "content": { "application/vnd.api+json": { "schema": { @@ -897,8 +823,8 @@ } } }, - "404": { - "description": "Organization not found", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -910,41 +836,41 @@ } } }, - "/subscriptions/{id}": { + "/admin/saml-settings/actions/revoke-old-certificate": { "x-vis": [ - "hcpt" + "tfe" ], - "get": { - "operationId": "showSubscription", - "summary": "Show a subscription", - "description": "Show details of a subscription.\n\nThis operation is only available in HCP Terraform.", + "post": { + "operationId": "revokeAdminSamlOldCertificate", + "deprecated": true, + "summary": "Revoke Old SAML Certificate", + "description": "**Deprecated.** Revokes the previous identity provider certificate that was retained when `idp-cert` was last rotated. Use `DELETE /admin/saml-settings/idp-certificates/{external_id}` instead. Returns 400 when SAML is disabled or when there is no old certificate to revoke.\n\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "subscriptions" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "required": true, - "description": "The ID of the subscription to show.", - "schema": { - "type": "string" - } - } + "admin-saml-settings" ], "responses": { "200": { - "description": "Subscription details", + "description": "Old certificate revoked successfully.", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/subscriptions-envelope" + "$ref": "#/components/schemas/admin-saml-settings-envelope" + } + } + } + }, + "400": { + "description": "SAML is not enabled, or there is no old certificate to revoke.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } }, "default": { - "description": "Subscription not found, or user unauthorized to perform action", + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -956,27 +882,17 @@ } } }, - "/organizations/{organization_name}/subscription": { + "/admin/saml-settings/actions/cert-validation": { "x-vis": [ - "hcpt" + "tfe" ], - "patch": { - "operationId": "updateOrganizationSubscription", - "summary": "Update organization subscription", - "description": "Update configurable fields on an organization's active subscription. Currently supports setting, updating, or clearing the RUM alert threshold. Requires org owner permissions. Only available on paid RUM plans.\n\n\nThis operation is only available in HCP Terraform.", + "x-tfe-min-version": "2.1.0", + "post": { + "operationId": "validateSamlIdpCert", + "summary": "Validate an IdP Certificate", + "description": "Validates a PEM-encoded X.509 certificate without persisting it. Returns whether the certificate is valid (non-expired and parseable), along with parsed metadata when the certificate is well-formed. Returns 422 when the `cert` attribute is absent or blank.\n\n\nThis operation is only available in Terraform Enterprise version 2.1.0 or later.", "tags": [ - "subscriptions" - ], - "parameters": [ - { - "in": "path", - "name": "organization_name", - "schema": { - "type": "string" - }, - "required": true, - "description": "The name of the organization." - } + "admin-saml-settings" ], "requestBody": { "required": true, @@ -991,24 +907,18 @@ "data": { "type": "object", "required": [ - "type", "attributes" ], "properties": { - "type": { - "type": "string", - "enum": [ - "subscriptions" - ] - }, "attributes": { "type": "object", + "required": [ + "cert" + ], "properties": { - "rum-alert-threshold": { - "type": "integer", - "nullable": true, - "minimum": 0, - "description": "The RUM usage alert threshold. When the organization's billable resource count meets or exceeds this value, an alert email is sent to org owners. Send null or 0 to clear the threshold and disable alerting.\n" + "cert": { + "type": "string", + "description": "PEM-encoded X.509 certificate to validate." } } } @@ -1021,11 +931,60 @@ }, "responses": { "200": { - "description": "Subscription updated", + "description": "Validation result. `is-valid` is `false` for expired or unparseable certificates; remaining attributes are only present when the certificate is parseable.\n", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/subscriptions-envelope" + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "saml-cert-validations" + ] + }, + "attributes": { + "type": "object", + "required": [ + "is-valid" + ], + "properties": { + "is-valid": { + "type": "boolean", + "description": "Whether the certificate is parseable and non-expired." + }, + "issuer": { + "type": "string", + "nullable": true, + "description": "Human-readable issuer derived from the O and CN fields of the certificate. Only present when parseable.\n" + }, + "expires-at": { + "type": "string", + "format": "date-time", + "description": "ISO 8601 UTC datetime when the certificate expires. Only present when parseable.\n" + }, + "signature-algorithm": { + "type": "string", + "description": "Signature algorithm of the certificate (e.g. `sha256WithRSAEncryption`). Only present when parseable.\n" + } + } + } + } + } + } + } + } + } + }, + "422": { + "description": "The `cert` attribute is missing or blank.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } @@ -1043,71 +1002,30 @@ } } }, - "/organizations/{organization_name}/invoices": { + "/admin/scim-settings": { "x-vis": [ - "hcpt" + "tfe" ], "get": { - "operationId": "listOrganizationInvoices", - "summary": "List organization invoices", - "description": "Lists the previous invoices for an organization. This endpoint uses cursor-based pagination with a fixed page size of 10 items. Pass the value of meta.continuation as the cursor parameter to retrieve the next page. When meta.continuation is null there are no further pages.\n\nThis operation is only available in HCP Terraform.", + "operationId": "getAdminScimSettings", + "summary": "Show SCIM Settings", + "description": "Returns the site-wide SCIM provisioning configuration. SCIM settings are a singleton resource; the returned resource always has the id `scim`.\n\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "billing-invoices" - ], - "parameters": [ - { - "in": "path", - "name": "organization_name", - "schema": { - "type": "string" - }, - "required": true, - "description": "The name of the organization." - }, - { - "in": "query", - "name": "cursor", - "schema": { - "type": "string" - }, - "required": false, - "description": "The ID of the invoice where the page should start. If omitted, the endpoint returns the first page." - } + "admin-scim-settings" ], "responses": { "200": { - "description": "Invoice list", + "description": "SCIM settings retrieved successfully.", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/billing-invoices" - } - }, - "meta": { - "type": "object", - "properties": { - "continuation": { - "type": "string", - "nullable": true, - "description": "The cursor value to use for the next page request. Null when there are no more items." - } - } - } - } + "$ref": "#/components/schemas/admin-scim-settings-envelope" } } } }, "default": { - "description": "Unauthorized, forbidden, or not found", + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -1116,61 +1034,65 @@ } } } - } - } - }, - "/organizations/{organization_name}/invoices/next": { - "x-vis": [ - "hcpt" - ], - "get": { - "operationId": "showOrganizationNextInvoice", - "summary": "Get next invoice", - "description": "Returns the upcoming invoice for the next billing period for an organization. Returns null when no upcoming invoice is available.\n\nThis operation is only available in HCP Terraform.", - "tags": [ - "billing-invoices" - ], + }, "parameters": [ { - "in": "path", - "name": "organization_name", + "in": "query", + "name": "fields[scim-settings]", + "description": "Return only the specified fields for scim-settings resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": true, - "description": "The name of the organization." + "type": "array", + "items": { + "type": "string" + } + } } + ] + }, + "patch": { + "operationId": "updateAdminScimSettings", + "summary": "Update SCIM Settings", + "description": "Updates the site-wide SCIM provisioning configuration. Enabling SCIM requires SAML to be enabled with a SCIM-compatible provider type. Disabling SCIM also clears the paused state.\n\n\nThis operation is only available in Terraform Enterprise.", + "tags": [ + "admin-scim-settings" ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/admin-scim-settings-envelope" + } + } + } + }, "responses": { "200": { - "description": "Upcoming invoice, or null if none is available", + "description": "SCIM settings updated successfully.", "content": { - "application/json": { + "application/vnd.api+json": { "schema": { - "oneOf": [ - { - "type": "string", - "enum": [ - "null" - ] - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/billing-invoices" - } - } - } - ] + "$ref": "#/components/schemas/admin-scim-settings-envelope" + } + } + } + }, + "422": { + "description": "Validation error.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } }, "default": { - "description": "Unauthorized, forbidden, or not found", + "description": "Error details", "content": { - "application/json": { + "application/vnd.api+json": { "schema": { "$ref": "#/components/schemas/errors" } @@ -1178,34 +1100,21 @@ } } } - } - }, - "/organizations/{organization_name}/agent-pools": { - "post": { - "operationId": "createAgentPool", - "summary": "Create Agent Pool", - "description": "Create an agent pool for an organization.", + }, + "delete": { + "operationId": "resetAdminScimSettings", + "summary": "Reset SCIM Settings", + "description": "Resets the SCIM configuration: disables provisioning, clears the paused state, and unlinks the site admin and site auditor groups. Returns the reset settings resource rather than 204.\n\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "agent-pools" - ], - "parameters": [ - { - "in": "path", - "name": "organization_name", - "schema": { - "type": "string" - }, - "required": true, - "description": "Name of the organization" - } + "admin-scim-settings" ], "responses": { "200": { - "description": "Agent pool created", + "description": "SCIM settings reset successfully.", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/agent-pools-envelope" + "$ref": "#/components/schemas/admin-scim-settings-envelope" } } } @@ -1221,87 +1130,92 @@ } } } - }, + } + }, + "/admin/saml-settings/idp-certificates": { + "x-vis": [ + "tfe" + ], + "x-tfe-min-version": "2.1.0", "get": { - "operationId": "listAgentPools", - "summary": "List Agent Pools", - "description": "List agent pools, their agents, and their tokens for an organization.", + "operationId": "listSamlIdpCertificates", + "summary": "List IdP Certificates", + "description": "Returns all IdP certificates associated with the SAML settings singleton. Results are ordered: `legacy_primary` first, `legacy_old` second, then `managed` certificates sorted by `updated-at` ascending.\n\n\nThis operation is only available in Terraform Enterprise version 2.1.0 or later.", "tags": [ - "agent-pools" + "saml-idp-certificates" ], - "parameters": [ - { - "in": "path", - "name": "organization_name", - "schema": { - "type": "string" - }, - "required": true, - "description": "Name of the organization" - }, - { - "in": "query", - "name": "filter[allowed-workspaces][name]", - "schema": { - "type": "string" - }, - "required": false, - "description": "Filters agent pools to those associated with the given workspace. The workspace must have permission to use the agent pool." - }, - { - "in": "query", - "name": "q", - "schema": { - "type": "string" - }, - "required": false, - "description": "A search query string. Agent pools are searchable by name." + "responses": { + "200": { + "description": "IdP certificates retrieved successfully.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/saml-idp-certificates-collection-envelope" + } + } + } }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + }, + "parameters": [ { "in": "query", - "name": "sort", + "name": "fields[saml-idp-certificates]", + "description": "Return only the specified fields for saml-idp-certificates resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": false, - "description": "Allows sorting the returned agents pools. Valid values are \"name\" and \"created-at\". Prepending a hyphen to the sort parameter will reverse the order (e.g. \"-name\")." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "type": "array", + "items": { + "type": "string" + } + } } + ] + }, + "post": { + "operationId": "createSamlIdpCertificate", + "summary": "Create an IdP Certificate", + "description": "Creates a new IdP certificate with `cert-role` of `managed`. The certificate must be a valid, non-expired PEM-encoded X.509 certificate and its SHA-256 fingerprint must be unique across all trusted certificates.\n\n\nThis operation is only available in Terraform Enterprise version 2.1.0 or later.", + "tags": [ + "saml-idp-certificates" ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/saml-idp-certificates-envelope" + } + } + } + }, "responses": { - "200": { - "description": "Agent pools", + "201": { + "description": "IdP certificate created successfully.", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/agent-pools" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } + "$ref": "#/components/schemas/saml-idp-certificates-envelope" + } + } + } + }, + "422": { + "description": "Validation error. Possible causes: cert is missing or unparseable, cert has expired, fingerprint is already trusted, or display-name is missing.\n", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } @@ -1319,32 +1233,59 @@ } } }, - "/agent-pools/{agent_pool_id}": { + "/admin/saml-settings/idp-certificates/{external_id}": { + "x-vis": [ + "tfe" + ], + "x-tfe-min-version": "2.1.0", "get": { - "operationId": "getAgentPool", - "summary": "Get Agent Pool details", - "description": "Get details about an agent pool", + "operationId": "getSamlIdpCertificate", + "summary": "Show an IdP Certificate", + "description": "Returns a single IdP certificate by its external ID.\n\nThis operation is only available in Terraform Enterprise version 2.1.0 or later.", "tags": [ - "agent-pools" + "saml-idp-certificates" ], "parameters": [ { "in": "path", - "name": "agent_pool_id", + "name": "external_id", "schema": { "type": "string" }, "required": true, - "description": "Agent Pool ID" + "description": "The external ID of the IdP certificate (e.g. idpc-xxxxxxxxxxxxxxxx)." + }, + { + "in": "query", + "name": "fields[saml-idp-certificates]", + "description": "Return only the specified fields for saml-idp-certificates resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Agent pool details", + "description": "IdP certificate retrieved successfully.", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/agent-pools-envelope" + "$ref": "#/components/schemas/saml-idp-certificates-envelope" + } + } + } + }, + "404": { + "description": "Certificate not found.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } @@ -1362,21 +1303,21 @@ } }, "patch": { - "operationId": "updateAgentPool", - "summary": "Update Agent Pool", - "description": "Update an agent pool", + "operationId": "updateSamlIdpCertificate", + "summary": "Update an IdP Certificate", + "description": "Updates an IdP certificate. Only `display-name` may be changed for `legacy_primary` and `legacy_old` certificates; attempting to update the `cert` body of those roles returns 422. For `managed` certificates, both `display-name` and `cert` may be updated.\n\n\nThis operation is only available in Terraform Enterprise version 2.1.0 or later.", "tags": [ - "agent-pools" + "saml-idp-certificates" ], "parameters": [ { "in": "path", - "name": "agent_pool_id", + "name": "external_id", "schema": { "type": "string" }, "required": true, - "description": "Agent Pool ID" + "description": "The external ID of the IdP certificate to update." } ], "requestBody": { @@ -1384,18 +1325,38 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/agent-pools-envelope" + "$ref": "#/components/schemas/saml-idp-certificates-envelope" } } } }, "responses": { "200": { - "description": "Agent pool updated", + "description": "IdP certificate updated successfully.", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/agent-pools-envelope" + "$ref": "#/components/schemas/saml-idp-certificates-envelope" + } + } + } + }, + "404": { + "description": "Certificate not found.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Validation error. Possible causes: attempting to replace the cert body of a `legacy_primary` or `legacy_old` certificate, or invalid cert content.\n", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } @@ -1413,29 +1374,29 @@ } }, "delete": { - "operationId": "deleteAgentPool", - "summary": "Delete Agent Pool", - "description": "Delete an agent pool", + "operationId": "deleteSamlIdpCertificate", + "summary": "Delete an IdP Certificate", + "description": "Deletes an IdP certificate. If SAML is enabled and this is the last trusted certificate (`cert-role` of `managed` or `legacy_primary`), deletion is rejected with 422.\n\n\nThis operation is only available in Terraform Enterprise version 2.1.0 or later.", "tags": [ - "agent-pools" + "saml-idp-certificates" ], "parameters": [ { "in": "path", - "name": "agent_pool_id", + "name": "external_id", "schema": { "type": "string" }, "required": true, - "description": "Agent Pool ID" + "description": "The external ID of the IdP certificate to delete." } ], "responses": { "204": { - "description": "Agent pool deleted" + "description": "IdP certificate deleted successfully." }, - "default": { - "description": "Error details", + "404": { + "description": "Certificate not found.", "content": { "application/vnd.api+json": { "schema": { @@ -1443,86 +1404,19 @@ } } } - } - } - } - }, - "/agent-pools/{agent_pool_id}/agents": { - "get": { - "operationId": "listAgents", - "summary": "List Agents", - "description": "List all agents in the specified agent pool.", - "tags": [ - "agent-pools" - ], - "parameters": [ - { - "in": "path", - "name": "agent_pool_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the Agent Pool to list." - }, - { - "in": "query", - "name": "filter[last-ping-since]", - "schema": { - "type": "string", - "format": "date-time" - }, - "required": false, - "description": "Accepts a date in ISO8601 format (ex. `2020-08-11T10:41:23Z`)." - }, - { - "in": "query", - "name": "sort", - "schema": { - "type": "string" - }, - "required": false, - "description": "Allows sorting the returned agents. Valid value is \"created-at\". Prepending a hyphen to the sort parameter will reverse the order (e.g. \"-name\")." - }, - { - "$ref": "#/components/parameters/page_number" }, - { - "$ref": "#/components/parameters/page_size" - } - ], - "responses": { - "200": { - "description": "Success", + "422": { + "description": "Cannot delete the last trusted certificate while SAML is enabled.", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/agents" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } + "$ref": "#/components/schemas/errors" } } } }, "default": { - "description": "Agent Pool not found, or user unauthorized to perform action", + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -1534,38 +1428,52 @@ } } }, - "/agents/{agent_id}": { + "/admin/saml-settings/idp-certificates/{external_id}/download": { + "x-vis": [ + "tfe" + ], + "x-tfe-min-version": "2.1.0", "get": { - "operationId": "getAgent", - "summary": "Get Agent details", - "description": "Get details about an agent", + "operationId": "downloadSamlIdpCertificate", + "summary": "Download an IdP Certificate", + "description": "Downloads the PEM-encoded certificate body as an attachment (`application/x-pem-file`). The filename is derived from the certificate's external ID (e.g. `idp-cert-idpc-xxxxxxxxxxxxxxxx.pem`).\n\n\nThis operation is only available in Terraform Enterprise version 2.1.0 or later.", "tags": [ - "agent-pools" + "saml-idp-certificates" ], "parameters": [ { "in": "path", - "name": "agent_id", + "name": "external_id", "schema": { "type": "string" }, "required": true, - "description": "Agent ID" + "description": "The external ID of the IdP certificate to download." } ], "responses": { "200": { - "description": "Agent details", + "description": "PEM certificate file returned as attachment.", + "content": { + "application/x-pem-file": { + "schema": { + "type": "string" + } + } + } + }, + "404": { + "description": "Certificate not found.", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/agents-envelope" + "$ref": "#/components/schemas/errors" } } } }, - "default": { - "description": "Error details", + "503": { + "description": "Vault is unavailable; the encrypted certificate could not be retrieved.", "content": { "application/vnd.api+json": { "schema": { @@ -1573,30 +1481,6 @@ } } } - } - } - }, - "delete": { - "operationId": "deleteAgent", - "summary": "Delete Agent", - "description": "Remove an agent", - "tags": [ - "agent-pools" - ], - "parameters": [ - { - "in": "path", - "name": "agent_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "Agent ID" - } - ], - "responses": { - "204": { - "description": "Agent removed" }, "default": { "description": "Error details", @@ -1611,35 +1495,21 @@ } } }, - "/cidr-range-lists/{cidr_range_list_id}": { - "x-vis": [ - "public-beta" - ], + "/admin/customization-settings": { "get": { - "operationId": "getCidrRangeList", - "summary": "Get CIDR Range List details", - "description": "Get details about a CIDR Range List\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "operationId": "getAdminCustomizationSettings", + "summary": "Retrieve Admin Customization Settings", + "description": "Returns the current admin customization settings singleton. This endpoint is available to all authenticated users (not restricted to site administrators) so that the UI can read customization values for display. TFE-only attributes (internal-support-url, internal-documentation-url, internal-tutorials-url, avatar-sources) are only present in the response when running Terraform Enterprise.\n", "tags": [ - "ip-allowlists" - ], - "parameters": [ - { - "in": "path", - "name": "cidr_range_list_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "CIDR Range List ID" - } + "admin-customization-settings" ], "responses": { "200": { - "description": "CIDR Range List details", + "description": "Customization settings retrieved successfully.", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/cidr-range-list-envelope" + "$ref": "#/components/schemas/admin-customization-settings-envelope" } } } @@ -1654,49 +1524,53 @@ } } } - } - }, - "patch": { - "operationId": "updateCidrRangeList", - "summary": "Update CIDR Range List", - "description": "Update a CIDR Range List\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", - "tags": [ - "ip-allowlists" - ], + }, "parameters": [ { - "in": "path", - "name": "cidr_range_list_id", + "in": "query", + "name": "fields[customization-settings]", + "description": "Return only the specified fields for customization-settings resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": true, - "description": "CIDR Range List ID" + "type": "array", + "items": { + "type": "string" + } + } } + ] + }, + "patch": { + "operationId": "updateAdminCustomizationSettings", + "summary": "Update Admin Customization Settings", + "description": "Updates the admin customization settings singleton. Only site administrators may update these settings. Partial updates are supported: only attributes present in the request body are modified. TFE-only attributes (internal-support-url, internal-documentation-url, internal-tutorials-url, avatar-sources) are silently ignored when submitted against an HCP Terraform instance. Setting an optional URL field to null or an empty string clears the override and restores the default HashiCorp link.\n", + "tags": [ + "admin-customization-settings" ], "requestBody": { "required": true, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/cidr-range-list-envelope" + "$ref": "#/components/schemas/admin-customization-settings-envelope" } } } }, "responses": { "200": { - "description": "CIDR Range List updated", + "description": "Customization settings updated successfully.", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/cidr-range-list-envelope" + "$ref": "#/components/schemas/admin-customization-settings-envelope" } } } }, - "default": { - "description": "Error details", + "422": { + "description": "Validation failed. For example, an invalid URL scheme was submitted.", "content": { "application/vnd.api+json": { "schema": { @@ -1704,30 +1578,6 @@ } } } - } - } - }, - "delete": { - "operationId": "deleteCidrRangeList", - "summary": "Delete CIDR Range List", - "description": "Delete a CIDR Range List.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", - "tags": [ - "ip-allowlists" - ], - "parameters": [ - { - "in": "path", - "name": "cidr_range_list_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "CIDR Range List ID" - } - ], - "responses": { - "204": { - "description": "CIDR Range List deleted" }, "default": { "description": "Error details", @@ -1742,66 +1592,50 @@ } } }, - "/cidr-range-lists/{cidr_range_list_id}/relationships/cidr-ranges": { - "x-vis": [ - "public-beta" - ], + "/account/details": { "get": { - "operationId": "listCidrRanges", - "summary": "List CIDR Ranges", - "description": "List all CIDR Ranges in a CIDR Range List\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "operationId": "getAccountDetails", + "summary": "Account Details", + "description": "Get your account details", "tags": [ - "ip-allowlists" - ], - "parameters": [ - { - "in": "path", - "name": "cidr_range_list_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "CIDR Range List ID" - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" - } + "accounts" ], "responses": { "200": { - "description": "Success", + "description": "Account details", "content": { "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/cidr-ranges" - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" + "examples": { + "successResponse": { + "summary": "Example successful response", + "value": { + "data": { + "type": "users", + "id": "user-12345678", + "attributes": {}, + "relationships": {}, + "links": { + "self": "https://app.terraform.io/api/v2/account/details" } } } } + }, + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/users-envelope" + }, + { + "description": "User resource representing the account details of the authenticated user.\nFor internal reasons, HCP Terraform associates team and organization tokens\nwith a synthetic user account called service user.\n" + } + ] } } } }, "default": { - "description": "Organization not found, or user unauthorized to perform action", + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -1810,43 +1644,49 @@ } } } - } - }, - "post": { - "operationId": "createCidrRange", - "summary": "Create CIDR Range", - "description": "Create a new CIDR Range\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", - "tags": [ - "ip-allowlists" - ], + }, "parameters": [ { - "in": "path", - "name": "cidr_range_list_id", + "in": "query", + "name": "fields[users]", + "description": "Return only the specified fields for users resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": true, - "description": "ID of a CIDR Range List for the newly created CIDR Range" + "type": "array", + "items": { + "type": "string" + } + } } + ] + } + }, + "/account/update": { + "patch": { + "operationId": "updateAccount", + "summary": "Update account", + "description": "Update your username and email address. Other attributes are ignored.", + "tags": [ + "accounts" ], "requestBody": { "required": true, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/cidr-ranges-envelope" + "$ref": "#/components/schemas/users-envelope" } } } }, "responses": { - "201": { - "description": "CIDR Range created", + "200": { + "description": "Account updated", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/cidr-ranges-envelope" + "$ref": "#/components/schemas/users-envelope" } } } @@ -1864,41 +1704,71 @@ } } }, - "/cidr-range-lists/{cidr_range_list_id}/relationships/agent-pools": { - "x-vis": [ - "public-beta" - ], - "post": { - "operationId": "assignAgentPoolsToCidrRangeList", - "summary": "Assign Agent Pools to a CIDR Range List", - "description": "Assign one or more Agent Pools to a CIDR Range List\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "/account/password": { + "patch": { + "operationId": "updateAccountPassword", + "summary": "Update account password", + "description": "Change your account password", "tags": [ - "ip-allowlists" - ], - "parameters": [ - { - "in": "path", - "name": "cidr_range_list_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "ID of a CIDR Range List to assign Agent Pools to" - } + "accounts" ], "requestBody": { "required": true, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/agent-pool-ids" + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "users" + ] + }, + "attributes": { + "type": "object", + "properties": { + "current_password": { + "type": "string", + "description": "The user's current password. Unlike most API data attributes, this one uses underscore_case instead of kebab-case." + }, + "password": { + "type": "string", + "description": "The user's new password." + }, + "password_confirmation": { + "type": "string", + "description": "The confirmation of the user's new password. Unlike most API data attributes, this one uses underscore_case instead of kebab-case." + } + } + } + } + } + } } } } }, "responses": { - "204": { - "description": "Agent Pools assigned. No content is returned." + "200": { + "description": "Account updated", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/users-envelope" + } + } + } }, "default": { "description": "Error details", @@ -1911,38 +1781,52 @@ } } } - }, - "delete": { - "operationId": "unassignAgentPoolsFromCidrRangeList", - "summary": "Unassign Agent Pools from a CIDR Range List", - "description": "Unassign one or more Agent Pools from a CIDR Range List\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + } + }, + "/account/hcp-organizations/{hcp_organization_id}": { + "x-vis": [ + "hcpt" + ], + "get": { + "operationId": "getHCPOrganization", + "summary": "HCP Organization", "tags": [ - "ip-allowlists" + "accounts" ], + "description": "Get details of a specific HCP organization\n\nThis operation is only available in HCP Terraform.", "parameters": [ { + "name": "hcp_organization_id", "in": "path", - "name": "cidr_range_list_id", + "required": true, "schema": { "type": "string" - }, - "required": true, - "description": "ID of the CIDR Range List you want to unassign Agent Pools from" - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/agent-pool-ids" + } + }, + { + "in": "query", + "name": "fields[hcp-organization]", + "description": "Return only the specified fields for hcp-organization resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "204": { - "description": "Agent Pools unassigned. No content is returned." + "200": { + "description": "Successful response", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/hcp-organization-envelope" + } + } + } }, "default": { "description": "Error details", @@ -1957,41 +1841,80 @@ } } }, - "/cidr-ranges/{cidr_range_id}": { + "/feature-sets": { "x-vis": [ - "public-beta" + "hcpt" ], "get": { - "operationId": "getCidrRange", - "summary": "Get CIDR Range details", - "description": "Get details about a CIDR Range\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "summary": "List Feature Sets", + "description": "Lists the feature sets available in HCP Terraform. Returns feature sets that are active, current, and public.\n\nThis operation is only available in HCP Terraform.", + "operationId": "listFeatureSets", "tags": [ - "ip-allowlists" + "feature-sets" ], "parameters": [ { - "in": "path", - "name": "cidr_range_id", + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[feature-sets]", + "description": "Return only the specified fields for feature-sets resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": true, - "description": "CIDR Range ID" + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "CIDR Range details", + "description": "Successfully retrieved feature sets", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/cidr-ranges-envelope" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/feature-sets" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } } } } }, - "default": { - "description": "Error details", + "401": { + "description": "Unauthorized", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "404": { + "description": "Not found", "content": { "application/vnd.api+json": { "schema": { @@ -2001,48 +1924,81 @@ } } } - }, - "patch": { - "operationId": "updateCidrRange", - "summary": "Update CIDR Range", - "description": "Update a CIDR Range\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + } + }, + "/organizations/{organization_name}/feature-sets": { + "x-vis": [ + "hcpt" + ], + "get": { + "summary": "List Feature Sets for Organization", + "description": "Lists the feature sets a particular organization is eligible to access.\n\nThis operation is only available in HCP Terraform.", + "operationId": "listOrganizationFeatureSets", "tags": [ - "ip-allowlists" + "feature-sets" ], "parameters": [ { + "name": "organization_name", "in": "path", - "name": "cidr_range_id", + "required": true, + "description": "The name of the organization", "schema": { "type": "string" - }, - "required": true, - "description": "CIDR Range ID" - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/cidr-ranges-envelope" + } + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[feature-sets]", + "description": "Return only the specified fields for feature-sets resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { "200": { - "description": "CIDR Range updated", + "description": "Successfully retrieved feature sets for the organization", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/cidr-ranges-envelope" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/feature-sets" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } } } } }, - "default": { - "description": "Error details", + "401": { + "description": "Unauthorized", "content": { "application/vnd.api+json": { "schema": { @@ -2050,33 +2006,19 @@ } } } - } - } - }, - "delete": { - "operationId": "deleteCidrRange", - "summary": "Delete CIDR Range", - "description": "Delete a CIDR Range.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", - "tags": [ - "ip-allowlists" - ], - "parameters": [ - { - "in": "path", - "name": "cidr_range_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "CIDR Range ID" - } - ], - "responses": { - "204": { - "description": "CIDR Range deleted" }, - "default": { - "description": "Error details", + "403": { + "description": "Forbidden", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "404": { + "description": "Organization not found", "content": { "application/vnd.api+json": { "schema": { @@ -2088,52 +2030,54 @@ } } }, - "/organizations/{organization_name}/metrics-tokens": { + "/subscriptions/{id}": { "x-vis": [ "hcpt" ], "get": { - "operationId": "listMetricsTokens", - "summary": "List tokens", - "description": "Lists all Metrics service tokens for the organization.\n\nThis operation is only available in HCP Terraform.", + "operationId": "showSubscription", + "summary": "Show a subscription", + "description": "Show details of a subscription.\n\nThis operation is only available in HCP Terraform.", "tags": [ - "metrics-tokens" + "subscriptions" ], "parameters": [ { + "name": "id", "in": "path", - "name": "organization_name", + "required": true, + "description": "The ID of the subscription to show.", "schema": { "type": "string" - }, - "required": true, - "description": "The name of the organization to list tokens for." + } + }, + { + "in": "query", + "name": "fields[subscriptions]", + "description": "Return only the specified fields for subscriptions resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Success", + "description": "Subscription details", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/metrics-token" - } - } - } + "$ref": "#/components/schemas/subscriptions-envelope" } } } }, "default": { - "description": "Error details", + "description": "Subscription not found, or user unauthorized to perform action", "content": { "application/vnd.api+json": { "schema": { @@ -2143,13 +2087,18 @@ } } } - }, - "post": { - "operationId": "createMetricsToken", - "summary": "Generate a new token", - "description": "Generates a new Metrics Service token.\n\nThis operation is only available in HCP Terraform.", + } + }, + "/organizations/{organization_name}/subscription": { + "x-vis": [ + "hcpt" + ], + "patch": { + "operationId": "updateOrganizationSubscription", + "summary": "Update organization subscription", + "description": "Update configurable fields on an organization's active subscription. Currently supports setting, updating, or clearing the RUM alert threshold. Requires org owner permissions. Only available on paid RUM plans.\n\n\nThis operation is only available in HCP Terraform.", "tags": [ - "metrics-tokens" + "subscriptions" ], "parameters": [ { @@ -2159,7 +2108,7 @@ "type": "string" }, "required": true, - "description": "The name of the organization to generate a token for." + "description": "The name of the organization." } ], "requestBody": { @@ -2182,23 +2131,17 @@ "type": { "type": "string", "enum": [ - "metrics-tokens" + "subscriptions" ] }, "attributes": { "type": "object", - "required": [ - "name" - ], "properties": { - "name": { - "type": "string", - "description": "The name of the token." - }, - "expires-at": { - "type": "string", - "format": "date-time", - "description": "The time when the token expires." + "rum-alert-threshold": { + "type": "integer", + "nullable": true, + "minimum": 0, + "description": "The RUM usage alert threshold. When the organization's billable resource count meets or exceeds this value, an alert email is sent to org owners. Send null or 0 to clear the threshold and disable alerting.\n" } } } @@ -2210,20 +2153,12 @@ } }, "responses": { - "201": { - "description": "Success", + "200": { + "description": "Subscription updated", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "$ref": "#/components/schemas/metrics-token" - } - } + "$ref": "#/components/schemas/subscriptions-envelope" } } } @@ -2241,16 +2176,13 @@ } } }, - "/organizations/{organization_name}/metrics-tokens/{id}": { - "x-vis": [ - "hcpt" - ], - "delete": { - "operationId": "deleteMetricsToken", - "summary": "Delete a token", - "description": "Deletes a Metrics Service token.\n\nThis operation is only available in HCP Terraform.", + "/organizations/{organization_name}/agent-pools": { + "post": { + "operationId": "createAgentPool", + "summary": "Create Agent Pool", + "description": "Create an agent pool for an organization.", "tags": [ - "metrics-tokens" + "agent-pools" ], "parameters": [ { @@ -2260,21 +2192,29 @@ "type": "string" }, "required": true, - "description": "Which organization's token should be deleted." - }, - { - "in": "path", - "name": "id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the token to delete." + "description": "Name of the organization" } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/agent-pools-envelope" + } + } + } + }, "responses": { - "204": { - "description": "Success" + "200": { + "description": "Agent pool created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/agent-pools-envelope" + } + } + } }, "default": { "description": "Error details", @@ -2287,71 +2227,74 @@ } } } - } - }, - "/organizations": { + }, "get": { - "operationId": "listOrganizations", - "summary": "List Organizations", - "description": "List organizations.", + "operationId": "listAgentPools", + "summary": "List Agent Pools", + "description": "List agent pools, their agents, and their tokens for an organization.", "tags": [ - "organizations" + "agent-pools" ], "parameters": [ { - "in": "query", - "name": "include", - "style": "form", - "explode": false, + "in": "path", + "name": "organization_name", "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "subscription" - ] - } + "type": "string" }, - "required": false, - "description": "Optionally side-load relationships of the specified name" + "required": true, + "description": "Name of the organization" }, { "in": "query", - "name": "q", + "name": "filter[allowed-workspaces][name]", "schema": { "type": "string" }, "required": false, - "description": "A search query string. Organizations are searchable by name and notification email." + "description": "Filters agent pools to those associated with the given workspace. The workspace must have permission to use the agent pool." }, { "in": "query", - "name": "q[email]", + "name": "q", "schema": { "type": "string" }, "required": false, - "description": "A search query string. This query searches organizations by notification email." + "description": "A search query string. Agent pools are searchable by name." }, { "in": "query", - "name": "q[name]", + "name": "sort", "schema": { "type": "string" }, "required": false, - "description": "A search query string. This query searches organizations by name." + "description": "Allows sorting the returned agents pools. Valid values are \"name\" and \"created-at\". Prepending a hyphen to the sort parameter will reverse the order (e.g. \"-name\")." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[agent-pools]", + "description": "Return only the specified fields for agent-pools resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Organizations list", + "description": "Agent pools", "content": { "application/vnd.api+json": { "schema": { @@ -2363,7 +2306,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/organizations" + "$ref": "#/components/schemas/agent-pools" } }, "meta": { @@ -2376,16 +2319,6 @@ }, "links": { "$ref": "#/components/schemas/self-with-pagination" - }, - "included": { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/subscriptions" - } - ] - } } } } @@ -2403,31 +2336,98 @@ } } } + } + }, + "/agent-pools/{agent_pool_id}": { + "get": { + "operationId": "getAgentPool", + "summary": "Get Agent Pool details", + "description": "Get details about an agent pool", + "tags": [ + "agent-pools" + ], + "parameters": [ + { + "in": "path", + "name": "agent_pool_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "Agent Pool ID" + }, + { + "in": "query", + "name": "fields[agent-pools]", + "description": "Return only the specified fields for agent-pools resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Agent pool details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/agent-pools-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } }, - "post": { - "operationId": "createOrganization", - "summary": "Create Organization", - "description": "Create an organization.", + "patch": { + "operationId": "updateAgentPool", + "summary": "Update Agent Pool", + "description": "Update an agent pool", "tags": [ - "organizations" + "agent-pools" + ], + "parameters": [ + { + "in": "path", + "name": "agent_pool_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "Agent Pool ID" + } ], "requestBody": { "required": true, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/organizations-envelope" + "$ref": "#/components/schemas/agent-pools-envelope" } } } }, "responses": { - "201": { - "description": "Organization created", + "200": { + "description": "Agent pool updated", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/organizations-envelope" + "$ref": "#/components/schemas/agent-pools-envelope" } } } @@ -2443,78 +2443,181 @@ } } } + }, + "delete": { + "operationId": "deleteAgentPool", + "summary": "Delete Agent Pool", + "description": "Delete an agent pool", + "tags": [ + "agent-pools" + ], + "parameters": [ + { + "in": "path", + "name": "agent_pool_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "Agent Pool ID" + } + ], + "responses": { + "204": { + "description": "Agent pool deleted" + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } } }, - "/organizations/{organization_name}": { + "/agent-pools/{agent_pool_id}/agents": { "get": { - "operationId": "getOrganization", - "summary": "Get Organization details", - "description": "Get details about an organization.", + "operationId": "listAgents", + "summary": "List Agents", + "description": "List all agents in the specified agent pool.", "tags": [ - "organizations" + "agent-pools" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "agent_pool_id", "schema": { "type": "string" }, "required": true, - "description": "Organization Name" + "description": "The ID of the Agent Pool to list." }, { "in": "query", - "name": "include", + "name": "filter[last-ping-since]", + "schema": { + "type": "string", + "format": "date-time" + }, + "required": false, + "description": "Accepts a date in ISO8601 format (ex. `2020-08-11T10:41:23Z`)." + }, + { + "in": "query", + "name": "sort", + "schema": { + "type": "string" + }, + "required": false, + "description": "Allows sorting the returned agents. Valid value is \"created-at\". Prepending a hyphen to the sort parameter will reverse the order (e.g. \"-name\")." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[agents]", + "description": "Return only the specified fields for agents resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", "style": "form", "explode": false, "schema": { "type": "array", "items": { - "type": "string", - "enum": [ - "subscription", - "entitlement_set", - "default-project" - ] + "type": "string" } - }, - "required": false, - "description": "Optionally side-load relationships of the specified name" + } } ], "responses": { "200": { - "description": "Organization details", + "description": "Success", "content": { "application/vnd.api+json": { "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/organizations-envelope" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/agents" + } }, - { + "meta": { "type": "object", "properties": { - "included": { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/subscriptions" - }, - { - "$ref": "#/components/schemas/projects" - }, - { - "$ref": "#/components/schemas/entitlement-sets" - } - ] - } + "pagination": { + "$ref": "#/components/schemas/pagination" } } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" } - ] + } + } + } + } + }, + "default": { + "description": "Agent Pool not found, or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/agents/{agent_id}": { + "get": { + "operationId": "getAgent", + "summary": "Get Agent details", + "description": "Get details about an agent", + "tags": [ + "agent-pools" + ], + "parameters": [ + { + "in": "path", + "name": "agent_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "Agent ID" + }, + { + "in": "query", + "name": "fields[agents]", + "description": "Return only the specified fields for agents resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Agent details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/agents-envelope" } } } @@ -2531,41 +2634,83 @@ } } }, - "put": { + "delete": { + "operationId": "deleteAgent", + "summary": "Delete Agent", + "description": "Remove an agent", "tags": [ - "organizations" + "agent-pools" ], - "operationId": "updateOrganization", - "summary": "Update Organization", - "description": "Update an organization.", "parameters": [ { "in": "path", - "name": "organization_name", + "name": "agent_id", "schema": { "type": "string" }, "required": true, - "description": "Organization Name" + "description": "Agent ID" } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/organizations-envelope" + "responses": { + "204": { + "description": "Agent removed" + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } } } } - }, + } + } + }, + "/cidr-range-lists/{cidr_range_list_id}": { + "x-vis": [ + "public-beta" + ], + "get": { + "operationId": "getCidrRangeList", + "summary": "Get CIDR Range List details", + "description": "Get details about a CIDR Range List\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "tags": [ + "ip-allowlists" + ], + "parameters": [ + { + "in": "path", + "name": "cidr_range_list_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "CIDR Range List ID" + }, + { + "in": "query", + "name": "fields[cidr-range-lists]", + "description": "Return only the specified fields for cidr-range-lists resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], "responses": { "200": { - "description": "Organization updated", + "description": "CIDR Range List details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/organizations-envelope" + "$ref": "#/components/schemas/cidr-range-list-envelope" } } } @@ -2583,21 +2728,21 @@ } }, "patch": { + "operationId": "updateCidrRangeList", + "summary": "Update CIDR Range List", + "description": "Update a CIDR Range List\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "organizations" + "ip-allowlists" ], - "operationId": "updateOrganization", - "summary": "Update Organization", - "description": "Update an organization.", "parameters": [ { "in": "path", - "name": "organization_name", + "name": "cidr_range_list_id", "schema": { "type": "string" }, "required": true, - "description": "Organization Name" + "description": "CIDR Range List ID" } ], "requestBody": { @@ -2605,18 +2750,18 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/organizations-envelope" + "$ref": "#/components/schemas/cidr-range-list-envelope" } } } }, "responses": { "200": { - "description": "Organization updated", + "description": "CIDR Range List updated", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/organizations-envelope" + "$ref": "#/components/schemas/cidr-range-list-envelope" } } } @@ -2634,26 +2779,26 @@ } }, "delete": { - "operationId": "deleteOrganization", - "summary": "Delete Organization", - "description": "Delete an organization.", + "operationId": "deleteCidrRangeList", + "summary": "Delete CIDR Range List", + "description": "Delete a CIDR Range List.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "organizations" + "ip-allowlists" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "cidr_range_list_id", "schema": { "type": "string" }, "required": true, - "description": "Organization Name" + "description": "CIDR Range List ID" } ], "responses": { "204": { - "description": "Organization deleted" + "description": "CIDR Range List deleted" }, "default": { "description": "Error details", @@ -2668,32 +2813,45 @@ } } }, - "/organizations/{organization_name}/cidr-range-lists": { + "/cidr-range-lists/{cidr_range_list_id}/relationships/cidr-ranges": { "x-vis": [ "public-beta" ], "get": { - "operationId": "listCidrRangeLists", - "summary": "List CIDR Range Lists", - "description": "List all CIDR Range Lists in an organization\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "operationId": "listCidrRanges", + "summary": "List CIDR Ranges", + "description": "List all CIDR Ranges in a CIDR Range List\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ "ip-allowlists" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "cidr_range_list_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization" + "description": "CIDR Range List ID" }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[cidr-ranges]", + "description": "Return only the specified fields for cidr-ranges resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { @@ -2707,7 +2865,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/cidr-range-lists" + "$ref": "#/components/schemas/cidr-ranges" } }, "links": { @@ -2739,21 +2897,21 @@ } }, "post": { - "operationId": "createCidrRangeList", - "summary": "Create CIDR Range List", - "description": "Create a new CIDR Range List\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "operationId": "createCidrRange", + "summary": "Create CIDR Range", + "description": "Create a new CIDR Range\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ "ip-allowlists" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "cidr_range_list_id", "schema": { "type": "string" }, "required": true, - "description": "Name of the organization" + "description": "ID of a CIDR Range List for the newly created CIDR Range" } ], "requestBody": { @@ -2761,18 +2919,18 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/cidr-range-list-with-ranges-envelope" + "$ref": "#/components/schemas/cidr-ranges-envelope" } } } }, "responses": { "201": { - "description": "CIDR Range List created", + "description": "CIDR Range created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/cidr-range-list-envelope" + "$ref": "#/components/schemas/cidr-ranges-envelope" } } } @@ -2790,163 +2948,41 @@ } } }, - "/organizations/{organization_name}/organization-memberships": { - "get": { - "operationId": "listOrganizationMemberships", - "summary": "List Organization Memberships", - "description": "List all memberships in an organization. This includes active/inactive members and invited users who have not yet accepted their invitation.", + "/cidr-range-lists/{cidr_range_list_id}/relationships/agent-pools": { + "x-vis": [ + "public-beta" + ], + "post": { + "operationId": "assignAgentPoolsToCidrRangeList", + "summary": "Assign Agent Pools to a CIDR Range List", + "description": "Assign one or more Agent Pools to a CIDR Range List\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "organization-memberships" + "ip-allowlists" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "cidr_range_list_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization to list memberships for" - }, - { - "in": "query", - "name": "q", - "schema": { - "type": "string" - }, - "required": false, - "description": "A search query string. Memberships are searchable by user name or email (case-insensitive)." - }, - { - "in": "query", - "name": "filter[status]", - "schema": { - "type": "string", - "enum": [ - "active", - "invited", - "inactive" - ] - }, - "required": false, - "description": "Filter memberships by status. Can be \"active\", \"invited\", or \"inactive\"." - }, - { - "in": "query", - "name": "filter[email]", - "schema": { - "type": "string", - "format": "email" - }, - "required": false, - "description": "Filter memberships by exact email address match." - }, - { - "in": "query", - "name": "include", - "style": "form", - "explode": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "user", - "teams", - "scim-identity" - ] - } - }, - "required": false, - "description": "Optionally side-load relationships. Can include \"user\", \"teams\", or \"scim-identity\".\nNote: \"scim-identity\" is only available on HCP Terraform.\n" - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "description": "ID of a CIDR Range List to assign Agent Pools to" } ], - "responses": { - "200": { - "description": "Organization memberships list", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/organization-memberships" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "included": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/users" - }, - { - "$ref": "#/components/schemas/teams" - }, - { - "$ref": "#/components/schemas/organizations" - }, - { - "$ref": "#/components/schemas/scim-identities" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "users": "#/components/schemas/users", - "teams": "#/components/schemas/teams", - "organizations": "#/components/schemas/organizations", - "scim-identities": "#/components/schemas/scim-identities" - } - } - } - } - } - } - } - } - }, - "400": { - "description": "Invalid filter or include parameter", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "404": { - "description": "Organization not found, or user unauthorized to perform action", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/agent-pool-ids" } } + } + }, + "responses": { + "204": { + "description": "Agent Pools assigned. No content is returned." }, "default": { "description": "Error details", @@ -2960,22 +2996,22 @@ } } }, - "post": { - "operationId": "createOrganizationMembership", - "summary": "Invite a User to an Organization", - "description": "Invite a user to join an organization. Users can be invited by email address.", + "delete": { + "operationId": "unassignAgentPoolsFromCidrRangeList", + "summary": "Unassign Agent Pools from a CIDR Range List", + "description": "Unassign one or more Agent Pools from a CIDR Range List\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "organization-memberships" + "ip-allowlists" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "cidr_range_list_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization the user will be invited to join" + "description": "ID of the CIDR Range List you want to unassign Agent Pools from" } ], "requestBody": { @@ -2983,78 +3019,14 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/organization-memberships-envelope" - }, - "examples": { - "inviteUser": { - "summary": "Invite a user to an organization with team memberships", - "value": { - "data": { - "type": "organization-memberships", - "attributes": { - "email": "user@example.com" - }, - "relationships": { - "teams": { - "data": [ - { - "type": "teams", - "id": "team-GeLZkdnK6xAVjA5H" - }, - { - "type": "teams", - "id": "team-XxEoUFzP9pW3r5d1" - } - ] - } - } - } - } - } + "$ref": "#/components/schemas/agent-pool-ids" } } } }, "responses": { - "201": { - "description": "Successfully invited the user", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/organization-memberships-envelope" - } - } - } - }, - "400": { - "description": "Unable to invite user due to organization limits", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "404": { - "description": "Organization not found, or user unauthorized to perform action", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "422": { - "description": "Unable to invite user due to validation errors (e.g., invalid email, missing teams)", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } + "204": { + "description": "Agent Pools unassigned. No content is returned." }, "default": { "description": "Error details", @@ -3069,94 +3041,48 @@ } } }, - "/organization-memberships": { + "/cidr-ranges/{cidr_range_id}": { + "x-vis": [ + "public-beta" + ], "get": { - "operationId": "listUserOrganizationMemberships", - "summary": "List User's Own Organization Memberships", - "description": "List all organization memberships for the currently authenticated user.", + "operationId": "getCidrRange", + "summary": "Get CIDR Range details", + "description": "Get details about a CIDR Range\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "organization-memberships" + "ip-allowlists" ], "parameters": [ + { + "in": "path", + "name": "cidr_range_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "CIDR Range ID" + }, { "in": "query", - "name": "include", + "name": "fields[cidr-ranges]", + "description": "Return only the specified fields for cidr-ranges resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", "style": "form", "explode": false, "schema": { "type": "array", "items": { - "type": "string", - "enum": [ - "user", - "teams", - "organization" - ] + "type": "string" } - }, - "required": false, - "description": "Optionally side-load relationships. Can include \"user\", \"teams\", or \"organization\"." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + } } ], "responses": { "200": { - "description": "User's organization memberships list", + "description": "CIDR Range details", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/organization-memberships" - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "included": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/users" - }, - { - "$ref": "#/components/schemas/teams" - }, - { - "$ref": "#/components/schemas/organizations" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "users": "#/components/schemas/users", - "teams": "#/components/schemas/teams", - "organizations": "#/components/schemas/organizations" - } - } - } - } - } + "$ref": "#/components/schemas/cidr-ranges-envelope" } } } @@ -3172,91 +3098,42 @@ } } } - } - }, - "/organization-memberships/{organization_membership_id}": { - "get": { - "operationId": "getOrganizationMembership", - "summary": "Show Organization Membership", - "description": "Get details about a specific organization membership.", + }, + "patch": { + "operationId": "updateCidrRange", + "summary": "Update CIDR Range", + "description": "Update a CIDR Range\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "organization-memberships" + "ip-allowlists" ], "parameters": [ { "in": "path", - "name": "organization_membership_id", + "name": "cidr_range_id", "schema": { "type": "string" }, "required": true, - "description": "The organization membership ID" - }, - { - "in": "query", - "name": "include", - "style": "form", - "explode": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "user", - "teams" - ] - } - }, - "required": false, - "description": "Optionally side-load relationships. Can include \"user\" or \"teams\"." + "description": "CIDR Range ID" } ], - "responses": { - "200": { - "description": "Organization membership details", - "content": { - "application/vnd.api+json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/organization-memberships-envelope" - }, - { - "type": "object", - "properties": { - "included": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/users" - }, - { - "$ref": "#/components/schemas/teams" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "users": "#/components/schemas/users", - "teams": "#/components/schemas/teams" - } - } - } - } - } - } - ] - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/cidr-ranges-envelope" } } - }, - "404": { - "description": "Organization membership not found, or user unauthorized to perform action", + } + }, + "responses": { + "200": { + "description": "CIDR Range updated", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/cidr-ranges-envelope" } } } @@ -3274,46 +3151,26 @@ } }, "delete": { - "operationId": "deleteOrganizationMembership", - "summary": "Remove User from Organization", - "description": "Remove a user from an organization. You cannot remove yourself from organizations which you own.", + "operationId": "deleteCidrRange", + "summary": "Delete CIDR Range", + "description": "Delete a CIDR Range.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "organization-memberships" + "ip-allowlists" ], "parameters": [ { "in": "path", - "name": "organization_membership_id", + "name": "cidr_range_id", "schema": { "type": "string" }, "required": true, - "description": "The organization membership ID" + "description": "CIDR Range ID" } ], "responses": { "204": { - "description": "Successfully removed the user from the organization" - }, - "403": { - "description": "Unable to remove the user. You cannot remove yourself from organizations which you own.", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "404": { - "description": "Organization membership not found, or user unauthorized to perform action", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } + "description": "CIDR Range deleted" }, "default": { "description": "Error details", @@ -3328,16 +3185,16 @@ } } }, - "/organizations/{organization_name}/recoverable-items": { + "/organizations/{organization_name}/metrics-tokens": { "x-vis": [ - "public-beta" + "hcpt" ], "get": { - "operationId": "listRecoverableItems", - "summary": "List Recoverable Items", - "description": "List all recoverable items (soft-deleted resources) in an organization.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "operationId": "listMetricsTokens", + "summary": "List tokens", + "description": "Lists all Metrics service tokens for the organization.\n\nThis operation is only available in HCP Terraform.", "tags": [ - "recoverable-items" + "metrics-tokens" ], "parameters": [ { @@ -3347,126 +3204,43 @@ "type": "string" }, "required": true, - "description": "The name of the organization." + "description": "The name of the organization to list tokens for." }, { "in": "query", - "name": "include", + "name": "fields[metrics-tokens]", + "description": "Return only the specified fields for metrics-tokens resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", "style": "form", "explode": false, "schema": { "type": "array", "items": { - "type": "string", - "enum": [ - "recoverable", - "deleted_by", - "project" - ] + "type": "string" } - }, - "required": false, - "description": "Optionally side-load relationships of the specified name. Multiple values can be comma-separated." - }, - { - "in": "query", - "name": "filter[search]", - "schema": { - "type": "string" - }, - "required": false, - "description": "Search term to filter recoverable items by name or project name." - }, - { - "in": "query", - "name": "filter[having_managed_resources]", - "schema": { - "type": "boolean" - }, - "required": false, - "description": "If true, filter recoverable items that have managed resources. False has no effect." - }, - { - "in": "query", - "name": "filter[expires_after]", - "schema": { - "type": "string", - "format": "date-time" - }, - "required": false, - "description": "Filter recoverable items that expire after the specified date and time." - }, - { - "in": "query", - "name": "filter[recoverable_type]", - "schema": { - "type": "string", - "enum": [ - "workspaces", - "stacks" - ] - }, - "required": false, - "description": "Filter recoverable items by recoverable type." - }, - { - "in": "query", - "name": "sort", - "schema": { - "type": "string", - "enum": [ - "expires_at", - "-expires_at", - "recoverable_name", - "-recoverable_name", - "unmanaged_resources", - "-unmanaged_resources" - ] - }, - "required": false, - "description": "Sort recoverable items by specified field. Prefix with '-' for descending order." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" - } - ], - "responses": { - "200": { - "description": "List of recoverable items", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/recoverable-items" - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "meta": { - "$ref": "#/components/schemas/pagination" - } - } - } - } - } - }, - "404": { - "description": "Organization not found or not entitled to this feature", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/metrics-token" + } + } + } + } + } + } }, "default": { "description": "Error details", @@ -3479,88 +3253,85 @@ } } } - } - }, - "/recoverable-items/{id}/actions/recover": { - "x-vis": [ - "public-beta" - ], - "put": { - "operationId": "recoverRecoverableItem", - "summary": "Recover a Recoverable Item", - "description": "Recover a soft-deleted resource by restoring it from a recoverable item. The resource must not be expired, permanently deleted, or already recovered.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + }, + "post": { + "operationId": "createMetricsToken", + "summary": "Generate a new token", + "description": "Generates a new Metrics Service token.\n\nThis operation is only available in HCP Terraform.", "tags": [ - "recoverable-items" + "metrics-tokens" ], "parameters": [ { "in": "path", - "name": "id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "ID of the recoverable item." + "description": "The name of the organization to generate a token for." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "metrics-tokens" + ] + }, + "attributes": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string", + "description": "The name of the token." + }, + "expires-at": { + "type": "string", + "format": "date-time", + "description": "The time when the token expires." + } + } + } + } + } + } + } + } + } + }, "responses": { - "204": { - "description": "Successfully recovered the item. No content returned." - }, - "422": { - "description": "Recoverable item cannot be recovered due to its current state", + "201": { + "description": "Success", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" - }, - "examples": { - "expired": { - "summary": "Item has expired", - "value": { - "errors": [ - { - "status": "422", - "title": "unprocessable content", - "detail": "Recoverable item has expired and is no longer eligible for recovery" - } - ] - } - }, - "permanently_deleted": { - "summary": "Item has been permanently deleted", - "value": { - "errors": [ - { - "status": "422", - "title": "unprocessable content", - "detail": "Recoverable item has been manually permanently deleted, and is no longer eligible for recovery" - } - ] - } - }, - "already_recovered": { - "summary": "Item has already been recovered", - "value": { - "errors": [ - { - "status": "422", - "title": "unprocessable content", - "detail": "Recoverable item has already been recovered" - } - ] - } - }, - "recovery_failed": { - "summary": "Recovery operation failed", - "value": { - "errors": [ - { - "status": "422", - "title": "unprocessable content", - "detail": "Recovery failed" - } - ] + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/metrics-token" } } } @@ -3580,18 +3351,27 @@ } } }, - "/recoverable-items/{id}/actions/permanently-delete": { + "/organizations/{organization_name}/metrics-tokens/{id}": { "x-vis": [ - "public-beta" + "hcpt" ], - "put": { - "operationId": "permanentlyDeleteRecoverableItem", - "summary": "Permanently Delete a Recoverable Item", - "description": "Permanently delete a recoverable item, making the soft-deleted resource unrecoverable. The item must not be expired, already permanently deleted, or recovered.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "delete": { + "operationId": "deleteMetricsToken", + "summary": "Delete a token", + "description": "Deletes a Metrics Service token.\n\nThis operation is only available in HCP Terraform.", "tags": [ - "recoverable-items" + "metrics-tokens" ], "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "Which organization's token should be deleted." + }, { "in": "path", "name": "id", @@ -3599,60 +3379,12 @@ "type": "string" }, "required": true, - "description": "ID of the recoverable item." + "description": "The ID of the token to delete." } ], "responses": { "204": { - "description": "Successfully permanently deleted the item. No content returned." - }, - "422": { - "description": "Recoverable item cannot be permanently deleted due to its current state", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - }, - "examples": { - "already_expired": { - "summary": "Item has already expired", - "value": { - "errors": [ - { - "status": "422", - "title": "unprocessable content", - "detail": "Recoverable item has already expired and been permanently deleted" - } - ] - } - }, - "already_permanently_deleted": { - "summary": "Item has already been permanently deleted", - "value": { - "errors": [ - { - "status": "422", - "title": "unprocessable content", - "detail": "Recoverable item has already been manually permanently deleted" - } - ] - } - }, - "already_recovered": { - "summary": "Item has been recovered", - "value": { - "errors": [ - { - "status": "422", - "title": "unprocessable content", - "detail": "Recoverable item has been recovered, and is no longer eligible for permanent deletion" - } - ] - } - } - } - } - } + "description": "Success" }, "default": { "description": "Error details", @@ -3667,16 +3399,13 @@ } } }, - "/organizations/{organization_name}/relationships/module-producers": { - "x-vis": [ - "tfe" - ], + "/organizations/{organization_name}/stacks": { "get": { - "operationId": "listModuleProducers", - "summary": "List Module Producers", - "description": "List organizations that are configured to share modules with an organization.\n\nThis operation is only available in Terraform Enterprise.", + "operationId": "listStacks", + "summary": "List Stacks", + "description": "List stacks.", "tags": [ - "organizations" + "stacks" ], "parameters": [ { @@ -3686,18 +3415,59 @@ "type": "string" }, "required": true, - "description": "The name of the organization's module producers to view." + "description": "Name of the organization" + }, + { + "in": "query", + "name": "sort", + "schema": { + "type": "string" + }, + "required": false, + "description": "Allows sorting the returned stacks. Valid values are \"name\" and \"created-at\". Prepending a hyphen to the sort parameter will reverse the order (e.g. \"-name\")." + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "organization", + "project", + "latest-stack-configuration" + ] + } + }, + "required": false, + "description": "Optionally side-load relationships of the specified name" }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[stacks]", + "description": "Return only the specified fields for stacks resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Module producers list", + "description": "Stacks", "content": { "application/vnd.api+json": { "schema": { @@ -3709,7 +3479,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/organizations" + "$ref": "#/components/schemas/stacks" } }, "meta": { @@ -3741,36 +3511,31 @@ } } }, - "/organizations/{organization_name}/relationships/data-retention-policy": { - "x-vis": [ - "tfe" - ], - "get": { - "operationId": "getDataRetentionPolicy", - "summary": "Get Data Retention Policy", - "description": "Show the data retention policy set explicitly on the organization.\n\nThis operation is only available in Terraform Enterprise.", + "/stacks": { + "post": { + "operationId": "createStack", + "summary": "Create Stack", + "description": "Create an stack for an organization.", "tags": [ - "organizations", - "data-retention-policies" + "stacks" ], - "parameters": [ - { - "in": "path", - "name": "organization_name", - "schema": { - "type": "string" - }, - "required": true, - "description": "The name of the organization to show the data retention policy for." + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/stacks-envelope" + } + } } - ], + }, "responses": { "200": { - "description": "Data retention policy details", + "description": "Stack created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/data-retention-policy-envelope" + "$ref": "#/components/schemas/stacks-envelope" } } } @@ -3786,39 +3551,50 @@ } } } - }, - "post": { + } + }, + "/stacks/{stack_id}": { + "get": { + "operationId": "getStack", + "summary": "Get Stack details", + "description": "Get details about a stack", "tags": [ - "organizations", - "data-retention-policies" + "stacks" ], - "operationId": "createOrUpdateDataRetentionPolicy", - "summary": "Create or Update Data Retention Policy", - "description": "Create a data retention policy for an organization or update the existing policy.\n\nThis operation is only available in Terraform Enterprise.", "parameters": [ { "in": "path", - "name": "organization_name", + "name": "stack_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization to update the data retention policy for." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/data-retention-policy-envelope" + "description": "Stack ID" + }, + { + "in": "query", + "name": "fields[stacks]", + "description": "Return only the specified fields for stacks resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "204": { - "description": "Data retention policy created or updated" + "200": { + "description": "Stack details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/stacks-envelope" + } + } + } }, "default": { "description": "Error details", @@ -3833,22 +3609,21 @@ } }, "patch": { + "operationId": "updateStack", + "summary": "Update Stack", + "description": "Update a stack", "tags": [ - "organizations", - "data-retention-policies" + "stacks" ], - "operationId": "createOrUpdateDataRetentionPolicy", - "summary": "Create or Update Data Retention Policy", - "description": "Create a data retention policy for an organization or update the existing policy.\n\nThis operation is only available in Terraform Enterprise.", "parameters": [ { "in": "path", - "name": "organization_name", + "name": "stack_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization to update the data retention policy for." + "description": "Stack ID" } ], "requestBody": { @@ -3856,14 +3631,21 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/data-retention-policy-envelope" + "$ref": "#/components/schemas/stacks-envelope" } } } }, "responses": { - "204": { - "description": "Data retention policy created or updated" + "200": { + "description": "Stack updated", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/stacks-envelope" + } + } + } }, "default": { "description": "Error details", @@ -3878,27 +3660,35 @@ } }, "delete": { - "operationId": "deleteDataRetentionPolicy", - "summary": "Delete Data Retention Policy", - "description": "Remove the data retention policy explicitly set on an organization.\n\nThis operation is only available in Terraform Enterprise.", + "operationId": "deleteStack", + "summary": "Delete Stack", + "description": "Delete a stack", "tags": [ - "organizations", - "data-retention-policies" + "stacks" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "stack_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization to remove the data retention policy for." + "description": "Stack ID" + }, + { + "in": "query", + "name": "force", + "schema": { + "type": "boolean" + }, + "required": false, + "description": "Force delete" } ], "responses": { "204": { - "description": "Data retention policy deleted" + "description": "Stack deleted" }, "default": { "description": "Error details", @@ -3913,86 +3703,71 @@ } } }, - "/organizations/{organization_name}/projects": { + "/stacks/{stack_id}/stack-configuration-summaries": { "get": { - "operationId": "listProjects", - "summary": "List Projects", - "description": "List all projects in an organization.", + "operationId": "listStackConfigurationSummaries", + "summary": "List stack configuration summaries.", + "description": "List stack configuration summaries.", "tags": [ - "projects" + "stacks" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "stack_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization." - }, - { - "in": "query", - "name": "filter[names]", - "schema": { - "type": "string" - }, - "required": false, - "description": "Comma-separated list of project names to filter by." + "description": "ID of the stack." }, { - "in": "query", - "name": "filter[permissions][create-workspace]", - "schema": { - "type": "boolean" - }, - "required": false, - "description": "If present, returns a list of projects that the authenticated user can create workspaces in." + "$ref": "#/components/parameters/page_number" }, { - "in": "query", - "name": "filter[permissions][update]", - "schema": { - "type": "boolean" - }, - "required": false, - "description": "If present, returns a list of projects that the authenticated user can update." + "$ref": "#/components/parameters/page_size" }, { "in": "query", - "name": "sort", + "name": "fields[stack-configuration-summaries]", + "description": "Return only the specified fields for stack-configuration-summaries resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": false, - "description": "Optional. Allows sorting the organization's projects by \"name\". Prepending a hyphen to the sort parameter reverses the order. For example, \"-name\" sorts by name in reverse alphabetical order. If omitted, the default sort order is arbitrary but stable.\n" - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of projects", + "description": "Summary information for all stack configurations.", "content": { "application/vnd.api+json": { "schema": { "type": "object", + "required": [ + "data" + ], "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/projects" + "$ref": "#/components/schemas/stack-configuration-summaries" } }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, "meta": { - "$ref": "#/components/schemas/pagination" + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" } } } @@ -4010,45 +3785,30 @@ } } } - }, + } + }, + "/stacks/{stack_id}/fetch-latest-from-vcs": { "post": { - "operationId": "createProject", - "summary": "Create a Project", - "description": "Create a new project in an organization.", + "operationId": "fetchLatestConfigurationFromVCS", + "summary": "Fetch Latest Configuration from VCS", + "description": "Fetch the latest configuration from version control system.", "tags": [ - "projects" + "stacks" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "stack_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization." + "description": "Stack ID" } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/projects-envelope" - } - } - } - }, "responses": { - "201": { - "description": "Project created", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/projects-envelope" - } - } - } + "204": { + "description": "Fetch successfuly started the process of retrieving the latest configuration from VCS." }, "default": { "description": "Error details", @@ -4063,59 +3823,39 @@ } } }, - "/organizations/{organization_name}/token-ttl-policies": { + "/stacks/{stack_id}/latest-output-summary": { "get": { - "operationId": "listTokenTtlPolicies", - "summary": "List Token TTL Policies", - "description": "List all token TTL policies for an organization.", + "operationId": "getStackLatestOutputSummary", + "summary": "Get latest stack output summary", + "description": "Redirects to a short-lived URL where the latest aggregated output summary for the stack can be downloaded. Returns a 404 when the stack has no aggregated outputs yet.", "tags": [ - "token-ttl-policies" + "stacks" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "stack_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization to list token TTL policies for" + "description": "Stack ID" } ], "responses": { - "200": { - "description": "Token TTL policies list", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/token-ttl-policy" - } - } - } - } - } - } - }, - "403": { - "description": "User is not part of the owners team of the organization", - "content": { - "application/vnd.api+json": { + "307": { + "description": "Temporary redirect to the URL where the stack output summary can be downloaded.", + "headers": { + "Location": { + "description": "URL where the stack output summary can be downloaded.", "schema": { - "$ref": "#/components/schemas/errors" + "type": "string" } } } }, "404": { - "description": "Organization does not exist or user does not belong to the organization", + "description": "The stack has no aggregated outputs.", "content": { "application/vnd.api+json": { "schema": { @@ -4135,23 +3875,39 @@ } } } - }, - "patch": { - "operationId": "upsertTokenTtlPolicies", - "summary": "Create or Update Token TTL Policies", - "description": "Create or Update token TTL policies for an organization.", + } + }, + "/stacks/{stack_id}/stack-configurations": { + "post": { + "operationId": "createStackConfiguration", + "summary": "Create stack configuration", + "description": "Create an stack configuration for a stack.", "tags": [ - "token-ttl-policies" + "stacks" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "stack_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization" + "description": "ID of the stack" + }, + { + "in": "query", + "name": "source", + "schema": { + "type": "string", + "enum": [ + "manual", + "fetch", + "reuse" + ], + "default": "manual" + }, + "description": "Whether to reuse the latest configuration content, fetch new content from VCS, or await manual upload to an upload URL." } ], "requestBody": { @@ -4159,81 +3915,18 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/token-ttl-policies-envelope" - }, - "examples": { - "upsert": { - "summary": "Upsert token TTL policies", - "value": { - "data": { - "type": "organization-token-ttl-policies", - "attributes": { - "token-ttl-policies": [ - { - "token-type": "organization", - "max-ttl-ms": 5184000000 - }, - { - "token-type": "user", - "max-ttl-ms": 189216000000 - } - ] - } - } - } - } + "$ref": "#/components/schemas/stack-configurations-envelope" } } } }, "responses": { - "200": { - "description": "Successfully created or updated token TTL policies", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/token-ttl-policy" - } - } - } - } - } - } - }, - "403": { - "description": "User is not part of the owners team of the organization", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "404": { - "description": "Organization does not exist or user does not belong to the organization", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "422": { - "description": "Unable to create token TTL policy due to validation errors", + "201": { + "description": "Stack configuration created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/stack-configurations-envelope" } } } @@ -4249,34 +3942,91 @@ } } } - } - }, - "/projects/{project_id}": { + }, "get": { - "operationId": "getProject", - "summary": "Get Project", - "description": "Get details of a specific project.", + "operationId": "listStackConfigurations", + "summary": "List stack configurations", + "description": "List configurations for a stack.", "tags": [ - "projects" + "stacks" ], "parameters": [ { "in": "path", - "name": "project_id", + "name": "stack_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the project." + "description": "ID of the stack" + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "ingress-attributes", + "stack-configuration-summary" + ] + } + }, + "required": false, + "description": "Optionally side-load relationships. Accepts a comma-separated list of the enumerated values." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[stack-configurations]", + "description": "Return only the specified fields for stack-configurations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Project details", + "description": "Stack configurations list", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/projects-envelope" + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/stack-configurations" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } } } } @@ -4292,42 +4042,67 @@ } } } - }, - "patch": { - "operationId": "updateProject", - "summary": "Update Project", - "description": "Update an existing project.", + } + }, + "/stack-configurations/{stack_configuration_id}": { + "get": { + "operationId": "getStackConfigurations", + "summary": "Get Stack Configuration details", + "description": "Get details about a stack configuration", "tags": [ - "projects" + "stacks" ], "parameters": [ { "in": "path", - "name": "project_id", + "name": "stack_configuration_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the project." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/projects-envelope" + "description": "Stack configuration ID" + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "ingress-attributes", + "stack-configuration-summary", + "stack-diagnostics", + "stack-aggregate-outputs" + ] + } + }, + "required": false, + "description": "Optionally side-load relationships. Accepts a comma-separated list of the enumerated values." + }, + { + "in": "query", + "name": "fields[stack-configurations]", + "description": "Return only the specified fields for stack-configurations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { "200": { - "description": "Project updated", + "description": "Stack configuration details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/projects-envelope" + "$ref": "#/components/schemas/stack-configurations-envelope" } } } @@ -4343,28 +4118,100 @@ } } } - }, - "delete": { - "operationId": "deleteProject", - "summary": "Delete Project", - "description": "Delete a project.", + } + }, + "/stacks/{stack_id}/stack-deployments": { + "get": { + "operationId": "listStackDeployments", + "summary": "List stack deployments", + "description": "List deployments for a stack.", "tags": [ - "projects" + "stacks" ], "parameters": [ { "in": "path", - "name": "project_id", + "name": "stack_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the project." + "description": "ID of the stack" + }, + { + "in": "query", + "name": "sort", + "required": false, + "description": "Allows sorting by deployment name, 'deployment' or '-deployment' for descending.", + "schema": { + "type": "string", + "enum": [ + "deployment,", + "-deployment" + ] + } + }, + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + }, + "required": false, + "description": "A search query string. Stack deployments are searchable by deployment name." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[stack-deployments]", + "description": "Return only the specified fields for stack-deployments resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { - "204": { - "description": "Project deleted" + "200": { + "description": "Stack deployment list", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/stack-deployments" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } + } + } + } }, "default": { "description": "Error details", @@ -4379,38 +4226,85 @@ } } }, - "/projects/{project_id}/relationships/workspaces": { - "post": { - "operationId": "moveWorkspacesIntoProject", - "summary": "Move Workspaces into a Project", - "description": "Move one or more workspaces into a project. You must have permission to move workspaces on the destination project as well as any source project(s). If you are not authorized to move any of the workspaces in the request, or if any workspaces in the request are not found, then no workspaces will be moved.\n", + "/stacks/{stack_id}/stack-deployments/{deployment}/stack-deployment-runs": { + "get": { + "operationId": "listDeploymentRuns", + "summary": "List stack deployment runs.", + "description": "List stack deployment runs.", "tags": [ - "projects" + "stacks" ], "parameters": [ { "in": "path", - "name": "project_id", + "name": "stack_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the destination project." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-identifier-array-document" + "description": "ID of the stack." + }, + { + "in": "path", + "name": "deployment", + "schema": { + "type": "string" + }, + "required": true, + "description": "To return the deployment runs for a specific deployment in a stack." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[stack-deployment-runs]", + "description": "Return only the specified fields for stack-deployment-runs resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "204": { - "description": "Successfully moved workspace(s)." + "200": { + "description": "Information for all stack deployment runs for a deployment.", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/stack-deployment-runs" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } }, "default": { "description": "Error details", @@ -4425,42 +4319,73 @@ } } }, - "/projects/{project_id}/relationships/tag-bindings": { + "/stacks/{stack_id}/stack-states": { "get": { - "operationId": "listProjectTagBindings", - "summary": "List Project Tag Bindings", - "description": "List all tags associated with a project.", + "operationId": "listStackStates", + "summary": "List stack states", + "description": "List states for a stack.", "tags": [ - "projects" + "stacks" ], "parameters": [ { "in": "path", - "name": "project_id", + "name": "stack_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the project." + "description": "ID of the stack" + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[stack-states]", + "description": "Return only the specified fields for stack-states resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of tags", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/tag-bindings-collection" - } - } - } - }, - "404": { - "description": "Project not found or user unauthorized to view project", + "description": "Stack state list", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/stack-states" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } } } } @@ -4476,99 +4401,103 @@ } } } - }, - "post": { - "operationId": "addProjectTagBindings", - "summary": "Add Tag Bindings to a Project", - "description": "Add one or more tag bindings to a project.", + } + }, + "/stacks/{stack_id}/stack-output-consumers/upstream": { + "get": { + "operationId": "listStackOutputConsumers", + "summary": "List stack output consumers", + "description": "List output consumers for a stack(upstream or downstream).", "tags": [ - "projects" + "stacks" ], "parameters": [ { "in": "path", - "name": "project_id", + "name": "stack_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the project." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/tag-bindings-collection" - } - } - } - }, - "responses": { - "204": { - "description": "Tags added" + "description": "ID of the stack" }, - "404": { - "description": "Project not found or user unauthorized to manage tags", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } + { + "in": "query", + "name": "sort", + "required": false, + "description": "Allows sorting by deployment, stack_name, upstream_name, upstream_publish_output_address, for example 'deployment' or '-deployment' for descending.", + "schema": { + "type": "string", + "enum": [ + "deployment", + "-deployment", + "stack_name", + "upstream_name", + "upstream_publish_output_address", + "-stack_name", + "-upstream_name", + "-upstream_publish_output_address" + ] } }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - }, - "patch": { - "operationId": "replaceProjectTagBindings", - "summary": "Replace Tag Bindings in a Project", - "description": "Replace all tag bindings in a project.", - "tags": [ - "projects" - ], - "parameters": [ { - "in": "path", - "name": "project_id", + "in": "query", + "name": "search", "schema": { "type": "string" }, - "required": true, - "description": "The ID of the project." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/tag-bindings-collection" + "required": false, + "description": "A search query string. Stack output consumers are searchable by deployment, stack_name, upstream_name, upstream_publish_output_address." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[stack-output-consumers]", + "description": "Return only the specified fields for stack-output-consumers resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "204": { - "description": "Tag bindings replaced" - }, - "404": { - "description": "Project not found or user unauthorized to manage tag bindings", + "200": { + "description": "Stack output consumer list", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/stack-output-consumers" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } } } } @@ -4586,158 +4515,75 @@ } } }, - "/organizations/{organization_name}/workspaces": { + "/stacks/{stack_id}/stack-output-consumers/downstream": { "get": { - "operationId": "listWorkspaces", - "summary": "List Workspaces", - "description": "List all workspaces in an organization.", + "operationId": "listStackOutputConsumers", + "summary": "List stack output consumers", + "description": "List output consumers for a stack(upstream or downstream).", "tags": [ - "workspaces" + "stacks" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "stack_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization." - }, - { - "in": "query", - "name": "search[name]", - "schema": { - "type": "string" - }, - "required": false, - "description": "Partial name to filter workspaces by name." - }, - { - "in": "query", - "name": "search[wildcard-name]", - "schema": { - "type": "string" - }, - "required": false, - "description": "Wildcard name filter for workspaces." - }, - { - "in": "query", - "name": "filter[current-run][status]", - "schema": { - "type": "string" - }, - "required": false, - "description": "Comma-separated list of run statuses to filter workspaces by." + "description": "ID of the stack" }, { "in": "query", - "name": "filter[project][id]", - "schema": { - "type": "string" - }, + "name": "sort", "required": false, - "description": "Filter workspaces by project external ID." - }, - { - "in": "query", - "name": "filter[tagged]", + "description": "Allows sorting by deployment, stack_name, upstream_name, upstream_publish_output_address, for example 'deployment' or '-deployment' for descending.", "schema": { - "type": "string" - }, - "required": false, - "description": "Filter workspaces by tag names." + "type": "string", + "enum": [ + "deployment", + "-deployment", + "stack_name", + "upstream_name", + "upstream_publish_output_address", + "-stack_name", + "-upstream_name", + "-upstream_publish_output_address" + ] + } }, { "in": "query", - "name": "filter[tagged][value]", + "name": "search", "schema": { "type": "string" }, "required": false, - "description": "Filter workspaces by tag key=value pairs." - }, - { - "in": "query", - "name": "filter[tag-union]", - "schema": { - "type": "boolean", - "default": false - }, - "required": false, - "description": "Use OR logic for filter[tagged] across effective tag bindings when any provided tag key/value pair may match. By default, filtering uses intersection semantics, so all provided tags must match." + "description": "A search query string. Stack output consumers are searchable by deployment, stack_name, upstream_name, upstream_publish_output_address." }, { - "in": "query", - "name": "filter[tag-value-default-null]", - "schema": { - "type": "boolean", - "default": false - }, - "required": false, - "description": "Treat omitted filter[tagged][value] fields as NULL for effective tag bindings." + "$ref": "#/components/parameters/page_number" }, { - "in": "query", - "name": "sort", - "schema": { - "type": "string" - }, - "required": false, - "description": "Sort workspaces. Valid values include name, current-run.created-at. Prefix with a hyphen (e.g., -name) to sort in descending order.\n" + "$ref": "#/components/parameters/page_size" }, { "in": "query", - "name": "include", + "name": "fields[stack-output-consumers]", + "description": "Return only the specified fields for stack-output-consumers resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", "style": "form", "explode": false, "schema": { "type": "array", "items": { - "type": "string", - "enum": [ - "agent_pool", - "current_assessment_result", - "current_configuration_version", - "current_configuration_version.ingress_attributes", - "current_run", - "current_run.apply", - "current_run.plan", - "current_run.configuration_version", - "current_run.configuration_version.ingress_attributes", - "current_state_version", - "current_state_version.resources_processed", - "latest_run", - "latest_run.plan", - "latest_run.configuration_version", - "latest_run.configuration_version.ingress_attributes", - "locked_by", - "no_code_module_version", - "no_code_module_version.no_code_module", - "no_code_module_version.no_code_module.latest_version", - "organization", - "outputs", - "project", - "readme", - "vars", - "effective_tag_bindings" - ] + "type": "string" } - }, - "required": false, - "description": "Comma-separated list of relationship names to side-load.\n" - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + } } ], "responses": { "200": { - "description": "List of workspaces", + "description": "Stack output consumer list", "content": { "application/vnd.api+json": { "schema": { @@ -4749,47 +4595,25 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/workspaces" + "$ref": "#/components/schemas/stack-output-consumers" } }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, "meta": { "type": "object", "properties": { "pagination": { "$ref": "#/components/schemas/pagination" - }, - "status-counts": { - "type": "object", - "additionalProperties": { - "type": "integer" - } } } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "included": { - "type": "array", - "items": { - "type": "object" - } } } } } } }, - "404": { - "description": "Organization not found or user unauthorized to view workspaces", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, "default": { "description": "Error details", "content": { @@ -4801,48 +4625,53 @@ } } } - }, - "post": { - "operationId": "createWorkspace", - "summary": "Create a Workspace", - "description": "Create a new workspace in an organization.", + } + }, + "/stack-states/{stack_state_id}": { + "get": { + "operationId": "getStackState", + "summary": "Get Stack State Details", + "description": "Get details about a stack state", "tags": [ - "workspaces" + "stacks" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "stack_state_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-envelope" + "description": "Stack state ID" + }, + { + "in": "query", + "name": "fields[stack-states]", + "description": "Return only the specified fields for stack-states resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "201": { - "description": "Workspace created", + "200": { + "description": "Stack state details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspaces-envelope" + "$ref": "#/components/schemas/stack-states-envelope" } } } }, - "404": { - "description": "Organization not found or user unauthorized to create workspaces", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -4850,13 +4679,37 @@ } } } - }, - "422": { - "description": "Malformed request body or validation error", + } + } + } + }, + "/stack-states/{stack_state_id}/description": { + "get": { + "operationId": "getStackStateDescription", + "summary": "Get stack state description", + "description": "Download the stack state description as a .json file.", + "tags": [ + "stacks" + ], + "parameters": [ + { + "in": "path", + "name": "stack_state_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "Stack state ID" + } + ], + "responses": { + "200": { + "description": ".json file containing the stack state description.", "content": { - "application/vnd.api+json": { + "application/octet-stream": { "schema": { - "$ref": "#/components/schemas/errors" + "type": "string", + "format": "binary" } } } @@ -4874,36 +4727,53 @@ } } }, - "/organizations/{organization_name}/workspaces/{workspace_name}": { + "/stack-configurations/{stack_configuration_id}/stack-deployment-runs": { "get": { - "operationId": "getWorkspaceByName", - "summary": "Get a Workspace by Name", - "description": "Get details of a workspace by organization name and workspace name.", + "operationId": "getStackConfigurationDeploymentRunsCollection", + "summary": "Get collection of deployment runs for a stack configuration", + "description": "Index all deployment runs for a stack configuration.", "tags": [ - "workspaces" + "stacks" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "stack_configuration_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization." + "description": "Stack configuration ID" }, { - "in": "path", - "name": "workspace_name", + "in": "query", + "name": "q", + "required": false, + "description": "A search query string. Stack deployment runs are searchable by deployment name and deployment group name.", "schema": { "type": "string" - }, - "required": true, - "description": "The name of the workspace." + } }, { "in": "query", - "name": "include", + "name": "sort", + "required": false, + "description": "Allows sorting by deployment or deployment-group-name e.g., 'deployment' or '-deployment' for descending.", + "schema": { + "type": "string", + "enum": [ + "deployment,", + "-deployment,", + "deployment-group-name,", + "-deployment-group-name" + ] + } + }, + { + "in": "query", + "name": "filter[status]", + "required": false, + "description": "Filter by deployment run status. Accepts a comma-separated list of statuses. Some statuses match multiple underlying run states: pending matches pending, acquiring-lock, and pending-capacity; running matches pre-deploying and deploying; pending-operator matches pre-deploying-pending-operator and deploying-pending-operator.", "style": "form", "explode": false, "schema": { @@ -4911,70 +4781,65 @@ "items": { "type": "string", "enum": [ - "agent_pool", - "current_assessment_result", - "current_configuration_version", - "current_configuration_version.ingress_attributes", - "current_run", - "current_run.apply", - "current_run.plan", - "current_run.configuration_version", - "current_run.configuration_version.ingress_attributes", - "current_state_version", - "current_state_version.resources_processed", - "latest_run", - "latest_run.plan", - "latest_run.configuration_version", - "latest_run.configuration_version.ingress_attributes", - "locked_by", - "no_code_module_version", - "no_code_module_version.no_code_module", - "no_code_module_version.no_code_module.latest_version", - "organization", - "outputs", - "project", - "readme", - "vars", - "effective_tag_bindings" + "pending", + "running", + "pending-operator", + "succeeded", + "failed", + "abandoned" ] } - }, - "required": false, - "description": "Optionally side-load relationships.\n" + } + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[stack-deployment-runs]", + "description": "Return only the specified fields for stack-deployment-runs resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Workspace details", + "description": "Stack configurations list", "content": { "application/vnd.api+json": { "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/workspaces-envelope" + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/stack-deployment-runs" + } }, - { + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { "type": "object", "properties": { - "included": { - "type": "array", - "items": { - "type": "object" - } + "pagination": { + "$ref": "#/components/schemas/pagination" } } } - ] - } - } - } - }, - "404": { - "description": "Workspace not found or user unauthorized to view workspace", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" + } } } } @@ -4990,71 +4855,75 @@ } } } - }, - "patch": { - "operationId": "updateWorkspaceByName", - "summary": "Update a Workspace by Name", - "description": "Update settings of an existing workspace by organization name and workspace name.", + } + }, + "/stack-configurations/{stack_configuration_id}/stack-deployment-group-summaries": { + "get": { + "operationId": "listStackDeploymentGroupSummaries", + "summary": "List stack deployment group summaries.", + "description": "List stack deployment group summaries for a given stack configuration.", "tags": [ - "workspaces" + "stacks" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "stack_configuration_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization." + "description": "ID of the stack configuration." }, { - "in": "path", - "name": "workspace_name", + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[stack-deployment-group-summaries]", + "description": "Return only the specified fields for stack-deployment-group-summaries resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": true, - "description": "The name of the workspace." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-envelope" + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { "200": { - "description": "Workspace updated", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-envelope" - } - } - } - }, - "404": { - "description": "Workspace not found or user unauthorized to view workspace", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "422": { - "description": "Malformed request body", + "description": "Summary information for all deployment groups.", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/stack-deployment-group-summaries" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } } } } @@ -5070,44 +4939,75 @@ } } } - }, - "delete": { - "operationId": "deleteWorkspaceByName", - "summary": "Delete a Workspace by Name", - "description": "Delete a workspace by organization name and workspace name. This permanently removes the workspace and all its associated data.\n", + } + }, + "/stack-configurations/{stack_configuration_id}/stack-diagnostics": { + "get": { + "operationId": "listStackConfigurationDiagnostics", + "summary": "List stack configuration diagnostics", + "description": "List the diagnostics for a given stack configuration.", "tags": [ - "workspaces" + "stacks" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "stack_configuration_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization." + "description": "ID of the stack configuration" }, { - "in": "path", - "name": "workspace_name", + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[stack-diagnostics]", + "description": "Return only the specified fields for stack-diagnostics resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": true, - "description": "The name of the workspace." + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { - "204": { - "description": "Workspace deleted" - }, - "404": { - "description": "Workspace not found or user unauthorized to delete workspace", + "200": { + "description": "Diagnostics list", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/stack-diagnostics" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } } } } @@ -5125,54 +5025,53 @@ } } }, - "/organizations/{organization_name}/workspaces/{workspace_name}/actions/safe-delete": { - "post": { - "operationId": "safeDeleteWorkspaceByName", - "summary": "Safe Delete a Workspace by Name", - "description": "Delete a workspace by organization name and workspace name only if it has no resources under management. Returns a conflict error if the workspace has managed resources or is locked.\n", + "/stack-diagnostics/{stack_diagnostic_id}": { + "get": { + "operationId": "getStackDiagnostic", + "summary": "Get stack diagnostic details", + "description": "Get details about a stack diagnostic", "tags": [ - "workspaces" + "stacks" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "stack_diagnostic_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization." + "description": "Stack diagnostic ID" }, { - "in": "path", - "name": "workspace_name", + "in": "query", + "name": "fields[stack-diagnostics]", + "description": "Return only the specified fields for stack-diagnostics resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": true, - "description": "The name of the workspace." + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { - "204": { - "description": "Workspace deleted" - }, - "404": { - "description": "Workspace not found or user unauthorized to delete workspace", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "409": { - "description": "Workspace has managed resources or is locked and cannot be safely deleted", + "200": { + "description": "Stack diagnostic details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/stack-diagnostics" + } + } } } } @@ -5190,117 +5089,55 @@ } } }, - "/projects/{project_id}/notification-configurations": { + "/stack-configurations/{stack_configuration_id}/upload-url": { "get": { - "summary": "List Notification Configurations for a Project", - "description": "List all notification configurations for a given project.\n", - "operationId": "listProjectNotificationConfigurations", + "operationId": "getStackConfigurationUploadUrl", + "summary": "Get stack configuration upload URL", + "description": "Get a url to upload a stack configuration", "tags": [ - "Notification Configurations" + "stacks" ], "parameters": [ { - "name": "project_id", "in": "path", - "description": "The ID of the project", - "required": true, + "name": "stack_configuration_id", "schema": { "type": "string" - } + }, + "required": true, + "description": "Stack configuration ID" } ], "responses": { "200": { - "description": "Success", + "description": "Stack configuration details", "content": { "application/vnd.api+json": { "schema": { "type": "object", + "required": [ + "data" + ], "properties": { "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/notification-configurations" + "type": "object", + "properties": { + "source-upload-url": { + "type": "string", + "description": "URL to upload the stack configuration" + } } + }, + "links": { + "$ref": "#/components/schemas/self" } } } } } }, - "404": { - "description": "Project not found", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - }, - "post": { - "summary": "Create a Notification Configuration for a Project", - "description": "Create a new notification configuration for a given project.\n", - "operationId": "createProjectNotificationConfiguration", - "tags": [ - "Notification Configurations" - ], - "parameters": [ - { - "name": "project_id", - "in": "path", - "description": "The ID of the project", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/notification-configurations-envelope" - } - } - } - }, - "responses": { - "201": { - "description": "Notification configuration created successfully", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/notification-configurations-envelope" - } - } - } - }, - "400": { - "description": "Bad request", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "404": { - "description": "Project not found", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "422": { - "description": "Validation error", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -5312,43 +5149,59 @@ } } }, - "/workspaces/{workspace_id}/notification-configurations": { + "/stack-configurations/{stack_configuration_id}/stack-published-outputs": { "get": { - "operationId": "listWorkspaceNotificationConfigurations", - "summary": "List Notification Configurations for a Workspace", - "description": "List all notification configurations for a workspace.", + "operationId": "listStackConfigurationPublishedOutputs", + "summary": "List stack configuration published outputs", + "description": "List the published outputs for a given stack configuration.", "tags": [ - "notification-configurations" + "stacks" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "stack_configuration_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace." + "description": "ID of the stack configuration" }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[stack-published-outputs]", + "description": "Return only the specified fields for stack-published-outputs resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of notification configurations", + "description": "Stack Published Outputs list", "content": { "application/vnd.api+json": { "schema": { "type": "object", + "required": [ + "data" + ], "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/notification-configurations" + "$ref": "#/components/schemas/stack-published-outputs" } }, "meta": { @@ -5378,96 +5231,111 @@ } } } - }, - "post": { - "operationId": "createWorkspaceNotificationConfiguration", - "summary": "Create a Notification Configuration for a Workspace", - "description": "Create a new notification configuration for a workspace.", + } + }, + "/stack-configurations/{stack_configuration_id}/stack-deployment-groups": { + "get": { + "operationId": "listStackConfigurationDeploymentGroups", + "summary": "List Stack Deployment Groups", + "description": "List deployment groups for a stack configuration.", "tags": [ - "notification-configurations" + "stacks" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "stack_configuration_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/notification-configurations-envelope" - } - } - } - }, - "responses": { - "201": { - "description": "Notification configuration created", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/notification-configurations-envelope" - } - } - } + "description": "ID of the stack configuration." }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - } - }, - "/teams/{team_id}/notification-configurations": { - "get": { - "operationId": "listTeamNotificationConfigurations", - "summary": "List Notification Configurations for a Team", - "description": "List all notification configurations for a team.", - "tags": [ - "notification-configurations" - ], - "parameters": [ { - "in": "path", - "name": "team_id", + "in": "query", + "name": "q", "schema": { "type": "string" }, - "required": true, - "description": "The ID of the team." + "required": false, + "description": "A search query string. Stack deployment groups are searchable by group name." + }, + { + "in": "query", + "name": "filter[status]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Filter by deployment group status. Accepts a comma-separated list of statuses: pending, pre-deploying, deploying, succeeded, failed, abandoned." + }, + { + "in": "query", + "name": "sort", + "required": false, + "description": "Allows sorting by group name or status priority, e.g. 'name' or '-name' for descending. Sorting by 'status-priority' orders groups from highest to lowest priority (failed, deploying, pre-deploying, pending, abandoned, succeeded).", + "schema": { + "type": "string", + "enum": [ + "name", + "-name", + "status-priority", + "-status-priority" + ] + } + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "stack-deployment-group-summary" + ] + } + }, + "required": false, + "description": "Optionally side-load relationships. Accepts a comma-separated list of the enumerated values." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[stack-deployment-groups]", + "description": "Return only the specified fields for stack-deployment-groups resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of notification configurations", + "description": "Stack Deployment group list", "content": { "application/vnd.api+json": { "schema": { "type": "object", + "required": [ + "data" + ], "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/notification-configurations" + "$ref": "#/components/schemas/stack-deployment-groups" } }, "meta": { @@ -5497,42 +5365,56 @@ } } } - }, - "post": { - "operationId": "createTeamNotificationConfiguration", - "summary": "Create a Notification Configuration for a Team", - "description": "Create a new notification configuration for a team.", + } + }, + "/stack-configurations/{stack_configuration_id}/stack-deployment-groups/{stack_deployment_group_name}": { + "get": { + "operationId": "getStackDeploymentGroupByName", + "summary": "Get Stack Deployment Group by name", + "description": "Get details about a stack deployment group by name.", "tags": [ - "notification-configurations" + "stacks" ], "parameters": [ { "in": "path", - "name": "team_id", + "name": "stack_configuration_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the team." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/notification-configurations-envelope" + "description": "Stack configuration ID" + }, + { + "in": "path", + "name": "stack_deployment_group_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "Stack deployment group name" + }, + { + "in": "query", + "name": "fields[stack-deployment-groups]", + "description": "Return only the specified fields for stack-deployment-groups resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "201": { - "description": "Notification configuration created", + "200": { + "description": "Stack deployment group details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/notification-configurations-envelope" + "$ref": "#/components/schemas/stack-deployment-groups-envelope" } } } @@ -5550,32 +5432,62 @@ } } }, - "/notification-configurations/{notification_configuration_id}": { + "/stack-deployment-groups/{stack_deployment_group_id}": { "get": { - "operationId": "getNotificationConfiguration", - "summary": "Show a Notification Configuration", - "description": "Get details about a notification configuration.", + "operationId": "getStackDeploymentGroupById", + "summary": "Get Stack Deployment Group by ID", + "description": "Get details about a stack deployment group.", "tags": [ - "notification-configurations" + "stacks" ], "parameters": [ { "in": "path", - "name": "notification_configuration_id", + "name": "stack_deployment_group_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the notification configuration." + "description": "Stack deployment group ID" + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "stack-deployment-group-summary" + ] + } + }, + "required": false, + "description": "Optionally side-load relationships. Accepts a comma-separated list of the enumerated values." + }, + { + "in": "query", + "name": "fields[stack-deployment-groups]", + "description": "Return only the specified fields for stack-deployment-groups resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Notification configuration details", + "description": "Stack deployment group details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/notification-configurations-envelope" + "$ref": "#/components/schemas/stack-deployment-groups-envelope" } } } @@ -5591,45 +5503,39 @@ } } } - }, - "patch": { - "operationId": "updateNotificationConfiguration", - "summary": "Update a Notification Configuration", - "description": "Update an existing notification configuration.", + } + }, + "/stack-deployment-groups/{stack_deployment_group_id}/approve-all-plans": { + "post": { + "operationId": "approveStackDeploymentGroup", + "summary": "Approve Stack Deployment Group", + "description": "Approve a stack deployment group.", "tags": [ - "notification-configurations" + "stacks" ], "parameters": [ { "in": "path", - "name": "notification_configuration_id", + "name": "stack_deployment_group_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the notification configuration." + "description": "Stack deployment group ID" } ], "requestBody": { - "required": true, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/notification-configurations-envelope" + "$ref": "#/components/schemas/action-reason" } } } }, "responses": { - "200": { - "description": "Notification configuration updated", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/notification-configurations-envelope" - } - } - } + "204": { + "description": "Approve all plans successfully recieved for Stack Deployment Group" }, "default": { "description": "Error details", @@ -5642,31 +5548,46 @@ } } } - }, - "delete": { - "operationId": "deleteNotificationConfiguration", - "summary": "Delete a Notification Configuration", - "description": "Delete a notification configuration.", + } + }, + "/stack-deployment-groups/{stack_deployment_group_id}/rerun": { + "post": { + "operationId": "rerunStackDeploymentInGroup", + "summary": "Rerun deployments within a Deployment Group", + "description": "Rerun deployments that have ended up in a failed or abandoned state. Provide the `deployments` query parameter to rerun specific deployments, or omit it to rerun every eligible (failed or abandoned) deployment in the group.", "tags": [ - "notification-configurations" + "stacks" ], "parameters": [ { "in": "path", - "name": "notification_configuration_id", + "name": "stack_deployment_group_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the notification configuration." + "description": "Stack deployment group ID" + }, + { + "in": "query", + "name": "deployments", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "required": false, + "explode": false, + "description": "Stack deployments we wish to rerun. When omitted, every eligible deployment in the group is rerun." } ], "responses": { "204": { - "description": "Notification configuration deleted" + "description": "Rerun successfully triggered for Stack Deployment Group" }, - "default": { - "description": "Error details", + "409": { + "description": "The deployments provided do not qualify for a rerun", "content": { "application/vnd.api+json": { "schema": { @@ -5674,36 +5595,13 @@ } } } - } - } - } - }, - "/notification-configurations/{notification_configuration_id}/actions/enable": { - "post": { - "operationId": "enableNotificationConfiguration", - "summary": "Enable a Notification Configuration", - "description": "Enable a notification configuration by triggering a verification request.", - "tags": [ - "notification-configurations" - ], - "parameters": [ - { - "in": "path", - "name": "notification_configuration_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the notification configuration." - } - ], - "responses": { - "200": { - "description": "Notification configuration enabled", + }, + "422": { + "description": "The deployments parameter was empty", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/notification-configurations-envelope" + "$ref": "#/components/schemas/errors" } } } @@ -5721,167 +5619,118 @@ } } }, - "/notification-configurations/{notification_configuration_id}/actions/verify": { - "post": { - "operationId": "verifyNotificationConfiguration", - "summary": "Verify a Notification Configuration", - "description": "Send a verification request to the configured destination URL.", + "/stack-deployment-groups/{stack_deployment_group_id}/stack-deployment-runs": { + "get": { + "operationId": "listStackDeploymentGroupRuns", + "summary": "List Stack Deployment Runs for a Stack Deployment Group", + "description": "List deployment runs for a stack deployment group.", "tags": [ - "notification-configurations" + "stacks" ], "parameters": [ { "in": "path", - "name": "notification_configuration_id", + "name": "stack_deployment_group_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the notification configuration." - } - ], - "responses": { - "200": { - "description": "Notification configuration verified", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/notification-configurations-envelope" - } - } - } + "description": "ID of the stack deployment group." }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - } - }, - "/email-recipient-statuses/verify": { - "get": { - "operationId": "verifyEmailRecipientStatus", - "summary": "Verify Email Recipient", - "description": "Render the email verification page using a signed token. This endpoint is public and does not require authentication.", - "tags": [ - "email-recipient-statuses" - ], - "parameters": [ { "in": "query", - "name": "token", + "name": "q", "schema": { "type": "string" }, - "required": true, - "description": "The signed token for verifying the email address" + "required": false, + "description": "A search query string. Stack deployment runs are searchable by deployment name." }, { "in": "query", - "name": "config", + "name": "filter[status]", "schema": { "type": "string" }, "required": false, - "description": "The notification configuration external ID used to render the subscribable name" - } - ], - "responses": { - "200": { - "description": "Email verification page rendered successfully", - "content": { - "text/html": { - "schema": { - "type": "string" - } - } - } + "description": "Filter by run status. Accepts a comma-separated list of the logical statuses: failed, pending-operator (pre-deploying and deploying awaiting operator input), running (pre-deploying and deploying), pending (pending, acquiring-lock and pending-capacity), abandoned, succeeded." }, - "404": { - "description": "Invalid or expired token", - "content": { - "text/html": { - "schema": { - "type": "string" - } - } + { + "in": "query", + "name": "filter[latest_only]", + "schema": { + "type": "string", + "enum": [ + "true" + ] + }, + "required": false, + "description": "When set to 'true', returns only the latest run for each deployment within the group." + }, + { + "in": "query", + "name": "sort", + "required": false, + "description": "Allows sorting by deployment name or status priority, e.g. 'deployment' or '-deployment' for descending. Sorting by 'status-priority' orders runs from highest to lowest priority (failed, deploying, deploying-pending-operator, pre-deploying, pre-deploying-pending-operator, acquiring-lock, pending-capacity, pending, abandoned, succeeded). Defaults to most recently created first.", + "schema": { + "type": "string", + "enum": [ + "deployment", + "-deployment", + "status-priority", + "-status-priority" + ] } }, - "default": { - "description": "Error details", - "content": { - "text/html": { - "schema": { - "type": "string" - } + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[stack-deployment-runs]", + "description": "Return only the specified fields for stack-deployment-runs resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - } - }, - "post": { - "operationId": "performEmailRecipientVerification", - "summary": "Perform Email Recipient Verification", - "description": "Verify an email recipient status using a signed token. This endpoint is public and does not require authentication.", - "tags": [ - "email-recipient-statuses" ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "required": [ - "token" - ], - "properties": { - "token": { - "type": "string", - "description": "The signed token for verifying the email address" - }, - "config": { - "type": "string", - "description": "The notification configuration external ID used to render the subscribable name" - } - } - } - } - } - }, "responses": { "200": { - "description": "Email recipient verification completed successfully", - "content": { - "text/html": { - "schema": { - "type": "string" - } - } - } - }, - "404": { - "description": "Invalid or expired token", - "content": { - "text/html": { - "schema": { - "type": "string" - } - } - } - }, - "415": { - "description": "Invalid content type", + "description": "Stack Deployment run list", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/stack-deployment-runs" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } } } } @@ -5889,9 +5738,9 @@ "default": { "description": "Error details", "content": { - "text/html": { + "application/vnd.api+json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/errors" } } } @@ -5899,42 +5748,45 @@ } } }, - "/email-recipient-statuses/unsubscribe": { + "/stack-deployment-runs/{stack_deployment_run_id}": { "get": { - "operationId": "unsubscribeEmailRecipient", - "summary": "Unsubscribe Email Recipient", - "description": "Unsubscribe an email recipient from notifications using a signed token. This endpoint is public and does not require authentication.", + "operationId": "getStackDeploymentRun", + "summary": "Get Stack Deployment Run", + "description": "Get details about a stack deployment run.", "tags": [ - "email-recipient-statuses" + "stacks" ], "parameters": [ { - "in": "query", - "name": "token", + "in": "path", + "name": "stack_deployment_run_id", "schema": { "type": "string" }, "required": true, - "description": "The signed token for unsubscribing the email address" + "description": "Stack deployment run ID" + }, + { + "in": "query", + "name": "fields[stack-deployment-runs]", + "description": "Return only the specified fields for stack-deployment-runs resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Email recipient unsubscribed successfully", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/email-recipient-statuses-envelope" - } - } - } - }, - "404": { - "description": "Invalid or expired token", + "description": "Stack deployment run details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/stack-deployment-runs-envelope" } } } @@ -5950,80 +5802,46 @@ } } } - }, + } + }, + "/stack-deployment-runs/{stack_deployment_run_id}/approve-all-plans": { "post": { - "operationId": "saveUnsubscribePreferences", - "summary": "Save Email Unsubscribe Preferences", - "description": "Save email unsubscribe preferences using a signed token. This endpoint is public and does not require authentication.", + "operationId": "approveStackDeploymentRun", + "summary": "Approve Stack Deployment Run", + "description": "Approve a stack deployment run.", "tags": [ - "email-recipient-statuses" + "stacks" ], "parameters": [ { - "in": "query", - "name": "token", + "in": "path", + "name": "stack_deployment_run_id", "schema": { "type": "string" }, "required": true, - "description": "The signed token for the unsubscribe operation" + "description": "Stack deployment run ID" } ], "requestBody": { - "required": true, "content": { - "application/x-www-form-urlencoded": { + "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "unsubscribe_preference": { - "type": "string", - "enum": [ - "project", - "all_organization", - "cancel" - ], - "description": "The unsubscribe preference selected by the user" - }, - "configuration": { - "type": "string", - "description": "Optional external ID of the notification configuration (for project unsubscribe)" - } - }, - "required": [ - "unsubscribe_preference" - ] + "$ref": "#/components/schemas/action-reason" } } } }, "responses": { - "200": { - "description": "Preferences saved successfully", - "content": { - "text/html": { - "schema": { - "type": "string" - } - } - } - }, - "404": { - "description": "Invalid or expired token", - "content": { - "text/html": { - "schema": { - "type": "string" - } - } - } + "204": { + "description": "Approve all plans successfuly recieved for Stack Deployment Run" }, "default": { "description": "Error details", "content": { - "text/html": { + "application/vnd.api+json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/errors" } } } @@ -6031,43 +5849,35 @@ } } }, - "/workspaces/{workspace_id}/all-vars": { - "get": { - "operationId": "listAllVars", - "summary": "List All Variables Accessible to a Workspace", - "description": "This API returns the list of all variables that are accessible to a workspace. This includes variables defined directly on the workspace as well as variables inherited from any variable sets attached to the workspace.", + "/stack-deployment-runs/{stack_deployment_run_id}/cancel": { + "post": { + "operationId": "cancelStackDeploymentRun", + "summary": "Cancel Stack Deployment Run", + "description": "Cancel a stack deployment run.", "tags": [ - "vars" + "stacks" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "stack_deployment_run_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace." + "description": "Stack deployment run ID" } ], "responses": { - "200": { - "description": "List of all variables accessible to a workspace", + "202": { + "description": "Cancel successfully recieved for Stack Deployment Run", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/vars" - } - } - } + "type": "string", + "enum": [ + "null" + ] } } } @@ -6085,28 +5895,60 @@ } } }, - "/workspaces/{workspace_id}/vars": { + "/stack-deployment-runs/{stack_deployment_run_id}/stack-deployment-steps": { "get": { - "operationId": "listWorkspaceVars", - "summary": "List Variables", - "description": "List variables for a workspace.", + "operationId": "listStackDeploymentSteps", + "summary": "List Stack Deployment Steps", + "description": "List deployment steps for a deployment run.", "tags": [ - "vars" + "stacks" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "stack_deployment_run_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace." + "description": "ID of the stack deployment run." + }, + { + "in": "query", + "name": "sort", + "required": false, + "description": "Allows sorting by step order e.g., 'order' or '-order' for descending.", + "schema": { + "type": "string", + "enum": [ + "order", + "-order" + ] + } + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[stack-deployment-steps]", + "description": "Return only the specified fields for stack-deployment-steps resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of variables for the workspace", + "description": "Stack deployment step list", "content": { "application/vnd.api+json": { "schema": { @@ -6118,8 +5960,19 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/vars" + "$ref": "#/components/schemas/stack-deployment-steps" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" } } } @@ -6137,42 +5990,47 @@ } } } - }, - "post": { - "operationId": "createWorkspaceVar", - "summary": "Create a Variable", - "description": "Create a variable for a workspace.", + } + }, + "/stack-deployment-steps/{stack_deployment_step_id}": { + "get": { + "operationId": "getStackDeploymentStep", + "summary": "Get Stack Deployment Step", + "description": "Get details about a stack deployment step.", "tags": [ - "vars" + "stacks" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "stack_deployment_step_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/vars-envelope" + "description": "Stack deployment step ID" + }, + { + "in": "query", + "name": "fields[stack-deployment-steps]", + "description": "Return only the specified fields for stack-deployment-steps resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "201": { - "description": "Variable created", + "200": { + "description": "Stack deployment step details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/vars-envelope" + "$ref": "#/components/schemas/stack-deployment-steps-envelope" } } } @@ -6190,41 +6048,85 @@ } } }, - "/workspaces/{workspace_id}/vars/{id}": { + "/stack-deployment-steps/{stack_deployment_step_id}/stack-diagnostics": { "get": { - "operationId": "showWorkspaceVar", - "summary": "Show a Variable", - "description": "Show details of a variable in a workspace.", + "operationId": "listStackDeploymentStepDiagnostics", + "summary": "List stack deployment step diagnostics", + "description": "List the diagnostics for a given stack deployment step.", "tags": [ - "vars" + "stacks" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "stack_deployment_step_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace." + "description": "ID of the stack deployment step" }, { - "in": "path", - "name": "id", + "in": "query", + "name": "page[number]", "schema": { - "type": "string" + "type": "integer" }, - "required": true, - "description": "The ID of the variable." + "required": false, + "description": "If omitted, the endpoint will return the first page." + }, + { + "in": "query", + "name": "page[size]", + "schema": { + "type": "integer" + }, + "required": false, + "description": "If omitted, the endpoint will return 20 per page." + }, + { + "in": "query", + "name": "fields[stack-diagnostics]", + "description": "Return only the specified fields for stack-diagnostics resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Variable details", + "description": "Diagnostics list", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/vars-envelope" + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/stack-diagnostics" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } } } } @@ -6240,54 +6142,39 @@ } } } - }, - "patch": { - "operationId": "updateWorkspaceVar", - "summary": "Update a Variable", - "description": "Update attributes of an existing variable in a workspace.", + } + }, + "/stack-deployment-steps/{stack_deployment_step_id}/advance": { + "post": { + "operationId": "advanceStackDeploymentStep", + "summary": "Advance Stack Deployment Step", + "description": "Advance a stack deployment step when in the `pending_operator` state.", "tags": [ - "vars" + "stacks" ], + "requestBody": { + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/action-reason" + } + } + } + }, "parameters": [ { "in": "path", - "name": "workspace_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the workspace." - }, - { - "in": "path", - "name": "id", + "name": "stack_deployment_step_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the variable." + "description": "Stack deployment step ID" } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/vars-envelope" - } - } - } - }, "responses": { - "200": { - "description": "Variable updated", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/vars-envelope" - } - } - } + "204": { + "description": "Advance successfuly recieved for Stack Deployment Step" }, "default": { "description": "Error details", @@ -6300,37 +6187,39 @@ } } } - }, - "delete": { - "operationId": "deleteWorkspaceVar", - "summary": "Delete a Variable", - "description": "Delete a variable from a workspace.", + } + }, + "/stack-deployment-steps/{stack_deployment_step_id}/fail": { + "post": { + "operationId": "failStackDeploymentStep", + "summary": "Fail Stack Deployment Step", + "description": "Fail a stack deployment step.", "tags": [ - "vars" + "stacks" ], + "requestBody": { + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/action-reason" + } + } + } + }, "parameters": [ { "in": "path", - "name": "workspace_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the workspace." - }, - { - "in": "path", - "name": "id", + "name": "stack_deployment_step_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the variable." + "description": "Stack deployment step ID" } ], "responses": { "204": { - "description": "Variable deleted successfully" + "description": "Fail successfuly recieved for Stack Deployment Step" }, "default": { "description": "Error details", @@ -6345,45 +6234,66 @@ } } }, - "/provider-sets/{provider_set_id}": { - "x-vis": [ - "public-beta" - ], + "/stack-deployment-steps/{stack_deployment_step_id}/artifacts": { "get": { - "operationId": "showProviderSet", - "summary": "Show a Provider Set", - "description": "Fetch details about the specified provider set.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "operationId": "getSpecificArtifact", + "summary": "Get Artifact for a Stack Deployment Step", + "description": "Get a specific artifact for a stack deployment step.", "tags": [ - "provider-sets" + "stacks" ], "parameters": [ { "in": "path", - "name": "provider_set_id", + "name": "stack_deployment_step_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the provider set." + "description": "Stack deployment step ID" }, { "in": "query", - "name": "include", - "description": "Comma-separated list of related resources to include. Valid values: projects, workspaces.\n", + "name": "name", + "required": true, + "description": "Name of the artifact to retrieve", "schema": { - "type": "string" - }, - "required": false, - "example": "projects,workspaces" + "type": "string", + "enum": [ + "plan-description", + "apply-description" + ] + } } ], "responses": { - "200": { - "description": "Provider set details", + "307": { + "description": "Redirect to the artifact download URL", + "headers": { + "Location": { + "description": "The URL to download the artifact", + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request, missing or invalid artifact name", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/provider-sets-envelope" + "$ref": "#/components/schemas/errors" + } + } + } + }, + "404": { + "description": "Not Found, artifact not found or not uploaded", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } @@ -6399,42 +6309,47 @@ } } } - }, - "patch": { - "operationId": "updateProviderSet", - "summary": "Update a Provider Set", - "description": "Update attributes of an existing provider set.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + } + }, + "/stack-approvals/{stack_approval_id}": { + "get": { + "operationId": "getStackApproval", + "summary": "Get Stack Approval Details", + "description": "Get details about a stack approval", "tags": [ - "provider-sets" + "stacks" ], "parameters": [ { "in": "path", - "name": "provider_set_id", + "name": "stack_approval_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the provider set." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/provider-sets-envelope" + "description": "Stack approval ID" + }, + { + "in": "query", + "name": "fields[stack-approvals]", + "description": "Return only the specified fields for stack-approvals resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { "200": { - "description": "Provider set updated", + "description": "Stack approval details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/provider-sets-envelope" + "$ref": "#/components/schemas/stack-approvals-envelope" } } } @@ -6450,28 +6365,163 @@ } } } - }, - "delete": { - "operationId": "deleteProviderSet", - "summary": "Delete a Provider Set", - "description": "Delete an existing provider set.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + } + }, + "/organizations": { + "get": { + "operationId": "listOrganizations", + "summary": "List Organizations", + "description": "List organizations.", "tags": [ - "provider-sets" + "organizations" ], "parameters": [ { - "in": "path", - "name": "provider_set_id", + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "subscription" + ] + } + }, + "required": false, + "description": "Optionally side-load relationships of the specified name" + }, + { + "in": "query", + "name": "q", "schema": { "type": "string" }, - "required": true, - "description": "The ID of the provider set." + "required": false, + "description": "A search query string. Organizations are searchable by name and notification email." + }, + { + "in": "query", + "name": "q[email]", + "schema": { + "type": "string" + }, + "required": false, + "description": "A search query string. This query searches organizations by notification email." + }, + { + "in": "query", + "name": "q[name]", + "schema": { + "type": "string" + }, + "required": false, + "description": "A search query string. This query searches organizations by name." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[organizations]", + "description": "Return only the specified fields for organizations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { - "204": { - "description": "Provider set deleted successfully" + "200": { + "description": "Organizations list", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/organizations" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "included": { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/subscriptions" + } + ] + } + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "post": { + "operationId": "createOrganization", + "summary": "Create Organization", + "description": "Create an organization.", + "tags": [ + "organizations" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizations-envelope" + } + } + } + }, + "responses": { + "201": { + "description": "Organization created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizations-envelope" + } + } + } }, "default": { "description": "Error details", @@ -6486,41 +6536,92 @@ } } }, - "/provider-sets/{provider_set_id}/relationships/projects": { - "x-vis": [ - "public-beta" - ], - "post": { - "operationId": "addProviderSetProjects", - "summary": "Add Projects to a Provider Set", - "description": "Add projects to a provider set. Relationships are additive; existing project assignments are preserved.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "/organizations/{organization_name}": { + "get": { + "operationId": "getOrganization", + "summary": "Get Organization details", + "description": "Get details about an organization.", "tags": [ - "provider-sets" + "organizations" ], "parameters": [ { "in": "path", - "name": "provider_set_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the provider set." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/projects-identifier-array-document" + "description": "Organization Name" + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "subscription", + "entitlement_set", + "default-project" + ] + } + }, + "required": false, + "description": "Optionally side-load relationships of the specified name" + }, + { + "in": "query", + "name": "fields[organizations]", + "description": "Return only the specified fields for organizations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "204": { - "description": "Projects successfully added to provider set." + "200": { + "description": "Organization details", + "content": { + "application/vnd.api+json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/organizations-envelope" + }, + { + "type": "object", + "properties": { + "included": { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/subscriptions" + }, + { + "$ref": "#/components/schemas/projects" + }, + { + "$ref": "#/components/schemas/entitlement-sets" + } + ] + } + } + } + } + ] + } + } + } }, "default": { "description": "Error details", @@ -6534,22 +6635,22 @@ } } }, - "delete": { - "operationId": "removeProviderSetProjects", - "summary": "Remove Projects from a Provider Set", - "description": "Remove projects from a provider set. Projects not currently assigned to the set are ignored.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "put": { "tags": [ - "provider-sets" + "organizations" ], + "operationId": "updateOrganization", + "summary": "Update Organization", + "description": "Update an organization.", "parameters": [ { "in": "path", - "name": "provider_set_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the provider set." + "description": "Organization Name" } ], "requestBody": { @@ -6557,14 +6658,21 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/projects-identifier-array-document" + "$ref": "#/components/schemas/organizations-envelope" } } } }, "responses": { - "204": { - "description": "Projects successfully removed from provider set." + "200": { + "description": "Organization updated", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizations-envelope" + } + } + } }, "default": { "description": "Error details", @@ -6577,28 +6685,23 @@ } } } - } - }, - "/provider-sets/{provider_set_id}/relationships/workspaces": { - "x-vis": [ - "public-beta" - ], - "post": { - "operationId": "addProviderSetWorkspaces", - "summary": "Add Workspaces to a Provider Set", - "description": "Add workspaces to a provider set. Relationships are additive; existing workspace assignments are preserved.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + }, + "patch": { "tags": [ - "provider-sets" + "organizations" ], + "operationId": "updateOrganization", + "summary": "Update Organization", + "description": "Update an organization.", "parameters": [ { "in": "path", - "name": "provider_set_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the provider set." + "description": "Organization Name" } ], "requestBody": { @@ -6606,14 +6709,21 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspaces-identifier-array-document" + "$ref": "#/components/schemas/organizations-envelope" } } } }, "responses": { - "204": { - "description": "Workspaces successfully added to provider set." + "200": { + "description": "Organization updated", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organizations-envelope" + } + } + } }, "default": { "description": "Error details", @@ -6628,36 +6738,26 @@ } }, "delete": { - "operationId": "removeProviderSetWorkspaces", - "summary": "Remove Workspaces from a Provider Set", - "description": "Remove workspaces from a provider set. Workspaces not currently assigned to the set are ignored.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "operationId": "deleteOrganization", + "summary": "Delete Organization", + "description": "Delete an organization.", "tags": [ - "provider-sets" + "organizations" ], "parameters": [ { "in": "path", - "name": "provider_set_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the provider set." + "description": "Organization Name" } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-identifier-array-document" - } - } - } - }, "responses": { "204": { - "description": "Workspaces successfully removed from provider set." + "description": "Organization deleted" }, "default": { "description": "Error details", @@ -6672,16 +6772,16 @@ } } }, - "/organizations/{organization_name}/provider-sets": { + "/organizations/{organization_name}/cidr-range-lists": { "x-vis": [ "public-beta" ], "get": { - "operationId": "getProviderSets", - "summary": "Get Provider Sets", - "description": "Fetch details about all the provider sets in an organization.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "operationId": "listCidrRangeLists", + "summary": "List CIDR Range Lists", + "description": "List all CIDR Range Lists in an organization\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "provider-sets" + "ip-allowlists" ], "parameters": [ { @@ -6691,22 +6791,31 @@ "type": "string" }, "required": true, - "description": "The name of the organization." + "description": "The name of the organization" + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" }, { "in": "query", - "name": "include", - "description": "Comma-separated list of related resources to include. Valid values: projects, workspaces.\n", + "name": "fields[cidr-range-lists]", + "description": "Return only the specified fields for cidr-range-lists resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": false, - "example": "projects,workspaces" + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Provider sets' details", + "description": "Success", "content": { "application/vnd.api+json": { "schema": { @@ -6715,14 +6824,19 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/provider-sets" + "$ref": "#/components/schemas/cidr-range-lists" } }, "links": { "$ref": "#/components/schemas/self-with-pagination" }, "meta": { - "$ref": "#/components/schemas/pagination" + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } } } } @@ -6730,7 +6844,7 @@ } }, "default": { - "description": "Error details", + "description": "Organization not found, or user unauthorized to perform action", "content": { "application/vnd.api+json": { "schema": { @@ -6742,11 +6856,11 @@ } }, "post": { - "operationId": "createProviderSet", - "summary": "Create a Provider Set", - "description": "Create a provider set belonging to an organization.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "operationId": "createCidrRangeList", + "summary": "Create CIDR Range List", + "description": "Create a new CIDR Range List\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "provider-sets" + "ip-allowlists" ], "parameters": [ { @@ -6756,7 +6870,7 @@ "type": "string" }, "required": true, - "description": "The name of the organization." + "description": "Name of the organization" } ], "requestBody": { @@ -6764,18 +6878,18 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/provider-sets-envelope" + "$ref": "#/components/schemas/cidr-range-list-with-ranges-envelope" } } } }, "responses": { "201": { - "description": "Provider set created", + "description": "CIDR Range List created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/provider-sets-envelope" + "$ref": "#/components/schemas/cidr-range-list-envelope" } } } @@ -6791,13 +6905,15 @@ } } } - }, - "delete": { - "operationId": "batchDeleteProviderSets", - "summary": "Batch Delete Provider Sets", - "description": "Delete multiple provider sets in a single request.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + } + }, + "/organizations/{organization_name}/organization-memberships": { + "get": { + "operationId": "listOrganizationMemberships", + "summary": "List Organization Memberships", + "description": "List all memberships in an organization. This includes active/inactive members and invited users who have not yet accepted their invitation.", "tags": [ - "provider-sets" + "organization-memberships" ], "parameters": [ { @@ -6807,229 +6923,143 @@ "type": "string" }, "required": true, - "description": "The name of the organization." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "provider-sets" - ] - }, - "id": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "responses": { - "204": { - "description": "Provider sets deleted successfully" + "description": "The name of the organization to list memberships for" }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - } - }, - "/organizations/{organization_name}/provider-sets/{provider_set_name}": { - "x-vis": [ - "public-beta" - ], - "get": { - "operationId": "showProviderSetByName", - "summary": "Show a Provider Set by name", - "description": "Fetch details about the specified provider set.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", - "tags": [ - "provider-sets" - ], - "parameters": [ { - "in": "path", - "name": "organization_name", + "in": "query", + "name": "q", "schema": { "type": "string" }, - "required": true, - "description": "The name of the organization." + "required": false, + "description": "A search query string. Memberships are searchable by user name or email (case-insensitive)." }, { - "in": "path", - "name": "provider_set_name", + "in": "query", + "name": "filter[status]", "schema": { - "type": "string" + "type": "string", + "enum": [ + "active", + "invited", + "inactive" + ] }, - "required": true, - "description": "The name of the provider_set." + "required": false, + "description": "Filter memberships by status. Can be \"active\", \"invited\", or \"inactive\"." }, { "in": "query", - "name": "include", - "description": "Comma-separated list of related resources to include. Valid values: projects, workspaces.\n", + "name": "filter[email]", "schema": { - "type": "string" + "type": "string", + "format": "email" }, "required": false, - "example": "projects,workspaces" - } - ], - "responses": { - "200": { - "description": "Provider set details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/provider-sets-envelope" - } - } - } + "description": "Filter memberships by exact email address match." }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - } - }, - "/projects/{project_id}/provider-sets": { - "x-vis": [ - "public-beta" - ], - "get": { - "operationId": "getProjectProviderSets", - "summary": "Get Provider Sets", - "description": "Fetch details about all the provider sets assigned to a project.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", - "tags": [ - "provider-sets" - ], - "parameters": [ { - "in": "path", - "name": "project_id", + "in": "query", + "name": "include", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": true, - "description": "The id of a project." - } - ], - "responses": { - "200": { - "description": "Provider sets' details", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/provider-sets" - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "meta": { - "$ref": "#/components/schemas/pagination" - } - } - } + "type": "array", + "items": { + "type": "string", + "enum": [ + "user", + "teams", + "scim-identity" + ] } - } + }, + "required": false, + "description": "Optionally side-load relationships. Can include \"user\", \"teams\", or \"scim-identity\".\nNote: \"scim-identity\" is only available on HCP Terraform.\n" }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - } - }, - "/workspaces/{workspace_id}/provider-sets": { - "x-vis": [ - "public-beta" - ], - "get": { - "operationId": "getWorkspaceProviderSets", - "summary": "Get Provider Sets", - "description": "Fetch details about all the provider sets assigned to a workspace.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", - "tags": [ - "provider-sets" - ], - "parameters": [ { - "in": "path", - "name": "workspace_id", + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[organization-memberships]", + "description": "Return only the specified fields for organization-memberships resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": true, - "description": "The id of a workspace." + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Provider sets' details", + "description": "Organization memberships list", "content": { "application/vnd.api+json": { "schema": { "type": "object", + "required": [ + "data" + ], "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/provider-sets" + "$ref": "#/components/schemas/organization-memberships" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } } }, "links": { "$ref": "#/components/schemas/self-with-pagination" }, - "meta": { - "$ref": "#/components/schemas/pagination" + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/users" + }, + { + "$ref": "#/components/schemas/teams" + }, + { + "$ref": "#/components/schemas/organizations" + }, + { + "$ref": "#/components/schemas/scim-identities" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "users": "#/components/schemas/users", + "teams": "#/components/schemas/teams", + "organizations": "#/components/schemas/organizations", + "scim-identities": "#/components/schemas/scim-identities" + } + } + } } } } } } }, - "default": { - "description": "Error details", + "400": { + "description": "Invalid filter or include parameter", "content": { "application/vnd.api+json": { "schema": { @@ -7037,36 +7067,13 @@ } } } - } - } - } - }, - "/varsets/{varset_id}": { - "get": { - "operationId": "showVarset", - "summary": "Show a Variable Set", - "description": "Fetch details about the specified variable set.", - "tags": [ - "varsets" - ], - "parameters": [ - { - "in": "path", - "name": "varset_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the variable set." - } - ], - "responses": { - "200": { - "description": "Variable set details", + }, + "404": { + "description": "Organization not found, or user unauthorized to perform action", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/varsets-envelope" + "$ref": "#/components/schemas/errors" } } } @@ -7083,22 +7090,22 @@ } } }, - "patch": { - "operationId": "updateVarset", - "summary": "Update a Variable Set", - "description": "Update attributes of an existing variable set.", + "post": { + "operationId": "createOrganizationMembership", + "summary": "Invite a User to an Organization", + "description": "Invite a user to join an organization. Users can be invited by email address.", "tags": [ - "varsets" + "organization-memberships" ], "parameters": [ { "in": "path", - "name": "varset_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the variable set." + "description": "The name of the organization the user will be invited to join" } ], "requestBody": { @@ -7106,24 +7113,51 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/varsets-envelope" + "$ref": "#/components/schemas/organization-memberships-envelope" + }, + "examples": { + "inviteUser": { + "summary": "Invite a user to an organization with team memberships", + "value": { + "data": { + "type": "organization-memberships", + "attributes": { + "email": "user@example.com" + }, + "relationships": { + "teams": { + "data": [ + { + "type": "teams", + "id": "team-GeLZkdnK6xAVjA5H" + }, + { + "type": "teams", + "id": "team-XxEoUFzP9pW3r5d1" + } + ] + } + } + } + } + } } } } }, "responses": { - "200": { - "description": "Variable set updated", + "201": { + "description": "Successfully invited the user", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/varsets-envelope" + "$ref": "#/components/schemas/organization-memberships-envelope" } } } }, - "default": { - "description": "Error details", + "400": { + "description": "Unable to invite user due to organization limits", "content": { "application/vnd.api+json": { "schema": { @@ -7131,50 +7165,19 @@ } } } - } - } - }, - "post": { - "operationId": "updateVarsetPost", - "summary": "Update a Variable Set (POST)", - "description": "Update attributes of an existing variable set using POST.", - "tags": [ - "varsets" - ], - "parameters": [ - { - "in": "path", - "name": "varset_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the variable set." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/varsets-envelope" - } - } - } - }, - "responses": { - "200": { - "description": "Variable set updated", + }, + "404": { + "description": "Organization not found, or user unauthorized to perform action", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/varsets-envelope" + "$ref": "#/components/schemas/errors" } } } }, - "default": { - "description": "Error details", + "422": { + "description": "Unable to invite user due to validation errors (e.g., invalid email, missing teams)", "content": { "application/vnd.api+json": { "schema": { @@ -7182,30 +7185,6 @@ } } } - } - } - }, - "delete": { - "operationId": "deleteVarset", - "summary": "Delete a Variable Set", - "description": "Delete an existing variable set.", - "tags": [ - "varsets" - ], - "parameters": [ - { - "in": "path", - "name": "varset_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the variable set." - } - ], - "responses": { - "204": { - "description": "Variable set deleted successfully" }, "default": { "description": "Error details", @@ -7220,80 +7199,105 @@ } } }, - "/organizations/{organization_name}/varsets": { + "/organization-memberships": { "get": { - "operationId": "listOrganizationVarsets", - "summary": "List Variable Sets for an Organization", - "description": "List all variable sets for an organization.", + "operationId": "listUserOrganizationMemberships", + "summary": "List User's Own Organization Memberships", + "description": "List all organization memberships for the currently authenticated user.", "tags": [ - "varsets" + "organization-memberships" ], "parameters": [ - { - "in": "path", - "name": "organization_name", - "schema": { - "type": "string" - }, - "required": true, - "description": "The name of the organization." - }, - { - "in": "query", - "name": "q", - "schema": { - "type": "string" - }, - "required": false, - "description": "A search query string. You can search for a variable set using its name." - }, - { - "in": "query", - "name": "filter[global]", - "schema": { - "type": "boolean" - }, - "required": false, - "description": "When true, returns only global variable sets. When false, returns only non-global variable sets." - }, { "in": "query", - "name": "scope", + "name": "include", + "style": "form", + "explode": false, "schema": { - "type": "string", - "enum": [ - "owned" - ] + "type": "array", + "items": { + "type": "string", + "enum": [ + "user", + "teams", + "organization" + ] + } }, "required": false, - "description": "When set to \"owned\", returns only organization-owned variable sets." + "description": "Optionally side-load relationships. Can include \"user\", \"teams\", or \"organization\"." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[organization-memberships]", + "description": "Return only the specified fields for organization-memberships resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of variable sets for the organization", + "description": "User's organization memberships list", "content": { "application/vnd.api+json": { "schema": { "type": "object", + "required": [ + "data" + ], "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/varsets" + "$ref": "#/components/schemas/organization-memberships" } }, "links": { "$ref": "#/components/schemas/self-with-pagination" }, "meta": { - "$ref": "#/components/schemas/pagination" + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/users" + }, + { + "$ref": "#/components/schemas/teams" + }, + { + "$ref": "#/components/schemas/organizations" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "users": "#/components/schemas/users", + "teams": "#/components/schemas/teams", + "organizations": "#/components/schemas/organizations" + } + } + } } } } @@ -7311,99 +7315,104 @@ } } } - }, - "post": { - "operationId": "createVarset", - "summary": "Create a Variable Set", - "description": "Create a new variable set in an organization.", + } + }, + "/organization-memberships/{organization_membership_id}": { + "get": { + "operationId": "getOrganizationMembership", + "summary": "Show Organization Membership", + "description": "Get details about a specific organization membership.", "tags": [ - "varsets" + "organization-memberships" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "organization_membership_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/varsets-envelope" - } - } - } - }, - "responses": { - "201": { - "description": "Variable set created", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/varsets-envelope" - } - } - } + "description": "The organization membership ID" }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - } - }, - "/varsets/{varset_id}/relationships/vars": { - "get": { - "operationId": "listVarsetVars", - "summary": "List Variables in a Variable Set", - "description": "List all variables in a variable set.", - "tags": [ - "varsets" - ], - "parameters": [ { - "in": "path", - "name": "varset_id", + "in": "query", + "name": "include", + "style": "form", + "explode": false, "schema": { - "type": "string" + "type": "array", + "items": { + "type": "string", + "enum": [ + "user", + "teams" + ] + } }, - "required": true, - "description": "The ID of the variable set." + "required": false, + "description": "Optionally side-load relationships. Can include \"user\" or \"teams\"." + }, + { + "in": "query", + "name": "fields[organization-memberships]", + "description": "Return only the specified fields for organization-memberships resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of variables in the variable set", + "description": "Organization membership details", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/vars" - } + "allOf": [ + { + "$ref": "#/components/schemas/organization-memberships-envelope" }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" + { + "type": "object", + "properties": { + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/users" + }, + { + "$ref": "#/components/schemas/teams" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "users": "#/components/schemas/users", + "teams": "#/components/schemas/teams" + } + } + } + } + } } - } + ] + } + } + } + }, + "404": { + "description": "Organization membership not found, or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } @@ -7420,41 +7429,44 @@ } } }, - "post": { - "operationId": "addVarsetVar", - "summary": "Add a Variable to a Variable Set", - "description": "Add a new variable to an existing variable set.", + "delete": { + "operationId": "deleteOrganizationMembership", + "summary": "Remove User from Organization", + "description": "Remove a user from an organization. You cannot remove yourself from organizations which you own.", "tags": [ - "varsets" + "organization-memberships" ], "parameters": [ { "in": "path", - "name": "varset_id", + "name": "organization_membership_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the variable set." + "description": "The organization membership ID" } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/vars-envelope" + "responses": { + "204": { + "description": "Successfully removed the user from the organization" + }, + "403": { + "description": "Unable to remove the user. You cannot remove yourself from organizations which you own.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } } } - } - }, - "responses": { - "201": { - "description": "Variable added to variable set", + }, + "404": { + "description": "Organization membership not found, or user unauthorized to perform action", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/vars-envelope" + "$ref": "#/components/schemas/errors" } } } @@ -7472,41 +7484,157 @@ } } }, - "/varsets/{varset_id}/relationships/vars/{id}": { + "/organizations/{organization_name}/recoverable-items": { "get": { - "operationId": "showVarsetVar", - "summary": "Show a Variable in a Variable Set", - "description": "Show details of a variable in a variable set.", + "operationId": "listRecoverableItems", + "summary": "List Recoverable Items", + "description": "List all recoverable items (soft-deleted resources) in an organization.", "tags": [ - "varsets" + "recoverable-items" ], "parameters": [ { "in": "path", - "name": "varset_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the variable set." + "description": "The name of the organization." }, { - "in": "path", - "name": "id", + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "recoverable", + "deleted_by", + "project" + ] + } + }, + "required": false, + "description": "Optionally side-load relationships of the specified name. Multiple values can be comma-separated." + }, + { + "in": "query", + "name": "filter[search]", "schema": { "type": "string" }, - "required": true, - "description": "The ID of the variable." + "required": false, + "description": "Search term to filter recoverable items by name or project name." + }, + { + "in": "query", + "name": "filter[having_managed_resources]", + "schema": { + "type": "boolean" + }, + "required": false, + "description": "If true, filter recoverable items that have managed resources. False has no effect." + }, + { + "in": "query", + "name": "filter[expires_after]", + "schema": { + "type": "string", + "format": "date-time" + }, + "required": false, + "description": "Filter recoverable items that expire after the specified date and time." + }, + { + "in": "query", + "name": "filter[recoverable_type]", + "schema": { + "type": "string", + "enum": [ + "workspaces", + "stacks" + ] + }, + "required": false, + "description": "Filter recoverable items by recoverable type." + }, + { + "in": "query", + "name": "sort", + "schema": { + "type": "string", + "enum": [ + "expires_at", + "-expires_at", + "recoverable_name", + "-recoverable_name", + "unmanaged_resources", + "-unmanaged_resources" + ] + }, + "required": false, + "description": "Sort recoverable items by specified field. Prefix with '-' for descending order." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[recoverable-items]", + "description": "Return only the specified fields for recoverable-items resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Variable details", + "description": "List of recoverable items", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/vars-envelope" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/recoverable-items" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } + } + } + } + }, + "404": { + "description": "Organization not found or not entitled to this feature", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } @@ -7522,24 +7650,17 @@ } } } - }, - "patch": { - "operationId": "updateVarsetVar", - "summary": "Update a Variable in a Variable Set", - "description": "Update attributes of an existing variable in a variable set.", + } + }, + "/recoverable-items/{id}/actions/recover": { + "post": { + "operationId": "recoverRecoverableItem", + "summary": "Recover a Recoverable Item", + "description": "Recover a soft-deleted resource by restoring it from a recoverable item. The resource must not be expired, permanently deleted, or already recovered.", "tags": [ - "varsets" + "recoverable-items" ], "parameters": [ - { - "in": "path", - "name": "varset_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the variable set." - }, { "in": "path", "name": "id", @@ -7547,26 +7668,69 @@ "type": "string" }, "required": true, - "description": "The ID of the variable to update." + "description": "ID of the recoverable item." } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/vars-envelope" - } - } - } - }, "responses": { - "200": { - "description": "Variable updated", + "204": { + "description": "Successfully recovered the item. No content returned." + }, + "422": { + "description": "Recoverable item cannot be recovered due to its current state", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/vars-envelope" + "$ref": "#/components/schemas/errors" + }, + "examples": { + "expired": { + "summary": "Item has expired", + "value": { + "errors": [ + { + "status": "422", + "title": "unprocessable content", + "detail": "Recoverable item has expired and is no longer eligible for recovery" + } + ] + } + }, + "permanently_deleted": { + "summary": "Item has been permanently deleted", + "value": { + "errors": [ + { + "status": "422", + "title": "unprocessable content", + "detail": "Recoverable item has been manually permanently deleted, and is no longer eligible for recovery" + } + ] + } + }, + "already_recovered": { + "summary": "Item has already been recovered", + "value": { + "errors": [ + { + "status": "422", + "title": "unprocessable content", + "detail": "Recoverable item has already been recovered" + } + ] + } + }, + "recovery_failed": { + "summary": "Recovery operation failed", + "value": { + "errors": [ + { + "status": "422", + "title": "unprocessable content", + "detail": "Recovery failed" + } + ] + } + } } } } @@ -7582,24 +7746,17 @@ } } } - }, - "delete": { - "operationId": "deleteVarsetVar", - "summary": "Delete a Variable from a Variable Set", - "description": "Delete a variable from a variable set.", + } + }, + "/recoverable-items/{id}/actions/permanently-delete": { + "post": { + "operationId": "permanentlyDeleteRecoverableItem", + "summary": "Permanently Delete a Recoverable Item", + "description": "Permanently delete a recoverable item, making the soft-deleted resource unrecoverable. The item must not be expired, already permanently deleted, or recovered.", "tags": [ - "varsets" + "recoverable-items" ], "parameters": [ - { - "in": "path", - "name": "varset_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the variable set." - }, { "in": "path", "name": "id", @@ -7607,12 +7764,60 @@ "type": "string" }, "required": true, - "description": "The ID of the variable to delete." + "description": "ID of the recoverable item." } ], "responses": { "204": { - "description": "Variable deleted successfully" + "description": "Successfully permanently deleted the item. No content returned." + }, + "422": { + "description": "Recoverable item cannot be permanently deleted due to its current state", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + }, + "examples": { + "already_expired": { + "summary": "Item has already expired", + "value": { + "errors": [ + { + "status": "422", + "title": "unprocessable content", + "detail": "Recoverable item has already expired and been permanently deleted" + } + ] + } + }, + "already_permanently_deleted": { + "summary": "Item has already been permanently deleted", + "value": { + "errors": [ + { + "status": "422", + "title": "unprocessable content", + "detail": "Recoverable item has already been manually permanently deleted" + } + ] + } + }, + "already_recovered": { + "summary": "Item has been recovered", + "value": { + "errors": [ + { + "status": "422", + "title": "unprocessable content", + "detail": "Recoverable item has been recovered, and is no longer eligible for permanent deletion" + } + ] + } + } + } + } + } }, "default": { "description": "Error details", @@ -7627,98 +7832,50 @@ } } }, - "/workspaces/{workspace_id}/varsets/{varset_id}/relationships/vars/{id}": { + "/organizations/{organization_name}/relationships/module-producers": { + "x-vis": [ + "tfe" + ], "get": { - "operationId": "showWorkspaceVarsetVar", - "summary": "Show a Variable in a Variable Set (Workspace Context)", - "description": "Show details of a variable in a variable set, with overwrite context from the specified workspace.", + "operationId": "listModuleProducers", + "summary": "List Module Producers", + "description": "List organizations that are configured to share modules with an organization.\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "varsets" + "organizations" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace providing overwrite context." + "description": "The name of the organization's module producers to view." }, { - "in": "path", - "name": "varset_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the variable set." + "$ref": "#/components/parameters/page_number" }, { - "in": "path", - "name": "id", + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[organizations]", + "description": "Return only the specified fields for organizations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the variable." + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Variable details with workspace overwrite context", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/vars-envelope" - } - } - } - }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - } - }, - "/workspaces/{workspace_id}/varsets/{varset_id}/relationships/vars": { - "get": { - "operationId": "listWorkspaceVarsetVars", - "summary": "List Variables in a Variable Set (Workspace Context)", - "description": "List all variables in a variable set, with overwrite context from the specified workspace.", - "tags": [ - "varsets" - ], - "parameters": [ - { - "in": "path", - "name": "workspace_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the workspace providing overwrite context." - }, - { - "in": "path", - "name": "varset_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the variable set." - } - ], - "responses": { - "200": { - "description": "List of variables in the variable set with workspace overwrite context", + "description": "Module producers list", "content": { "application/vnd.api+json": { "schema": { @@ -7730,7 +7887,15 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/vars" + "$ref": "#/components/schemas/organizations" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } } }, "links": { @@ -7754,128 +7919,65 @@ } } }, - "/varsets/{varset_id}/relationships/projects": { - "post": { - "operationId": "applyVarsetToProjects", - "summary": "Apply Variable Set to Projects", - "description": "Apply a variable set to one or more projects. When you apply a variable set to a project, all the workspaces in that project will have the variable set applied to them.", + "/organizations/{organization_name}/relationships/data-retention-policy": { + "x-vis": [ + "tfe" + ], + "get": { + "operationId": "getDataRetentionPolicy", + "summary": "Get Data Retention Policy", + "description": "Show the data retention policy set explicitly on the organization.\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "varsets" + "organizations", + "data-retention-policies" ], "parameters": [ { "in": "path", - "name": "varset_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the variable set." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/projects-identifier-array-document" - } - } - } - }, - "responses": { - "204": { - "description": "Variable set successfully applied to the requested projects." + "description": "The name of the organization to show the data retention policy for." }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } + { + "in": "query", + "name": "fields[data-retention-policy-delete-olders]", + "description": "Return only the specified fields for data-retention-policy-delete-olders resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } - } - } - }, - "delete": { - "operationId": "removeVarsetFromProjects", - "summary": "Remove Variable Set from Projects", - "description": "Remove a variable set from one or more projects.", - "tags": [ - "varsets" - ], - "parameters": [ + }, { - "in": "path", - "name": "varset_id", + "in": "query", + "name": "fields[data-retention-policy-dont-deletes]", + "description": "Return only the specified fields for data-retention-policy-dont-deletes resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the variable set." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/projects-identifier-array-document" + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "204": { - "description": "Variable set successfully removed from the requested projects." - }, - "default": { - "description": "Error details", + "200": { + "description": "Data retention policy details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/data-retention-policy-envelope" } } } - } - } - } - }, - "/varsets/{varset_id}/relationships/workspaces": { - "post": { - "operationId": "applyVarsetToWorkspaces", - "summary": "Apply Variable Set to Workspaces", - "description": "Apply a variable set to one or more workspaces.", - "tags": [ - "varsets" - ], - "parameters": [ - { - "in": "path", - "name": "varset_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the variable set." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-identifier-array-document" - } - } - } - }, - "responses": { - "204": { - "description": "Variable set successfully applied to the requested workspaces." }, "default": { "description": "Error details", @@ -7889,22 +7991,23 @@ } } }, - "delete": { - "operationId": "removeVarsetFromWorkspaces", - "summary": "Remove Variable Set from Workspaces", - "description": "Remove a variable set from one or more workspaces.", + "post": { "tags": [ - "varsets" + "organizations", + "data-retention-policies" ], + "operationId": "createOrUpdateDataRetentionPolicy", + "summary": "Create or Update Data Retention Policy", + "description": "Create a data retention policy for an organization or update the existing policy.\n\nThis operation is only available in Terraform Enterprise.", "parameters": [ { "in": "path", - "name": "varset_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the variable set." + "description": "The name of the organization to update the data retention policy for." } ], "requestBody": { @@ -7912,14 +8015,14 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspaces-identifier-array-document" + "$ref": "#/components/schemas/data-retention-policy-envelope" } } } }, "responses": { "204": { - "description": "Variable set successfully removed from the requested workspaces." + "description": "Data retention policy created or updated" }, "default": { "description": "Error details", @@ -7932,25 +8035,24 @@ } } } - } - }, - "/varsets/{varset_id}/relationships/stacks": { - "post": { - "operationId": "applyVarsetToStacks", - "summary": "Apply Variable Set to Stacks", - "description": "Apply a variable set to one or more Stacks. Only available in HCP Terraform.", + }, + "patch": { "tags": [ - "varsets" + "organizations", + "data-retention-policies" ], + "operationId": "createOrUpdateDataRetentionPolicy", + "summary": "Create or Update Data Retention Policy", + "description": "Create a data retention policy for an organization or update the existing policy.\n\nThis operation is only available in Terraform Enterprise.", "parameters": [ { "in": "path", - "name": "varset_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the variable set." + "description": "The name of the organization to update the data retention policy for." } ], "requestBody": { @@ -7958,14 +8060,14 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/jsonapi-identifier-array-document" + "$ref": "#/components/schemas/data-retention-policy-envelope" } } } }, "responses": { "204": { - "description": "Variable set successfully applied to the requested Stacks." + "description": "Data retention policy created or updated" }, "default": { "description": "Error details", @@ -7980,36 +8082,27 @@ } }, "delete": { - "operationId": "removeVarsetFromStacks", - "summary": "Remove Variable Set from Stacks", - "description": "Remove a variable set from one or more Stacks.", + "operationId": "deleteDataRetentionPolicy", + "summary": "Delete Data Retention Policy", + "description": "Remove the data retention policy explicitly set on an organization.\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "varsets" + "organizations", + "data-retention-policies" ], "parameters": [ { "in": "path", - "name": "varset_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the variable set." + "description": "The name of the organization to remove the data retention policy for." } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/jsonapi-identifier-array-document" - } - } - } - }, "responses": { "204": { - "description": "Variable set successfully removed from the requested Stacks." + "description": "Data retention policy deleted" }, "default": { "description": "Error details", @@ -8024,58 +8117,83 @@ } } }, - "/projects/{project_id}/varsets": { + "/organizations/{organization_name}/projects": { "get": { - "operationId": "listProjectVarsets", - "summary": "List Variable Sets for a Project", - "description": "List all variable sets for a project. This includes global variable sets from the project's organization.", + "operationId": "listProjects", + "summary": "List Projects", + "description": "List all projects in an organization.", "tags": [ - "varsets" + "projects" ], "parameters": [ { "in": "path", - "name": "project_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the project." + "description": "The name of the organization." }, { "in": "query", - "name": "q", + "name": "filter[names]", "schema": { "type": "string" }, "required": false, - "description": "A search query string. You can search for a variable set using its name." + "description": "Comma-separated list of project names to filter by." }, { "in": "query", - "name": "scope", + "name": "filter[permissions][create-workspace]", "schema": { - "type": "string", - "enum": [ - "applied", - "shared", - "owned", - "all" - ] + "type": "boolean" }, "required": false, - "description": "Filter variable sets by scope relative to the project." + "description": "If present, returns a list of projects that the authenticated user can create workspaces in." + }, + { + "in": "query", + "name": "filter[permissions][update]", + "schema": { + "type": "boolean" + }, + "required": false, + "description": "If present, returns a list of projects that the authenticated user can update." + }, + { + "in": "query", + "name": "sort", + "schema": { + "type": "string" + }, + "required": false, + "description": "Optional. Allows sorting the organization's projects by \"name\". Prepending a hyphen to the sort parameter reverses the order. For example, \"-name\" sorts by name in reverse alphabetical order. If omitted, the default sort order is arbitrary but stable.\n" }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[projects]", + "description": "Return only the specified fields for projects resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of variable sets for the project", + "description": "List of projects", "content": { "application/vnd.api+json": { "schema": { @@ -8084,14 +8202,19 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/varsets" + "$ref": "#/components/schemas/projects" } }, "links": { "$ref": "#/components/schemas/self-with-pagination" }, "meta": { - "$ref": "#/components/schemas/pagination" + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } } } } @@ -8109,63 +8232,42 @@ } } } - } - }, - "/workspaces/{workspace_id}/varsets": { - "get": { - "operationId": "listWorkspaceVarsets", - "summary": "List Variable Sets for a Workspace", - "description": "List all variable sets for a workspace. This includes global variable sets from the workspace's organization and variable sets attached to the project this workspace is contained within.", + }, + "post": { + "operationId": "createProject", + "summary": "Create a Project", + "description": "Create a new project in an organization.", "tags": [ - "varsets" + "projects" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace." - }, - { - "in": "query", - "name": "q", - "schema": { - "type": "string" - }, - "required": false, - "description": "A search query string. You can search for a variable set using its name." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "description": "The name of the organization." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/projects-envelope" + } + } + } + }, "responses": { - "200": { - "description": "List of variable sets for the workspace", + "201": { + "description": "Project created", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/varsets" - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "meta": { - "$ref": "#/components/schemas/pagination" - } - } + "$ref": "#/components/schemas/projects-envelope" } } } @@ -8183,86 +8285,53 @@ } } }, - "/workspaces/{workspace_id}/resources": { + "/organizations/{organization_name}/token-ttl-policies": { "get": { - "operationId": "listWorkspaceResources", - "summary": "List Workspace Resources", - "description": "List all resources in a workspace's current state.", + "operationId": "listTokenTtlPolicies", + "summary": "List Token TTL Policies", + "description": "List all token TTL policies for an organization.", "tags": [ - "workspaces" + "token-ttl-policies" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace to retrieve resources from." - }, - { - "in": "query", - "name": "q", - "schema": { - "type": "string" - }, - "required": false, - "description": "Optional search query to filter resources by address pattern." + "description": "The name of the organization to list token TTL policies for" }, { "in": "query", - "name": "sort", + "name": "fields[organization-token-ttl-policies]", + "description": "Return only the specified fields for organization-token-ttl-policies resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string", - "enum": [ - "name:asc", - "name:desc", - "nameIndex:asc", - "nameIndex:desc", - "provider:asc", - "provider:desc", - "providerType:asc", - "providerType:desc", - "module:asc", - "module:desc", - "updatedAt:asc", - "updatedAt:desc" - ] - }, - "required": false, - "description": "Optional sort parameter. Allows sorting workspace resources by name, nameIndex, provider, providerType, module, or updatedAt. Format is \"field:order\" where order is \"asc\" or \"desc\".\n" - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of workspace resources", + "description": "Token TTL policies list", "content": { "application/vnd.api+json": { "schema": { "type": "object", + "required": [ + "data" + ], "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/workspace-resource" - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } + "$ref": "#/components/schemas/token-ttl-policy" } } } @@ -8270,8 +8339,18 @@ } } }, + "403": { + "description": "User is not part of the owners team of the organization", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, "404": { - "description": "Workspace not found or user unauthorized to perform action", + "description": "Organization does not exist or user does not belong to the organization", "content": { "application/vnd.api+json": { "schema": { @@ -8291,106 +8370,81 @@ } } } - } - }, - "/workspaces/{workspace_id}": { - "get": { - "operationId": "getWorkspace", - "summary": "Get a Workspace", - "description": "Get details of a specific workspace by its external ID.", + }, + "patch": { + "operationId": "upsertTokenTtlPolicies", + "summary": "Create or Update Token TTL Policies", + "description": "Create or Update token TTL policies for an organization.", "tags": [ - "workspaces" + "token-ttl-policies" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." - }, - { - "in": "query", - "name": "include", - "style": "form", - "explode": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "agent_pool", - "current_assessment_result", - "current_configuration_version", - "current_configuration_version.ingress_attributes", - "current_run", - "current_run.apply", - "current_run.plan", - "current_run.configuration_version", - "current_run.configuration_version.ingress_attributes", - "current_state_version", - "current_state_version.resources_processed", - "latest_run", - "latest_run.plan", - "latest_run.configuration_version", - "latest_run.configuration_version.ingress_attributes", - "locked_by", - "no_code_module_version", - "no_code_module_version.no_code_module", - "no_code_module_version.no_code_module.latest_version", - "organization", - "outputs", - "project", - "readme", - "vars", - "effective_tag_bindings" - ] - } - }, - "required": false, - "description": "Optionally side-load relationships.\n" + "description": "The name of the organization" } ], - "responses": { - "200": { - "description": "Workspace details", - "content": { - "application/vnd.api+json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/workspaces-envelope" - }, - { - "type": "object", - "properties": { - "included": { - "type": "array", - "items": { - "type": "object" + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/token-ttl-policies-envelope" + }, + "examples": { + "upsert": { + "summary": "Upsert token TTL policies", + "value": { + "data": { + "type": "organization-token-ttl-policies", + "attributes": { + "token-ttl-policies": [ + { + "token-type": "organization", + "max-ttl-ms": 5184000000 + }, + { + "token-type": "user", + "max-ttl-ms": 189216000000 } - } + ] } } - ] + } } } } - }, - "404": { - "description": "Workspace not found or user unauthorized to view workspace", + } + }, + "responses": { + "200": { + "description": "Successfully created or updated token TTL policies", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/token-ttl-policy" + } + } + } } } } }, - "default": { - "description": "Error details", + "403": { + "description": "User is not part of the owners team of the organization", "content": { "application/vnd.api+json": { "schema": { @@ -8398,50 +8452,9 @@ } } } - } - } - }, - "patch": { - "operationId": "updateWorkspace", - "summary": "Update a Workspace", - "description": "Update settings of an existing workspace.", - "tags": [ - "workspaces" - ], - "parameters": [ - { - "in": "path", - "name": "workspace_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The external ID of the workspace." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-envelope" - } - } - } - }, - "responses": { - "200": { - "description": "Workspace updated", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-envelope" - } - } - } }, "404": { - "description": "Workspace not found or user unauthorized to view workspace", + "description": "Organization does not exist or user does not belong to the organization", "content": { "application/vnd.api+json": { "schema": { @@ -8451,7 +8464,7 @@ } }, "422": { - "description": "Malformed request body", + "description": "Unable to create token TTL policy due to validation errors", "content": { "application/vnd.api+json": { "schema": { @@ -8471,35 +8484,47 @@ } } } - }, - "delete": { - "operationId": "deleteWorkspace", - "summary": "Delete a Workspace", - "description": "Delete a workspace. This permanently removes the workspace and all its associated data including runs, state versions, and configuration versions.\n", + } + }, + "/projects/{project_id}": { + "get": { + "operationId": "getProject", + "summary": "Get Project", + "description": "Get details of a specific project.", "tags": [ - "workspaces" + "projects" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "project_id", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The ID of the project." + }, + { + "in": "query", + "name": "fields[projects]", + "description": "Return only the specified fields for projects resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { - "204": { - "description": "Workspace deleted" - }, - "404": { - "description": "Workspace not found or user unauthorized to delete workspace", + "200": { + "description": "Project details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/projects-envelope" } } } @@ -8515,60 +8540,48 @@ } } } - } - }, - "/workspaces/{workspace_id}/actions/lock": { - "post": { - "operationId": "lockWorkspace", - "summary": "Lock a Workspace", - "description": "Lock a workspace. A workspace can only be locked by one entity at a time. Returns a conflict error if the workspace is already locked.\n", + }, + "patch": { + "operationId": "updateProject", + "summary": "Update Project", + "description": "Update an existing project.", "tags": [ - "workspaces" + "projects" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "project_id", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The ID of the project." } ], "requestBody": { - "required": false, + "required": true, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/action-reason" + "$ref": "#/components/schemas/projects-envelope" } } } }, "responses": { "200": { - "description": "Workspace locked successfully", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-envelope" - } - } - } - }, - "404": { - "description": "Workspace not found or user unauthorized to lock workspace", + "description": "Project updated", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/projects-envelope" } } } }, - "409": { - "description": "Workspace is already locked", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -8576,6 +8589,30 @@ } } } + } + } + }, + "delete": { + "operationId": "deleteProject", + "summary": "Delete Project", + "description": "Delete a project.", + "tags": [ + "projects" + ], + "parameters": [ + { + "in": "path", + "name": "project_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the project." + } + ], + "responses": { + "204": { + "description": "Project deleted" }, "default": { "description": "Error details", @@ -8590,55 +8627,38 @@ } } }, - "/workspaces/{workspace_id}/actions/unlock": { + "/projects/{project_id}/relationships/workspaces": { "post": { - "operationId": "unlockWorkspace", - "summary": "Unlock a Workspace", - "description": "Unlock a workspace. Users can unlock a workspace if they locked it. Unlocking a workspace locked by another user requires force-unlock. Returns a conflict error if the workspace is not locked by the requesting user.\n", + "operationId": "moveWorkspacesIntoProject", + "summary": "Move Workspaces into a Project", + "description": "Move one or more workspaces into a project. You must have permission to move workspaces on the destination project as well as any source project(s). If you are not authorized to move any of the workspaces in the request, or if any workspaces in the request are not found, then no workspaces will be moved.\n", "tags": [ - "workspaces" + "projects" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "project_id", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The ID of the destination project." } ], - "responses": { - "200": { - "description": "Workspace unlocked successfully", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-envelope" - } - } - } - }, - "404": { - "description": "Workspace not found or user unauthorized to unlock workspace", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "409": { - "description": "Workspace is locked by another user", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspaces-identifier-array-document" } } + } + }, + "responses": { + "204": { + "description": "Successfully moved workspace(s)." }, "default": { "description": "Error details", @@ -8653,38 +8673,51 @@ } } }, - "/workspaces/{workspace_id}/actions/force-unlock": { - "post": { - "operationId": "forceUnlockWorkspace", - "summary": "Force Unlock a Workspace", - "description": "Forcibly unlock a workspace regardless of who locked it. This action requires elevated permissions and should be used with caution.\n", + "/projects/{project_id}/relationships/tag-bindings": { + "get": { + "operationId": "listProjectTagBindings", + "summary": "List Project Tag Bindings", + "description": "List all tags associated with a project.", "tags": [ - "workspaces" + "projects" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "project_id", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The ID of the project." + }, + { + "in": "query", + "name": "fields[tag-bindings]", + "description": "Return only the specified fields for tag-bindings resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Workspace force-unlocked successfully", + "description": "List of tags", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspaces-envelope" + "$ref": "#/components/schemas/tag-bindings-collection" } } } }, "404": { - "description": "Workspace not found or user unauthorized to force-unlock workspace", + "description": "Project not found or user unauthorized to view project", "content": { "application/vnd.api+json": { "schema": { @@ -8704,43 +8737,41 @@ } } } - } - }, - "/workspaces/{workspace_id}/actions/safe-delete": { + }, "post": { - "operationId": "safeDeleteWorkspace", - "summary": "Safe Delete a Workspace", - "description": "Delete a workspace only if it has no resources under management. Returns a conflict error if the workspace has managed resources or is locked.\n", + "operationId": "addProjectTagBindings", + "summary": "Add Tag Bindings to a Project", + "description": "Add one or more tag bindings to a project.", "tags": [ - "workspaces" + "projects" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "project_id", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The ID of the project." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/tag-bindings-collection" + } + } + } + }, "responses": { "204": { - "description": "Workspace deleted" + "description": "Tags added" }, "404": { - "description": "Workspace not found or user unauthorized to delete workspace", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "409": { - "description": "Workspace has managed resources or is locked and cannot be safely deleted", + "description": "Project not found or user unauthorized to manage tags", "content": { "application/vnd.api+json": { "schema": { @@ -8760,50 +8791,41 @@ } } } - } - }, - "/workspaces/{workspace_id}/actions/assess": { - "post": { - "operationId": "assessWorkspace", - "summary": "Trigger a Workspace Assessment", - "description": "Trigger a drift detection assessment for a workspace. The workspace must have assessments enabled and not have a pending assessment already running.\n", + }, + "patch": { + "operationId": "replaceProjectTagBindings", + "summary": "Replace Tag Bindings in a Project", + "description": "Replace all tag bindings in a project.", "tags": [ - "workspaces" + "projects" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "project_id", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The ID of the project." } ], - "responses": { - "200": { - "description": "Assessment triggered successfully", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-envelope" - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/tag-bindings-collection" } } + } + }, + "responses": { + "204": { + "description": "Tag bindings replaced" }, "404": { - "description": "Workspace not found or user unauthorized to manage assessments", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "409": { - "description": "Assessment cannot be triggered in the current workspace state", + "description": "Project not found or user unauthorized to manage tag bindings", "content": { "application/vnd.api+json": { "schema": { @@ -8825,58 +8847,51 @@ } } }, - "/workspaces/{workspace_id}/relationships/remote-state-consumers": { + "/projects/{project_id}/effective-tag-bindings": { "get": { - "operationId": "listWorkspaceRemoteStateConsumers", - "summary": "List Remote State Consumers", - "description": "List the workspaces that are allowed to access this workspace's state. When global-remote-state is enabled on the workspace, this lists all workspaces in the organization; otherwise, it lists only the explicitly allowed consumers.\n", + "operationId": "listProjectEffectiveTagBindings", + "summary": "List Project Effective Tag Bindings", + "description": "List all effective (inherited and direct) tag bindings for a project.", "tags": [ - "workspaces" + "projects" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "project_id", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The ID of the project." }, { "in": "query", - "name": "show_only_configured", + "name": "fields[effective-tag-bindings]", + "description": "Return only the specified fields for effective-tag-bindings resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "boolean" - }, - "required": false, - "description": "When true, return only explicitly configured remote state consumers even if global-remote-state is enabled.\n" + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of workspaces that can consume this workspace's remote state", + "description": "List of effective tag bindings", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/workspaces" - } - } - } + "$ref": "#/components/schemas/effective-tag-bindings-envelope-many" } } } }, "404": { - "description": "Workspace not found or user unauthorized to view workspace", + "description": "Project not found or user unauthorized to view project", "content": { "application/vnd.api+json": { "schema": { @@ -8896,95 +8911,264 @@ } } } - }, - "post": { - "operationId": "addWorkspaceRemoteStateConsumers", - "summary": "Add Remote State Consumers", - "description": "Add workspaces to the list of allowed remote state consumers.", + } + }, + "/organizations/{organization_name}/workspaces": { + "get": { + "operationId": "listWorkspaces", + "summary": "List Workspaces", + "description": "List all workspaces in an organization.", "tags": [ "workspaces" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-identifier-array-document" - } - } - } - }, - "responses": { - "204": { - "description": "Remote state consumers updated" - }, - "404": { - "description": "Workspace not found or user unauthorized to manage remote state consumers", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } + "description": "The name of the organization." }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - }, - "patch": { - "operationId": "replaceWorkspaceRemoteStateConsumers", - "summary": "Replace Remote State Consumers", - "description": "Replace the entire list of allowed remote state consumers with the provided list.", - "tags": [ - "workspaces" - ], - "parameters": [ { - "in": "path", - "name": "workspace_id", + "in": "query", + "name": "search[name]", "schema": { "type": "string" }, - "required": true, - "description": "The external ID of the workspace." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-identifier-array-document" + "required": false, + "description": "Partial name to filter workspaces by name." + }, + { + "in": "query", + "name": "search[wildcard-name]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Wildcard name filter for workspaces." + }, + { + "in": "query", + "name": "filter[current-run][status]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Comma-separated list of run statuses to filter workspaces by." + }, + { + "in": "query", + "name": "filter[project][id]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Filter workspaces by project external ID." + }, + { + "in": "query", + "name": "search[tags]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Comma-separated list of legacy tag names that workspaces must have." + }, + { + "in": "query", + "name": "search[exclude-tags]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Comma-separated list of legacy tag names that workspaces must not have." + }, + { + "in": "query", + "name": "filter[tagged]", + "schema": { + "type": "array", + "items": { + "type": "object", + "required": [ + "key" + ], + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "required": false, + "style": "deepObject", + "explode": true, + "description": "Filter workspaces by effective tag bindings. Example usage is `filter[tagged][0][key]=env&filter[tagged][0][value]=prod`." + }, + { + "in": "query", + "name": "filter[tag-union]", + "schema": { + "type": "boolean", + "default": false + }, + "required": false, + "description": "Use OR logic for filter[tagged] across effective tag bindings when any provided tag key/value pair may match. By default, filtering uses intersection semantics, so all provided tags must match." + }, + { + "in": "query", + "name": "filter[tag-value-default-null]", + "schema": { + "type": "boolean", + "default": false + }, + "required": false, + "description": "Treat omitted filter[tagged][value] fields as NULL for effective tag bindings." + }, + { + "in": "query", + "name": "sort", + "schema": { + "type": "string" + }, + "required": false, + "description": "Sort workspaces. Valid values include name, current-run.created-at. Prefix with a hyphen (e.g., -name) to sort in descending order.\n" + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "agent_pool", + "current_assessment_result", + "current_configuration_version", + "current_configuration_version.ingress_attributes", + "current_run", + "current_run.apply", + "current_run.plan", + "current_run.configuration_version", + "current_run.configuration_version.ingress_attributes", + "current_state_version", + "current_state_version.resources_processed", + "latest_run", + "latest_run.plan", + "latest_run.configuration_version", + "latest_run.configuration_version.ingress_attributes", + "locked_by", + "no_code_module_version", + "no_code_module_version.no_code_module", + "no_code_module_version.no_code_module.latest_version", + "organization", + "outputs", + "project", + "readme", + "vars", + "effective_tag_bindings" + ] + } + }, + "required": false, + "description": "Comma-separated list of relationship names to side-load.\n" + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[workspaces]", + "description": "Return only the specified fields for workspaces resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "204": { - "description": "Remote state consumers replaced" + "200": { + "description": "List of workspaces", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/workspaces" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + }, + "status-counts": { + "type": "object", + "additionalProperties": { + "type": "integer" + } + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "included": { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/no-code-module-versions" + }, + { + "$ref": "#/components/schemas/no-code-modules" + }, + { + "$ref": "#/components/schemas/workspace-readme" + }, + { + "$ref": "#/components/schemas/workspace-outputs" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "no-code-module-versions": "#/components/schemas/no-code-module-versions", + "no-code-modules": "#/components/schemas/no-code-modules", + "workspace-readme": "#/components/schemas/workspace-readme", + "workspace-outputs": "#/components/schemas/workspace-outputs" + } + } + } + } + } + } + } + } }, "404": { - "description": "Workspace not found or user unauthorized to manage remote state consumers", + "description": "Organization not found or user unauthorized to view workspaces", "content": { "application/vnd.api+json": { "schema": { @@ -9005,22 +9189,22 @@ } } }, - "delete": { - "operationId": "removeWorkspaceRemoteStateConsumers", - "summary": "Remove Remote State Consumers", - "description": "Remove workspaces from the list of allowed remote state consumers.", + "post": { + "operationId": "createWorkspace", + "summary": "Create a Workspace", + "description": "Create a new workspace in an organization.", "tags": [ "workspaces" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The name of the organization." } ], "requestBody": { @@ -9028,17 +9212,34 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspaces-identifier-array-document" + "$ref": "#/components/schemas/workspaces-envelope" } } } }, "responses": { - "204": { - "description": "Remote state consumers removed" + "201": { + "description": "Workspace created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspaces-envelope" + } + } + } }, "404": { - "description": "Workspace not found or user unauthorized to manage remote state consumers", + "description": "Organization not found or user unauthorized to create workspaces", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Malformed request body or validation error", "content": { "application/vnd.api+json": { "schema": { @@ -9060,48 +9261,138 @@ } } }, - "/workspaces/{workspace_id}/relationships/ssh-key": { - "patch": { - "operationId": "assignWorkspaceSshKey", - "summary": "Assign an SSH Key to a Workspace", - "description": "Assign an SSH key to a workspace for use when cloning VCS repositories. Pass null for the id to unassign the current SSH key.\n", + "/organizations/{organization_name}/workspaces/{workspace_name}": { + "get": { + "operationId": "getWorkspaceByName", + "summary": "Get a Workspace by Name", + "description": "Get details of a workspace by organization name and workspace name.", "tags": [ "workspaces" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/ssh-keys-nullable-identifier-document" + "description": "The name of the organization." + }, + { + "in": "path", + "name": "workspace_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the workspace." + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "agent_pool", + "current_assessment_result", + "current_configuration_version", + "current_configuration_version.ingress_attributes", + "current_run", + "current_run.apply", + "current_run.plan", + "current_run.configuration_version", + "current_run.configuration_version.ingress_attributes", + "current_state_version", + "current_state_version.resources_processed", + "latest_run", + "latest_run.plan", + "latest_run.configuration_version", + "latest_run.configuration_version.ingress_attributes", + "locked_by", + "no_code_module_version", + "no_code_module_version.no_code_module", + "no_code_module_version.no_code_module.latest_version", + "organization", + "outputs", + "project", + "readme", + "vars", + "effective_tag_bindings" + ] + } + }, + "required": false, + "description": "Optionally side-load relationships.\n" + }, + { + "in": "query", + "name": "fields[workspaces]", + "description": "Return only the specified fields for workspaces resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { "200": { - "description": "SSH key assignment updated", + "description": "Workspace details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspaces-envelope" + "allOf": [ + { + "$ref": "#/components/schemas/workspaces-envelope" + }, + { + "type": "object", + "properties": { + "included": { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/no-code-module-versions" + }, + { + "$ref": "#/components/schemas/no-code-modules" + }, + { + "$ref": "#/components/schemas/workspace-readme" + }, + { + "$ref": "#/components/schemas/workspace-outputs" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "no-code-module-versions": "#/components/schemas/no-code-module-versions", + "no-code-modules": "#/components/schemas/no-code-modules", + "workspace-readme": "#/components/schemas/workspace-readme", + "workspace-outputs": "#/components/schemas/workspace-outputs" + } + } + } + } + } + } + ] } } } }, "404": { - "description": "Workspace or SSH key not found, or user unauthorized", + "description": "Workspace not found or user unauthorized to view workspace", "content": { "application/vnd.api+json": { "schema": { @@ -9121,25 +9412,32 @@ } } } - } - }, - "/workspaces/{workspace_id}/relationships/vars": { + }, "patch": { - "operationId": "updateWorkspaceVars", - "summary": "Update Workspace Variables", - "description": "Batch update workspace variables. Provide an array of variable objects to update. Variables are matched by their external ID.\n", + "operationId": "updateWorkspaceByName", + "summary": "Update a Workspace by Name", + "description": "Update settings of an existing workspace by organization name and workspace name.", "tags": [ "workspaces" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The name of the organization." + }, + { + "in": "path", + "name": "workspace_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the workspace." } ], "requestBody": { @@ -9147,27 +9445,24 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspace-vars-update-document" + "$ref": "#/components/schemas/workspaces-envelope" } } } }, "responses": { - "204": { - "description": "Variables updated" - }, - "400": { - "description": "Too many variables or invalid request", + "200": { + "description": "Workspace updated", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/workspaces-envelope" } } } }, "404": { - "description": "Workspace not found or user unauthorized to update variables", + "description": "Workspace not found or user unauthorized to view workspace", "content": { "application/vnd.api+json": { "schema": { @@ -9177,7 +9472,7 @@ } }, "422": { - "description": "Validation error on one or more variables", + "description": "Malformed request body", "content": { "application/vnd.api+json": { "schema": { @@ -9197,40 +9492,40 @@ } } } - } - }, - "/workspaces/{workspace_id}/relationships/tag-bindings": { - "get": { - "operationId": "listWorkspaceTagBindings", - "summary": "List Workspace Tags", - "description": "List all tags associated with a workspace.", + }, + "delete": { + "operationId": "deleteWorkspaceByName", + "summary": "Delete a Workspace by Name", + "description": "Delete a workspace by organization name and workspace name. This permanently removes the workspace and all its associated data.\n", "tags": [ "workspaces" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace." + "description": "The name of the organization." + }, + { + "in": "path", + "name": "workspace_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the workspace." } ], "responses": { - "200": { - "description": "List of tags", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/tag-bindings-collection" - } - } - } + "204": { + "description": "Workspace deleted" }, "404": { - "description": "Workspace not found or user unauthorized to view workspace", + "description": "Workspace not found or user unauthorized to delete workspace", "content": { "application/vnd.api+json": { "schema": { @@ -9250,41 +9545,52 @@ } } } - }, + } + }, + "/organizations/{organization_name}/workspaces/{workspace_name}/actions/safe-delete": { "post": { - "operationId": "addWorkspaceTagBindings", - "summary": "Add Tag Bindings to a Workspace", - "description": "Add one or more tag bindings to a workspace.", + "operationId": "safeDeleteWorkspaceByName", + "summary": "Safe Delete a Workspace by Name", + "description": "Delete a workspace by organization name and workspace name only if it has no resources under management. Returns a conflict error if the workspace has managed resources or is locked.\n", "tags": [ "workspaces" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The name of the organization." + }, + { + "in": "path", + "name": "workspace_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the workspace." } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/tag-bindings-collection" - } - } - } - }, "responses": { "204": { - "description": "Tags added" + "description": "Workspace deleted" }, "404": { - "description": "Workspace not found or user unauthorized to manage tags", + "description": "Workspace not found or user unauthorized to delete workspace", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "409": { + "description": "Workspace has managed resources or is locked and cannot be safely deleted", "content": { "application/vnd.api+json": { "schema": { @@ -9304,23 +9610,87 @@ } } } - }, - "patch": { - "operationId": "replaceWorkspaceTagBindings", - "summary": "Replace Tag Bindings in a Workspace", - "description": "Replace all tag bindings in a workspace.", + } + }, + "/projects/{project_id}/notification-configurations": { + "get": { + "summary": "List Notification Configurations for a Project", + "description": "List all notification configurations for a given project.\n", + "operationId": "listProjectNotificationConfigurations", "tags": [ - "workspaces" + "Notification Configurations" ], "parameters": [ { + "name": "project_id", "in": "path", - "name": "workspace_id", + "description": "The ID of the project", + "required": true, "schema": { "type": "string" - }, + } + }, + { + "in": "query", + "name": "fields[notification-configurations]", + "description": "Return only the specified fields for notification-configurations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/notification-configurations" + } + } + } + } + } + } + }, + "404": { + "description": "Project not found", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "post": { + "summary": "Create a Notification Configuration for a Project", + "description": "Create a new notification configuration for a given project.\n", + "operationId": "createProjectNotificationConfiguration", + "tags": [ + "Notification Configurations" + ], + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "The ID of the project", "required": true, - "description": "The ID of the workspace." + "schema": { + "type": "string" + } } ], "requestBody": { @@ -9328,17 +9698,34 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/tag-bindings-collection" + "$ref": "#/components/schemas/notification-configurations-envelope" } } } }, "responses": { - "204": { - "description": "Tag bindings replaced" + "201": { + "description": "Notification configuration created successfully", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/notification-configurations-envelope" + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } }, "404": { - "description": "Workspace not found or user unauthorized to manage tag bindings", + "description": "Project not found", "content": { "application/vnd.api+json": { "schema": { @@ -9347,8 +9734,8 @@ } } }, - "default": { - "description": "Error details", + "422": { + "description": "Validation error", "content": { "application/vnd.api+json": { "schema": { @@ -9360,13 +9747,13 @@ } } }, - "/workspaces/{workspace_id}/relationships/tags": { + "/workspaces/{workspace_id}/notification-configurations": { "get": { - "operationId": "listWorkspaceTags", - "summary": "List Workspace Tags", - "description": "List all tags associated with a workspace.", + "operationId": "listWorkspaceNotificationConfigurations", + "summary": "List Notification Configurations for a Workspace", + "description": "List all notification configurations for a workspace.", "tags": [ - "workspaces" + "notification-configurations" ], "parameters": [ { @@ -9376,60 +9763,58 @@ "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The ID of the workspace." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[notification-configurations]", + "description": "Return only the specified fields for notification-configurations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of tags", + "description": "List of notification configurations", "content": { "application/vnd.api+json": { "schema": { "type": "object", - "required": [ - "data" - ], "properties": { "data": { "type": "array", "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "tags" - ] - }, - "attributes": { - "type": "object", - "properties": { - "name": { - "type": "string" - } - } - } + "$ref": "#/components/schemas/notification-configurations" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" } } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" } } } } } }, - "404": { - "description": "Workspace not found or user unauthorized to view workspace", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, "default": { "description": "Error details", "content": { @@ -9443,11 +9828,11 @@ } }, "post": { - "operationId": "addWorkspaceTags", - "summary": "Add Tags to a Workspace", - "description": "Add one or more tags to a workspace.", + "operationId": "createWorkspaceNotificationConfiguration", + "summary": "Create a Notification Configuration for a Workspace", + "description": "Create a new notification configuration for a workspace.", "tags": [ - "workspaces" + "notification-configurations" ], "parameters": [ { @@ -9457,7 +9842,7 @@ "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The ID of the workspace." } ], "requestBody": { @@ -9465,17 +9850,24 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/tags-create-array-document" + "$ref": "#/components/schemas/notification-configurations-envelope" } } } }, "responses": { - "204": { - "description": "Tags added" + "201": { + "description": "Notification configuration created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/notification-configurations-envelope" + } + } + } }, - "404": { - "description": "Workspace not found or user unauthorized to manage tags", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -9483,6 +9875,77 @@ } } } + } + } + } + }, + "/teams/{team_id}/notification-configurations": { + "get": { + "operationId": "listTeamNotificationConfigurations", + "summary": "List Notification Configurations for a Team", + "description": "List all notification configurations for a team.", + "tags": [ + "notification-configurations" + ], + "parameters": [ + { + "in": "path", + "name": "team_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the team." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[notification-configurations]", + "description": "Return only the specified fields for notification-configurations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of notification configurations", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/notification-configurations" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } }, "default": { "description": "Error details", @@ -9496,22 +9959,22 @@ } } }, - "delete": { - "operationId": "removeWorkspaceTags", - "summary": "Remove Tags from a Workspace", - "description": "Remove one or more tags from a workspace.", + "post": { + "operationId": "createTeamNotificationConfiguration", + "summary": "Create a Notification Configuration for a Team", + "description": "Create a new notification configuration for a team.", "tags": [ - "workspaces" + "notification-configurations" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "team_id", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The ID of the team." } ], "requestBody": { @@ -9519,21 +9982,18 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/tags-remove-array-document" + "$ref": "#/components/schemas/notification-configurations-envelope" } } } }, "responses": { - "204": { - "description": "Tags removed" - }, - "404": { - "description": "Workspace not found or user unauthorized to manage tags", + "201": { + "description": "Notification configuration created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/notification-configurations-envelope" } } } @@ -9551,46 +10011,45 @@ } } }, - "/workspaces/{workspace_id}/relationships/data-retention-policy": { - "x-vis": [ - "tfe" - ], + "/notification-configurations/{notification_configuration_id}": { "get": { - "operationId": "getWorkspaceDataRetentionPolicy", - "summary": "Get Workspace Data Retention Policy", - "description": "Show the data retention policy explicitly set on the workspace.\n\nThis operation is only available in Terraform Enterprise.", + "operationId": "getNotificationConfiguration", + "summary": "Show a Notification Configuration", + "description": "Get details about a notification configuration.", "tags": [ - "workspaces", - "data-retention-policies" + "notification-configurations" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "notification_configuration_id", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The ID of the notification configuration." + }, + { + "in": "query", + "name": "fields[notification-configurations]", + "description": "Return only the specified fields for notification-configurations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Workspace data retention policy", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/data-retention-policy-envelope" - } - } - } - }, - "404": { - "description": "Workspace not found or policy not set", + "description": "Notification configuration details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/notification-configurations-envelope" } } } @@ -9608,22 +10067,21 @@ } }, "patch": { - "operationId": "setWorkspaceDataRetentionPolicy", - "summary": "Set Workspace Data Retention Policy", - "description": "Create or update the data retention policy explicitly set on the workspace.\n\nThis operation is only available in Terraform Enterprise.", + "operationId": "updateNotificationConfiguration", + "summary": "Update a Notification Configuration", + "description": "Update an existing notification configuration.", "tags": [ - "workspaces", - "data-retention-policies" + "notification-configurations" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "notification_configuration_id", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The ID of the notification configuration." } ], "requestBody": { @@ -9631,38 +10089,18 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/data-retention-policy-envelope" + "$ref": "#/components/schemas/notification-configurations-envelope" } } } }, "responses": { "200": { - "description": "Data retention policy set", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/data-retention-policy-envelope" - } - } - } - }, - "404": { - "description": "Workspace not found or user unauthorized", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "422": { - "description": "Malformed request body", + "description": "Notification configuration updated", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/notification-configurations-envelope" } } } @@ -9680,37 +10118,26 @@ } }, "delete": { - "operationId": "deleteWorkspaceDataRetentionPolicy", - "summary": "Delete Workspace Data Retention Policy", - "description": "Remove the data retention policy explicitly set on the workspace.\n\nThis operation is only available in Terraform Enterprise.", + "operationId": "deleteNotificationConfiguration", + "summary": "Delete a Notification Configuration", + "description": "Delete a notification configuration.", "tags": [ - "workspaces", - "data-retention-policies" + "notification-configurations" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "notification_configuration_id", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The ID of the notification configuration." } ], "responses": { "204": { - "description": "Data retention policy deleted" - }, - "404": { - "description": "Workspace not found or user unauthorized", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } + "description": "Notification configuration deleted" }, "default": { "description": "Error details", @@ -9725,59 +10152,32 @@ } } }, - "/workspaces/{workspace_id}/current-state-version": { - "get": { - "operationId": "getCurrentStateVersion", - "summary": "Get Current State Version", - "description": "Get the current state version for a workspace.", + "/notification-configurations/{notification_configuration_id}/actions/enable": { + "post": { + "operationId": "enableNotificationConfiguration", + "summary": "Enable a Notification Configuration", + "description": "Enable a notification configuration by triggering a verification request.", "tags": [ - "workspaces" + "notification-configurations" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "notification_configuration_id", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." - }, - { - "in": "query", - "name": "include", - "style": "form", - "explode": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "outputs" - ] - } - }, - "required": false, - "description": "Optionally side-load relationships.\n" + "description": "The ID of the notification configuration." } ], "responses": { "200": { - "description": "Current state version details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/current-state-version-envelope" - } - } - } - }, - "404": { - "description": "Workspace not found, no current state version exists, or user unauthorized", + "description": "Notification configuration enabled", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/notification-configurations-envelope" } } } @@ -9795,42 +10195,32 @@ } } }, - "/workspaces/{workspace_id}/current-assessment-result": { - "get": { - "operationId": "getCurrentAssessmentResult", - "summary": "Get Current Assessment Result", - "description": "Get the most recent drift detection assessment result for a workspace.", + "/notification-configurations/{notification_configuration_id}/actions/verify": { + "post": { + "operationId": "verifyNotificationConfiguration", + "summary": "Verify a Notification Configuration", + "description": "Send a verification request to the configured destination URL.", "tags": [ - "workspaces" + "notification-configurations" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "notification_configuration_id", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The ID of the notification configuration." } ], "responses": { "200": { - "description": "Current assessment result", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/assessment-results-envelope" - } - } - } - }, - "404": { - "description": "Workspace not found, no current assessment result exists, or user unauthorized", + "description": "Notification configuration verified", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/notification-configurations-envelope" } } } @@ -9848,133 +10238,51 @@ } } }, - "/workspaces/{workspace_id}/applicable-varsets": { + "/email-recipient-statuses/verify": { "get": { - "operationId": "listApplicableVarsets", - "summary": "List Applicable Variable Sets", - "description": "List the variable sets that can be applied to a workspace. This returns variable sets from the workspace's organization that are not already applied to the workspace, filtered by project scope.\n", + "operationId": "verifyEmailRecipientStatus", + "summary": "Verify Email Recipient", + "description": "Render the email verification page using a signed token. This endpoint is public and does not require authentication.", "tags": [ - "workspaces" + "email-recipient-statuses" ], "parameters": [ { - "in": "path", - "name": "workspace_id", + "in": "query", + "name": "token", "schema": { "type": "string" }, "required": true, - "description": "The external ID of the workspace." + "description": "The signed token for verifying the email address" }, { "in": "query", - "name": "q", + "name": "config", "schema": { "type": "string" }, "required": false, - "description": "Optional search query to filter variable sets by name." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "description": "The notification configuration external ID used to render the subscribable name" } ], "responses": { "200": { - "description": "List of applicable variable sets", + "description": "Email verification page rendered successfully", "content": { - "application/vnd.api+json": { + "text/html": { "schema": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "varsets" - ] - }, - "attributes": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, - "global": { - "type": "boolean" - }, - "auto-apply": { - "type": "boolean" - }, - "var-count": { - "type": "integer" - }, - "workspace-count": { - "type": "integer" - }, - "project-count": { - "type": "integer" - }, - "created-at": { - "type": "string", - "format": "date-time", - "readOnly": true - }, - "updated-at": { - "type": "string", - "format": "date-time", - "readOnly": true - } - } - } - } - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - }, - "status-counts": { - "type": "object", - "additionalProperties": { - "type": "integer" - } - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } + "type": "string" } } } }, "404": { - "description": "Workspace not found or user unauthorized to view workspace", + "description": "Invalid or expired token", "content": { - "application/vnd.api+json": { + "text/html": { "schema": { - "$ref": "#/components/schemas/errors" + "type": "string" } } } @@ -9982,41 +10290,72 @@ "default": { "description": "Error details", "content": { - "application/vnd.api+json": { + "text/html": { "schema": { - "$ref": "#/components/schemas/errors" + "type": "string" } } } } } - } - }, - "/runs": { + }, "post": { - "operationId": "createRun", - "summary": "Create a Run", - "description": "Create a new run.", + "operationId": "performEmailRecipientVerification", + "summary": "Perform Email Recipient Verification", + "description": "Verify an email recipient status using a signed token. This endpoint is public and does not require authentication.", "tags": [ - "runs" + "email-recipient-statuses" ], "requestBody": { "required": true, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/runs-envelope" + "type": "object", + "required": [ + "token" + ], + "properties": { + "token": { + "type": "string", + "description": "The signed token for verifying the email address" + }, + "config": { + "type": "string", + "description": "The notification configuration external ID used to render the subscribable name" + } + } } } } }, "responses": { - "201": { - "description": "Run created", + "200": { + "description": "Email recipient verification completed successfully", + "content": { + "text/html": { + "schema": { + "type": "string" + } + } + } + }, + "404": { + "description": "Invalid or expired token", + "content": { + "text/html": { + "schema": { + "type": "string" + } + } + } + }, + "415": { + "description": "Invalid content type", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/runs-envelope" + "$ref": "#/components/schemas/errors" } } } @@ -10024,92 +10363,65 @@ "default": { "description": "Error details", "content": { - "application/vnd.api+json": { + "text/html": { "schema": { - "$ref": "#/components/schemas/errors" + "type": "string" } } } } } - }, + } + }, + "/email-recipient-statuses/unsubscribe": { "get": { - "operationId": "listRuns", - "summary": "List Runs", - "description": "List all runs in a workspace.", + "operationId": "unsubscribeEmailRecipient", + "summary": "Unsubscribe Email Recipient", + "description": "Unsubscribe an email recipient from notifications using a signed token. This endpoint is public and does not require authentication.", "tags": [ - "runs" + "email-recipient-statuses" ], "parameters": [ { "in": "query", - "name": "workspace_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "Workspace ID" - }, - { - "in": "query", - "name": "organization_name", + "name": "token", "schema": { "type": "string" }, "required": true, - "description": "Organization Name" - }, - { - "in": "query", - "name": "filter[operation]", - "schema": { - "type": "string" - }, - "required": false, - "description": "Filter by run operation." + "description": "The signed token for unsubscribing the email address" }, { "in": "query", - "name": "filter[status]", + "name": "fields[email-recipient-statuses]", + "description": "Return only the specified fields for email-recipient-statuses resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": false, - "description": "Filter by run status." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of runs", + "description": "Email recipient unsubscribed successfully", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/runs" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } + "$ref": "#/components/schemas/email-recipient-statuses-envelope" + } + } + } + }, + "404": { + "description": "Invalid or expired token", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } @@ -10125,59 +10437,112 @@ } } } - } - }, - "/runs/{run_id}": { - "get": { - "operationId": "getRun", - "summary": "Get Run details", - "description": "Get details about a run.", + }, + "post": { + "operationId": "saveUnsubscribePreferences", + "summary": "Save Email Unsubscribe Preferences", + "description": "Save email unsubscribe preferences using a signed token. This endpoint is public and does not require authentication.", "tags": [ - "runs" + "email-recipient-statuses" ], "parameters": [ { - "in": "path", - "name": "run_id", + "in": "query", + "name": "token", "schema": { "type": "string" }, "required": true, - "description": "Run ID" - }, - { - "in": "query", - "name": "include", - "style": "form", - "explode": false, - "schema": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "plan", - "apply", - "created_by", - "configuration_version", - "configuration_version.ingress_attributes", - "cost_estimate", - "workspace", - "task_stages", - "tf_policy_evaluations" + "description": "The signed token for the unsubscribe operation" + } + ], + "requestBody": { + "required": true, + "content": { + "application/x-www-form-urlencoded": { + "schema": { + "type": "object", + "properties": { + "unsubscribe_preference": { + "type": "string", + "enum": [ + "project", + "all_organization", + "cancel" + ], + "description": "The unsubscribe preference selected by the user" + }, + "configuration": { + "type": "string", + "description": "Optional external ID of the notification configuration (for project unsubscribe)" + } + }, + "required": [ + "unsubscribe_preference" ] } - }, - "required": false, - "description": "Available side-load related resources. Multiple values can be comma-separated.\n\nAvailable includes:\n- `plan` - The plan for this run\n- `apply` - The apply for this run\n- `created_by` - The user who created this run\n- `configuration_version` - The configuration version used\n- `configuration_version.ingress_attributes` - VCS ingress details\n- `cost_estimate` - Cost estimation for this run\n- `workspace` - The workspace this run belongs to\n- `task_stages` - Run task stages\n- `tf_policy_evaluations` - Terraform Policy evaluations *(public-beta)*\n" + } } - ], + }, "responses": { "200": { - "description": "Run details", + "description": "Preferences saved successfully", + "content": { + "text/html": { + "schema": { + "type": "string" + } + } + } + }, + "404": { + "description": "Invalid or expired token", + "content": { + "text/html": { + "schema": { + "type": "string" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "text/html": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/queries": { + "post": { + "operationId": "createQuery", + "summary": "Create a Query Run", + "description": "Create a new query run.", + "tags": [ + "queries" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/queries-envelope" + } + } + } + }, + "responses": { + "201": { + "description": "Query created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/runs-envelope" + "$ref": "#/components/schemas/queries-envelope" } } } @@ -10195,32 +10560,75 @@ } } }, - "/runs/{run_id}/configuration-version": { + "/queries/{query_id}": { "get": { - "operationId": "getRunConfigurationVersion", - "summary": "Get Run Configuration Version", - "description": "Get details of a specific configuration version.", + "operationId": "getQuery", + "summary": "Get Query", + "description": "Get details of a specific query.", "tags": [ - "configuration-versions" + "queries" ], "parameters": [ { "in": "path", - "name": "run_id", + "name": "query_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the run" + "description": "The ID of the query." + }, + { + "in": "query", + "name": "fields[queries]", + "description": "Return only the specified fields for queries resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Configuration version details", + "description": "Query details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/configuration-versions-envelope" + "allOf": [ + { + "$ref": "#/components/schemas/queries-envelope" + }, + { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "attributes": { + "type": "object", + "required": [ + "list-completions" + ], + "properties": { + "list-completions": { + "type": "array", + "readOnly": true, + "description": "A summary of each list completion returned by the query run.", + "items": { + "$ref": "#/components/schemas/query-completion-summary" + } + } + } + } + } + } + } + } + ] } } } @@ -10238,33 +10646,55 @@ } } }, - "/runs/{run_id}/configuration-version/download": { - "get": { - "operationId": "downloadRunConfigurationVersion", - "summary": "Download Run Configuration Version", - "description": "Generate a temporary URL to download the configuration version files.", + "/queries/{query_id}/actions/cancel": { + "post": { + "operationId": "cancelQueryRun", + "summary": "Cancel a Query Run", + "description": "Cancel a query run that is currently pending or running.", "tags": [ - "configuration-versions" + "queries" ], "parameters": [ { "in": "path", - "name": "run_id", + "name": "query_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the run." + "description": "Query ID" } ], "responses": { - "200": { - "description": ".tar.gz file containing the configuration version.", + "202": { + "description": "Successfully canceled a query run", "content": { - "application/octet-stream": { + "application/vnd.api+json": { "schema": { "type": "string", - "format": "binary" + "enum": [ + "null" + ] + } + } + } + }, + "404": { + "description": "Query not found or user unauthorized", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "409": { + "description": "Failed to transition query run to a canceled state.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } @@ -10282,34 +10712,47 @@ } } }, - "/runs/{run_id}/comments": { + "/workspaces/{workspace_id}/queries": { "get": { - "operationId": "listRunComments", - "summary": "List Comments for a Run", - "description": "List all comments for a run.", + "operationId": "getWorkspaceQueries", + "summary": "Get Queries for a Workspace", + "description": "Get list of queries for a particular workspace.", "tags": [ - "comments" + "queries" ], "parameters": [ { "in": "path", - "name": "run_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "Run ID" + "description": "The id of the workspace." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[queries]", + "description": "Return only the specified fields for queries resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of comments", + "description": "List of Queries", "content": { "application/vnd.api+json": { "schema": { @@ -10318,9 +10761,12 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/comments" + "$ref": "#/components/schemas/queries" } }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, "meta": { "type": "object", "properties": { @@ -10328,9 +10774,6 @@ "$ref": "#/components/schemas/pagination" } } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" } } } @@ -10348,42 +10791,41 @@ } } } - }, + } + }, + "/search/no-code-query": { + "x-vis": [ + "public-beta" + ], "post": { - "operationId": "createRunComment", - "summary": "Create a Comment", - "description": "Create a new comment on a run.", + "operationId": "createNoCodeQuery", + "summary": "Create a No-Code Query", + "description": "Create a new no-code query for a workspace.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "comments" - ], - "parameters": [ - { - "in": "path", - "name": "run_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "Run ID" - } + "queries" ], "requestBody": { "required": true, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/comments-envelope" + "$ref": "#/components/schemas/no-code-query" } } } }, "responses": { "201": { - "description": "Comment created", + "description": "No-code query created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/comments-envelope" + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/no-code-query" + } + } } } } @@ -10401,13 +10843,16 @@ } } }, - "/comments/{id}": { + "/search/no-code-query/{id}": { + "x-vis": [ + "public-beta" + ], "get": { - "operationId": "showComment", - "summary": "Show a Comment", - "description": "Get details about a comment.", + "operationId": "getNoCodeQuery", + "summary": "Get a No-Code Query", + "description": "Get the configuration of a specific no-code query.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "comments" + "queries" ], "parameters": [ { @@ -10417,16 +10862,34 @@ "type": "string" }, "required": true, - "description": "Comment ID" + "description": "The ID of the no-code query." + }, + { + "in": "query", + "name": "fields[no-code-queries]", + "description": "Return only the specified fields for no-code-queries resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Comment details", + "description": "No-code query details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/comments-envelope" + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/no-code-query" + } + } } } } @@ -10444,69 +10907,13 @@ } } }, - "/runs/{run_id}/actions/apply": { - "post": { - "operationId": "applyRun", - "summary": "Apply a Run", - "description": "Apply a run that is paused waiting for confirmation.", + "/workspaces/{workspace_id}/all-vars": { + "get": { + "operationId": "listAllVars", + "summary": "List All Variables Accessible to a Workspace", + "description": "This API returns the list of all variables that are accessible to a workspace. This includes variables defined directly on the workspace as well as variables inherited from any variable sets attached to the workspace.", "tags": [ - "runs" - ], - "parameters": [ - { - "in": "path", - "name": "run_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "Run ID" - } - ], - "requestBody": { - "required": false, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/action-comment" - } - } - } - }, - "responses": { - "202": { - "description": "Successfully queued an apply request", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "string", - "enum": [ - "null" - ] - } - } - } - }, - "409": { - "description": "Run was not paused for confirmation; apply not allowed.", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - } - }, - "/workspaces/{workspace_id}/runs": { - "get": { - "operationId": "listWorkspaceRuns", - "summary": "List Runs in a Workspace", - "description": "List all runs in a workspace.", - "tags": [ - "runs" + "vars" ], "parameters": [ { @@ -10516,57 +10923,38 @@ "type": "string" }, "required": true, - "description": "Workspace ID" - }, - { - "in": "query", - "name": "filter[operation]", - "schema": { - "type": "string" - }, - "required": false, - "description": "Filter by run operation." + "description": "The ID of the workspace." }, { "in": "query", - "name": "filter[status]", + "name": "fields[vars]", + "description": "Return only the specified fields for vars resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": false, - "description": "Filter by run status." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of runs", + "description": "List of all variables accessible to a workspace", "content": { "application/vnd.api+json": { "schema": { "type": "object", + "required": [ + "data" + ], "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/runs" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } + "$ref": "#/components/schemas/vars" } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" } } } @@ -10586,13 +10974,13 @@ } } }, - "/workspaces/{workspace_id}/run-triggers": { + "/workspaces/{workspace_id}/vars": { "get": { - "operationId": "listRunTriggers", - "summary": "List Run Triggers", - "description": "List all run triggers for a workspace.", + "operationId": "listWorkspaceVars", + "summary": "List Variables", + "description": "List variables for a workspace.", "tags": [ - "run-triggers" + "vars" ], "parameters": [ { @@ -10602,52 +10990,38 @@ "type": "string" }, "required": true, - "description": "Workspace ID" + "description": "The ID of the workspace." }, { "in": "query", - "name": "filter[run-trigger][type]", + "name": "fields[vars]", + "description": "Return only the specified fields for vars resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string", - "enum": [ - "inbound", - "outbound" - ] - }, - "required": true, - "description": "Filter by run trigger type (inbound or outbound)" - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of run triggers", + "description": "List of variables for the workspace", "content": { "application/vnd.api+json": { "schema": { "type": "object", + "required": [ + "data" + ], "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/run-triggers" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } + "$ref": "#/components/schemas/vars" } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" } } } @@ -10667,11 +11041,11 @@ } }, "post": { - "operationId": "createRunTrigger", - "summary": "Create a Run Trigger", - "description": "Create a new run trigger for a workspace.", + "operationId": "createWorkspaceVar", + "summary": "Create a Variable", + "description": "Create a variable for a workspace.", "tags": [ - "run-triggers" + "vars" ], "parameters": [ { @@ -10681,7 +11055,7 @@ "type": "string" }, "required": true, - "description": "Workspace ID" + "description": "The ID of the workspace." } ], "requestBody": { @@ -10689,18 +11063,18 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/run-triggers-envelope" + "$ref": "#/components/schemas/vars-envelope" } } } }, "responses": { "201": { - "description": "Run trigger created", + "description": "Variable created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/run-triggers-envelope" + "$ref": "#/components/schemas/vars-envelope" } } } @@ -10718,15 +11092,24 @@ } } }, - "/run-triggers/{id}": { + "/workspaces/{workspace_id}/vars/{id}": { "get": { - "operationId": "showRunTrigger", - "summary": "Show a Run Trigger", - "description": "Get details about a run trigger.", + "operationId": "showWorkspaceVar", + "summary": "Show a Variable", + "description": "Show details of a variable in a workspace.", "tags": [ - "run-triggers" + "vars" ], "parameters": [ + { + "in": "path", + "name": "workspace_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the workspace." + }, { "in": "path", "name": "id", @@ -10734,16 +11117,29 @@ "type": "string" }, "required": true, - "description": "Run Trigger ID" + "description": "The ID of the variable." + }, + { + "in": "query", + "name": "fields[vars]", + "description": "Return only the specified fields for vars resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Run trigger details", + "description": "Variable details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/run-triggers-envelope" + "$ref": "#/components/schemas/vars-envelope" } } } @@ -10760,14 +11156,23 @@ } } }, - "delete": { - "operationId": "deleteRunTrigger", - "summary": "Delete a Run Trigger", - "description": "Delete a run trigger.", + "patch": { + "operationId": "updateWorkspaceVar", + "summary": "Update a Variable", + "description": "Update attributes of an existing variable in a workspace.", "tags": [ - "run-triggers" + "vars" ], "parameters": [ + { + "in": "path", + "name": "workspace_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the workspace." + }, { "in": "path", "name": "id", @@ -10775,12 +11180,29 @@ "type": "string" }, "required": true, - "description": "Run Trigger ID" + "description": "The ID of the variable." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/vars-envelope" + } + } + } + }, "responses": { - "204": { - "description": "Run trigger deleted" + "200": { + "description": "Variable updated", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/vars-envelope" + } + } + } }, "default": { "description": "Error details", @@ -10793,87 +11215,103 @@ } } } - } - }, - "/organizations/{organization_name}/runs": { - "get": { - "operationId": "listOrganizationRuns", - "summary": "List Runs in an Organization", - "description": "List all runs in an organization.", + }, + "delete": { + "operationId": "deleteWorkspaceVar", + "summary": "Delete a Variable", + "description": "Delete a variable from a workspace.", "tags": [ - "runs" + "vars" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "Organization name" + "description": "The ID of the workspace." }, { - "in": "query", - "name": "filter[operation]", + "in": "path", + "name": "id", "schema": { "type": "string" }, - "required": false, - "description": "Filter by run operation." + "required": true, + "description": "The ID of the variable." + } + ], + "responses": { + "204": { + "description": "Variable deleted successfully" }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/provider-sets/{provider_set_id}": { + "x-vis": [ + "public-beta" + ], + "get": { + "operationId": "showProviderSet", + "summary": "Show a Provider Set", + "description": "Fetch details about the specified provider set.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "tags": [ + "provider-sets" + ], + "parameters": [ { - "in": "query", - "name": "filter[status]", + "in": "path", + "name": "provider_set_id", "schema": { "type": "string" }, - "required": false, - "description": "Filter by run status." + "required": true, + "description": "The ID of the provider set." }, { "in": "query", - "name": "filter[timeframe]", + "name": "include", + "description": "Comma-separated list of related resources to include. Valid values: projects, workspaces.\n", "schema": { - "type": "string", - "default": "year" + "type": "string" }, "required": false, - "description": "Filter by timeframe. Must be a numeric year or \"year\" for the last 12 months (the default)." - }, - { - "$ref": "#/components/parameters/page_number" + "example": "projects,workspaces" }, { - "$ref": "#/components/parameters/page_size" + "in": "query", + "name": "fields[provider-sets]", + "description": "Return only the specified fields for provider-sets resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of runs", + "description": "Provider set details", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/runs" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination-without-totals" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } + "$ref": "#/components/schemas/provider-sets-envelope" } } } @@ -10889,34 +11327,42 @@ } } } - } - }, - "/plans/{id}": { - "get": { + }, + "patch": { + "operationId": "updateProviderSet", + "summary": "Update a Provider Set", + "description": "Update attributes of an existing provider set.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "tags": [ + "provider-sets" + ], "parameters": [ { - "name": "id", "in": "path", - "description": "The ID of the plan to show.", - "required": true, + "name": "provider_set_id", "schema": { "type": "string" - } + }, + "required": true, + "description": "The ID of the provider set." } ], - "operationId": "showPlan", - "summary": "Show a plan", - "description": "This endpoint returns a specific plan by its ID.", - "tags": [ - "plans" - ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/provider-sets-envelope" + } + } + } + }, "responses": { "200": { - "description": "Successfully returned the plan.", + "description": "Provider set updated", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/plans-envelope" + "$ref": "#/components/schemas/provider-sets-envelope" } } } @@ -10932,51 +11378,28 @@ } } } - } - }, - "/plans/{id}/json-output": { - "get": { - "operationId": "getPlanJSONOutput", - "summary": "Get the JSON execution plan", - "description": "This endpoint generates a temporary authenticated URL to the location of the JSON formatted execution plan.\nWhen successful, this endpoint responds with a temporary redirect that should be followed.\n\nThis endpoint is available for plans using Terraform 0.12 and later.\nThe temporary URL has a life of 1 minute and should not be relied upon beyond the initial request.\n", + }, + "delete": { + "operationId": "deleteProviderSet", + "summary": "Delete a Provider Set", + "description": "Delete an existing provider set.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "tags": [ + "provider-sets" + ], "parameters": [ { - "name": "id", "in": "path", - "description": "The ID of the plan to show.", - "required": true, + "name": "provider_set_id", "schema": { "type": "string" - } + }, + "required": true, + "description": "The ID of the provider set." } ], - "tags": [ - "plans" - ], "responses": { "204": { - "description": "Plan JSON supported, but plan has not yet completed." - }, - "307": { - "description": "Plan JSON found and temporary download URL generated.", - "headers": { - "Location": { - "description": "Temporary URL to download the JSON output", - "schema": { - "type": "string" - } - } - } - }, - "422": { - "description": "Plan does not use a supported version of Terraform (< 0.12.X).", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } + "description": "Provider set deleted successfully" }, "default": { "description": "Error details", @@ -10991,68 +11414,44 @@ } } }, - "/plans/{id}/json-output-redacted": { - "get": { - "operationId": "getPlanJSONOutputRedacted", - "summary": "Get the redacted JSON execution plan", - "description": "This endpoint generates a temporary authenticated URL to the location of the redacted JSON formatted execution plan, or returns the parsed redacted plan inline when the pre-generated file is not yet available.\n\nThis endpoint is available for plans using Terraform 0.15.2 and later. The temporary URL has a life of 1 minute and should not be relied upon beyond the initial request.\n", + "/provider-sets/{provider_set_id}/relationships/projects": { + "x-vis": [ + "public-beta" + ], + "post": { + "operationId": "addProviderSetProjects", + "summary": "Add Projects to a Provider Set", + "description": "Add projects to a provider set. Relationships are additive; existing project assignments are preserved.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "tags": [ + "provider-sets" + ], "parameters": [ { - "name": "id", "in": "path", - "description": "The ID of the plan to show.", - "required": true, + "name": "provider_set_id", "schema": { "type": "string" - } + }, + "required": true, + "description": "The ID of the provider set." } ], - "tags": [ - "plans" - ], - "responses": { - "200": { - "description": "Plan JSON output rendered inline because the pre-generated redacted plan file is not yet available.", - "content": { - "application/json": {} - } - }, - "204": { - "description": "Redacted plan JSON supported, but plan has not yet completed." - }, - "307": { - "description": "Redacted plan JSON found and temporary download URL generated.", - "headers": { - "Location": { - "description": "Temporary URL to download the redacted JSON output", - "schema": { - "type": "string" - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/projects-identifier-array-document" } } + } + }, + "responses": { + "204": { + "description": "Projects successfully added to provider set." }, - "404": { - "description": "Plan or redacted plan output not found.", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "422": { - "description": "Plan does not use a supported version of Terraform (< 0.15.2).", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "default": { - "description": "Error details", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -11062,61 +11461,38 @@ } } } - } - }, - "/plans/{id}/json-schema": { - "get": { - "operationId": "getPlanJSONSchema", - "summary": "Get the JSON provider schema for a plan", - "description": "This endpoint generates a temporary authenticated URL to the location of the JSON formatted provider schemas associated with a plan.\nWhen successful, this endpoint responds with a temporary redirect that should be followed.\n\nThis endpoint is available for plans using Terraform 0.12 and later. The temporary URL has a life of 1 minute and should not be relied upon beyond the initial request.\n", + }, + "delete": { + "operationId": "removeProviderSetProjects", + "summary": "Remove Projects from a Provider Set", + "description": "Remove projects from a provider set. Projects not currently assigned to the set are ignored.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "tags": [ + "provider-sets" + ], "parameters": [ { - "name": "id", "in": "path", - "description": "The ID of the plan to show.", - "required": true, + "name": "provider_set_id", "schema": { "type": "string" - } + }, + "required": true, + "description": "The ID of the provider set." } ], - "tags": [ - "plans" - ], - "responses": { - "204": { - "description": "Provider schema JSON supported, but plan has not yet completed." - }, - "307": { - "description": "Provider schema JSON found and temporary download URL generated.", - "headers": { - "Location": { - "description": "Temporary URL to download the JSON provider schemas", - "schema": { - "type": "string" - } - } - } - }, - "404": { - "description": "Plan or provider schema output not found.", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "422": { - "description": "Plan does not use a supported version of Terraform (< 0.12.X).", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/projects-identifier-array-document" } } + } + }, + "responses": { + "204": { + "description": "Projects successfully removed from provider set." }, "default": { "description": "Error details", @@ -11131,31 +11507,41 @@ } } }, - "/plans/{id}/actions/soft-delete-backing-data": { + "/provider-sets/{provider_set_id}/relationships/workspaces": { "x-vis": [ - "tfe" + "public-beta" ], "post": { - "operationId": "softDeletePlanBackingData", - "summary": "Soft Delete Plan Backing Data", - "description": "Mark the backing files associated with this plan for garbage collection. Terraform permanently deletes backing files after a set number of days unless the plan is restored.\n\nThis operation is only available in Terraform Enterprise.", + "operationId": "addProviderSetWorkspaces", + "summary": "Add Workspaces to a Provider Set", + "description": "Add workspaces to a provider set. Relationships are additive; existing workspace assignments are preserved.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "plans" + "provider-sets" ], "parameters": [ { "in": "path", - "name": "id", + "name": "provider_set_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the plan to mark for garbage collection." + "description": "The ID of the provider set." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspaces-identifier-array-document" + } + } + } + }, "responses": { "204": { - "description": "Plan backing data marked for garbage collection" + "description": "Workspaces successfully added to provider set." }, "default": { "description": "Error details", @@ -11168,33 +11554,38 @@ } } } - } - }, - "/plans/{id}/actions/restore-backing-data": { - "x-vis": [ - "tfe" - ], - "post": { - "operationId": "restorePlanBackingData", - "summary": "Restore Plan Backing Data", - "description": "Restore backing files associated with a plan that was previously marked for garbage collection. This restores the plan back to its finalized state.\n\nThis operation is only available in Terraform Enterprise.", + }, + "delete": { + "operationId": "removeProviderSetWorkspaces", + "summary": "Remove Workspaces from a Provider Set", + "description": "Remove workspaces from a provider set. Workspaces not currently assigned to the set are ignored.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "plans" + "provider-sets" ], "parameters": [ { "in": "path", - "name": "id", + "name": "provider_set_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the plan to restore." + "description": "The ID of the provider set." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspaces-identifier-array-document" + } + } + } + }, "responses": { "204": { - "description": "Plan backing data restore initiated" + "description": "Workspaces successfully removed from provider set." }, "default": { "description": "Error details", @@ -11209,31 +11600,86 @@ } } }, - "/plans/{id}/actions/permanently-delete-backing-data": { + "/organizations/{organization_name}/provider-sets": { "x-vis": [ - "tfe" + "public-beta" ], - "post": { - "operationId": "permanentlyDeletePlanBackingData", - "summary": "Permanently Delete Plan Backing Data", - "description": "Permanently delete the backing files associated with a plan that has been soft deleted. This action cannot be undone.\n\nThis operation is only available in Terraform Enterprise.", + "get": { + "operationId": "getProviderSets", + "summary": "Get Provider Sets", + "description": "Fetch details about all the provider sets in an organization.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "plans" + "provider-sets" ], "parameters": [ { "in": "path", - "name": "id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the plan to permanently delete backing data for." + "description": "The name of the organization." + }, + { + "in": "query", + "name": "include", + "description": "Comma-separated list of related resources to include. Valid values: projects, workspaces.\n", + "schema": { + "type": "string" + }, + "required": false, + "example": "projects,workspaces" + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[provider-sets]", + "description": "Return only the specified fields for provider-sets resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { - "204": { - "description": "Plan backing data permanently deleted" + "200": { + "description": "Provider sets' details", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/provider-sets" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } + } + } + } }, "default": { "description": "Error details", @@ -11246,48 +11692,42 @@ } } } - } - }, - "/runs/{id}/plan/json-schema": { - "get": { - "operationId": "getPlanJSONSchemaOutput", - "summary": "Get the JSON provider schema corresponding to a plan", - "description": "This endpoint generates a temporary authenticated URL to the location of the JSON formatted provider schema.\nWhen successful, this endpoint responds with a temporary redirect that should be followed.\n\nThis endpoint is available for plans using Terraform 0.12 and later.\nThe temporary URL has a life of 1 minute and should not be relied upon beyond the initial request.\n", + }, + "post": { + "operationId": "createProviderSet", + "summary": "Create a Provider Set", + "description": "Create a provider set belonging to an organization.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "tags": [ + "provider-sets" + ], "parameters": [ { - "name": "id", "in": "path", - "description": "The ID of the plan to show.", - "required": true, + "name": "organization_name", "schema": { "type": "string" - } + }, + "required": true, + "description": "The name of the organization." } ], - "tags": [ - "plans" - ], - "responses": { - "204": { - "description": "Plan JSON supported, but plan has not yet completed." - }, - "307": { - "description": "Plan JSON found and temporary download URL generated.", - "headers": { - "Location": { - "description": "Temporary URL to download the JSON schema output", - "schema": { - "type": "string" - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/provider-sets-envelope" } } - }, - "422": { - "description": "Plan does not use a supported version of Terraform (< 0.12.X).", + } + }, + "responses": { + "201": { + "description": "Provider set created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/provider-sets-envelope" } } } @@ -11303,37 +11743,57 @@ } } } - } - }, - "/runs/{id}/plan": { - "get": { + }, + "delete": { + "operationId": "batchDeleteProviderSets", + "summary": "Batch Delete Provider Sets", + "description": "Delete multiple provider sets in a single request.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "tags": [ + "provider-sets" + ], "parameters": [ { - "name": "id", "in": "path", - "description": "The ID of the run whose plan you want to get.", - "required": true, + "name": "organization_name", "schema": { "type": "string" - } + }, + "required": true, + "description": "The name of the organization." } ], - "operationId": "getRunPlan", - "summary": "Get a plan by Run ID", - "description": "This endpoint returns a specific plan by its run ID.", - "tags": [ - "plans" - ], - "responses": { - "200": { - "description": "Successfully returned the plan.", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/plans-envelope" + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "provider-sets" + ] + }, + "id": { + "type": "string" + } + } + } + } } } } + } + }, + "responses": { + "204": { + "description": "Provider sets deleted successfully" }, "default": { "description": "Error details", @@ -11348,46 +11808,67 @@ } } }, - "/runs/{id}/plan/json-output": { + "/organizations/{organization_name}/provider-sets/{provider_set_name}": { + "x-vis": [ + "public-beta" + ], "get": { - "operationId": "getRunPlanJsonOutput", - "summary": "Get the JSON execution plan by Run ID", - "description": "This endpoint generates a temporary authenticated URL to the location of the JSON formatted execution plan.\nWhen successful, this endpoint responds with a temporary redirect that should be followed.\n\nThis endpoint is available for plans using Terraform 0.12 and later.\nThe temporary URL has a life of 1 minute and should not be relied upon beyond the initial request.\n", + "operationId": "showProviderSetByName", + "summary": "Show a Provider Set by name", + "description": "Fetch details about the specified provider set.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "tags": [ + "provider-sets" + ], "parameters": [ { - "name": "id", "in": "path", - "description": "The ID of the run whose plan json you want to get.", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the organization." + }, + { + "in": "path", + "name": "provider_set_name", + "schema": { + "type": "string" + }, "required": true, + "description": "The name of the provider_set." + }, + { + "in": "query", + "name": "include", + "description": "Comma-separated list of related resources to include. Valid values: projects, workspaces.\n", "schema": { "type": "string" + }, + "required": false, + "example": "projects,workspaces" + }, + { + "in": "query", + "name": "fields[provider-sets]", + "description": "Return only the specified fields for provider-sets resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } } } ], - "tags": [ - "plans" - ], "responses": { - "204": { - "description": "Plan JSON supported, but plan has not yet completed." - }, - "307": { - "description": "Plan JSON found and temporary download URL generated.", - "headers": { - "Location": { - "description": "Temporary URL to download the JSON output", - "schema": { - "type": "string" - } - } - } - }, - "422": { - "description": "Plan does not use a supported version of Terraform (< 0.12.X).", + "200": { + "description": "Provider set details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/provider-sets-envelope" } } } @@ -11405,33 +11886,73 @@ } } }, - "/policies/{policy_id}": { + "/projects/{project_id}/provider-sets": { + "x-vis": [ + "public-beta" + ], "get": { - "operationId": "showPolicy", - "summary": "Show a Policy", - "description": "Get details about a policy.", + "operationId": "getProjectProviderSets", + "summary": "Get Provider Sets", + "description": "Fetch details about all the provider sets assigned to a project.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "policies" + "provider-sets" ], "parameters": [ { - "name": "policy_id", "in": "path", + "name": "project_id", + "schema": { + "type": "string" + }, "required": true, - "description": "The ID of the policy to show.", + "description": "The id of a project." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[provider-sets]", + "description": "Return only the specified fields for provider-sets resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string", - "example": "pol-xxxxxxxxxxxxxxxx" + "type": "array", + "items": { + "type": "string" + } } } ], "responses": { "200": { - "description": "OK", + "description": "Provider sets' details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/policies-envelope" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/provider-sets" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } } } } @@ -11447,155 +11968,52 @@ } } } - }, - "patch": { - "operationId": "updatePolicy", - "summary": "Update a Policy", - "description": "Update the enforcement level or description of an existing policy. To update the policy code itself, use the upload endpoint.", + } + }, + "/workspaces/{workspace_id}/provider-sets": { + "x-vis": [ + "public-beta" + ], + "get": { + "operationId": "getWorkspaceProviderSets", + "summary": "Get Provider Sets", + "description": "Fetch details about all the provider sets assigned to a workspace.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "policies" + "provider-sets" ], "parameters": [ { - "name": "policy_id", "in": "path", + "name": "workspace_id", + "schema": { + "type": "string" + }, "required": true, - "description": "The ID of the policy to update.", + "description": "The id of a workspace." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[provider-sets]", + "description": "Return only the specified fields for provider-sets resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string", - "example": "pol-xxxxxxxxxxxxxxxx" + "type": "array", + "items": { + "type": "string" + } } } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/policies-envelope" - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/policies-envelope" - } - } - } - }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - }, - "delete": { - "operationId": "deletePolicy", - "summary": "Delete a Policy", - "description": "Delete a policy from an organization.", - "tags": [ - "policies" - ], - "parameters": [ - { - "name": "policy_id", - "in": "path", - "required": true, - "description": "The ID of the policy to delete.", - "schema": { - "type": "string", - "example": "pol-xxxxxxxxxxxxxxxx" - } - } - ], - "responses": { - "204": { - "description": "No Content" - }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - } - }, - "/organizations/{organization_name}/policies": { - "get": { - "operationId": "listPolicies", - "summary": "List Policies", - "description": "List all policies for an organization.", - "tags": [ - "policies" - ], - "parameters": [ - { - "name": "organization_name", - "in": "path", - "required": true, - "description": "The name of the organization.", - "schema": { - "type": "string", - "example": "my-organization" - } - }, - { - "name": "search[name]", - "in": "query", - "required": false, - "description": "Allows searching the organization's policies by name.", - "schema": { - "type": "string" - } - }, - { - "name": "filter[kind]", - "in": "query", - "required": false, - "description": "Filter policies by kind. Valid values are sentinel and opa.", - "schema": { - "type": "string", - "enum": [ - "sentinel", - "opa" - ] - } - }, - { - "name": "sort", - "in": "query", - "required": false, - "description": "Sort policies by the specified field. Valid values are name, -name, updated-at, and -updated-at. Prefix with - for descending order.", - "schema": { - "type": "string" - } - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" - } - ], "responses": { "200": { - "description": "OK", + "description": "Provider sets' details", "content": { "application/vnd.api+json": { "schema": { @@ -11604,7 +12022,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/policies" + "$ref": "#/components/schemas/provider-sets" } }, "links": { @@ -11634,43 +12052,47 @@ } } } - }, - "post": { - "operationId": "createPolicy", - "summary": "Create a Policy", - "description": "Create a new policy object for the organization. After creation, upload the policy code using the upload endpoint.", + } + }, + "/varsets/{varset_id}": { + "get": { + "operationId": "showVarset", + "summary": "Show a Variable Set", + "description": "Fetch details about the specified variable set.", "tags": [ - "policies" + "varsets" ], "parameters": [ { - "name": "organization_name", "in": "path", + "name": "varset_id", + "schema": { + "type": "string" + }, "required": true, - "description": "The name of the organization.", + "description": "The ID of the variable set." + }, + { + "in": "query", + "name": "fields[varsets]", + "description": "Return only the specified fields for varsets resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string", - "example": "my-organization" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/policies-envelope" + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "201": { - "description": "Created", + "200": { + "description": "Variable set details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/policies-envelope" + "$ref": "#/components/schemas/varsets-envelope" } } } @@ -11686,36 +12108,42 @@ } } } - } - }, - "/policies/{policy_id}/download": { - "get": { - "operationId": "downloadPolicy", - "summary": "Download a Policy", - "description": "Generate a temporary URL to the current version of the policy code and redirect to that location. Returns 404 if no policy code has been uploaded.", + }, + "patch": { + "operationId": "updateVarset", + "summary": "Update a Variable Set", + "description": "Update attributes of an existing variable set.", "tags": [ - "policies" + "varsets" ], "parameters": [ { - "name": "policy_id", "in": "path", - "required": true, - "description": "The ID of the policy to download.", + "name": "varset_id", "schema": { - "type": "string", - "example": "pol-xxxxxxxxxxxxxxxx" - } + "type": "string" + }, + "required": true, + "description": "The ID of the variable set." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/varsets-envelope" + } + } + } + }, "responses": { "200": { - "description": ".tar.gz file containing the policy code.", + "description": "Variable set updated", "content": { - "application/octet-stream": { + "application/vnd.api+json": { "schema": { - "type": "string", - "format": "binary" + "$ref": "#/components/schemas/varsets-envelope" } } } @@ -11731,47 +12159,42 @@ } } } - } - }, - "/policies/{policy_id}/upload": { - "put": { - "operationId": "uploadPolicy", - "summary": "Upload a Policy", - "description": "Upload code to an existing Sentinel or OPA policy. The request body must be the policy code with a Content-Type of application/octet-stream. Policy uploads are limited to 10MB.", + }, + "post": { + "operationId": "updateVarsetPost", + "summary": "Update a Variable Set (POST)", + "description": "Update attributes of an existing variable set using POST.", "tags": [ - "policies" + "varsets" ], "parameters": [ { - "name": "policy_id", "in": "path", - "required": true, - "description": "The ID of the policy to upload code to.", + "name": "varset_id", "schema": { - "type": "string", - "example": "pol-xxxxxxxxxxxxxxxx" - } + "type": "string" + }, + "required": true, + "description": "The ID of the variable set." } ], "requestBody": { "required": true, "content": { - "application/octet-stream": { + "application/vnd.api+json": { "schema": { - "type": "string", - "format": "binary", - "description": "The policy code as a binary stream." + "$ref": "#/components/schemas/varsets-envelope" } } } }, "responses": { "200": { - "description": "OK", + "description": "Variable set updated", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/policies-envelope" + "$ref": "#/components/schemas/varsets-envelope" } } } @@ -11787,37 +12210,28 @@ } } } - } - }, - "/policy-checks/{id}": { - "get": { - "operationId": "getPolicyCheck", - "summary": "Show a Policy Check", - "description": "Get information about a specific policy check.", + }, + "delete": { + "operationId": "deleteVarset", + "summary": "Delete a Variable Set", + "description": "Delete an existing variable set.", "tags": [ - "policy-checks" + "varsets" ], "parameters": [ { "in": "path", - "name": "id", + "name": "varset_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy check to show." + "description": "The ID of the variable set." } ], "responses": { - "200": { - "description": "Policy check details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/policy-checks-envelope" - } - } - } + "204": { + "description": "Variable set deleted successfully" }, "default": { "description": "Error details", @@ -11832,33 +12246,100 @@ } } }, - "/policy-checks/{id}/output": { + "/organizations/{organization_name}/varsets": { "get": { - "operationId": "getPolicyCheckOutput", - "summary": "Get Policy Check Output", - "description": "Retrieve the Sentinel output log for a policy check. When output is available, the response redirects to a temporary presigned URL. When no result exists yet, the response is 204 No Content.", + "operationId": "listOrganizationVarsets", + "summary": "List Variable Sets for an Organization", + "description": "List all variable sets for an organization.", "tags": [ - "policy-checks" + "varsets" ], "parameters": [ { "in": "path", - "name": "id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy check." + "description": "The name of the organization." + }, + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + }, + "required": false, + "description": "A search query string. You can search for a variable set using its name." + }, + { + "in": "query", + "name": "filter[global]", + "schema": { + "type": "boolean" + }, + "required": false, + "description": "When true, returns only global variable sets. When false, returns only non-global variable sets." + }, + { + "in": "query", + "name": "scope", + "schema": { + "type": "string", + "enum": [ + "owned" + ] + }, + "required": false, + "description": "When set to \"owned\", returns only organization-owned variable sets." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[varsets]", + "description": "Return only the specified fields for varsets resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Output log retrieved successfully.", + "description": "List of variable sets for the organization", "content": { - "application/octet-stream": { + "application/vnd.api+json": { "schema": { - "type": "string", - "format": "binary" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/varsets" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } } } } @@ -11874,54 +12355,42 @@ } } } - } - }, - "/policy-checks/{id}/actions/override": { + }, "post": { - "operationId": "overridePolicyCheck", - "summary": "Override a Policy Check", - "description": "Override a soft-mandatory or warning policy check to allow the run to continue.", + "operationId": "createVarset", + "summary": "Create a Variable Set", + "description": "Create a new variable set in an organization.", "tags": [ - "policy-checks" + "varsets" ], "parameters": [ { "in": "path", - "name": "id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy check to override." + "description": "The name of the organization." } ], "requestBody": { - "required": false, + "required": true, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/action-comment" + "$ref": "#/components/schemas/varsets-envelope" } } } }, "responses": { - "200": { - "description": "Policy check successfully overridden", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/policy-checks-envelope" - } - } - } - }, - "409": { - "description": "The policy check is not in an overridable state.", + "201": { + "description": "Variable set created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/varsets-envelope" } } } @@ -11939,45 +12408,64 @@ } } }, - "/runs/{run_id}/policy-checks": { + "/varsets/{varset_id}/relationships/vars": { "get": { - "operationId": "listRunPolicyChecks", - "summary": "List Policy Checks for a Run", - "description": "List the policy checks associated with a run.", + "operationId": "listVarsetVars", + "summary": "List Variables in a Variable Set", + "description": "List all variables in a variable set.", "tags": [ - "policy-checks" + "varsets" ], "parameters": [ { "in": "path", - "name": "run_id", + "name": "varset_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the run to list policy checks for." + "description": "The ID of the variable set." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[vars]", + "description": "Return only the specified fields for vars resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of policy checks", + "description": "List of variables in the variable set", "content": { "application/vnd.api+json": { "schema": { "type": "object", + "required": [ + "data" + ], "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/policy-checks" + "$ref": "#/components/schemas/vars" } }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, "meta": { "type": "object", "properties": { @@ -11985,9 +12473,6 @@ "$ref": "#/components/schemas/pagination" } } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" } } } @@ -12005,62 +12490,42 @@ } } } - } - }, - "/runs/{run_id}/tf-policy-evaluations": { - "x-vis": [ - "public-beta" - ], - "get": { - "operationId": "listRunTfPolicyEvaluations", - "summary": "List Terraform Policy Evaluations for a Run", - "description": "List the Terraform Policy evaluations associated with a run.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + }, + "post": { + "operationId": "addVarsetVar", + "summary": "Add a Variable to a Variable Set", + "description": "Add a new variable to an existing variable set.", "tags": [ - "tf-policy-evaluations" + "varsets" ], "parameters": [ { "in": "path", - "name": "run_id", + "name": "varset_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the run to list Terraform Policy evaluations for." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "description": "The ID of the variable set." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/vars-envelope" + } + } + } + }, "responses": { - "200": { - "description": "List of Terraform Policy evaluations", + "201": { + "description": "Variable added to variable set", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tf-policy-evaluation" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } + "$ref": "#/components/schemas/vars-envelope" } } } @@ -12078,18 +12543,24 @@ } } }, - "/tf-policy-evaluations/{id}": { - "x-vis": [ - "public-beta" - ], + "/varsets/{varset_id}/relationships/vars/{id}": { "get": { - "operationId": "getTfPolicyEvaluation", - "summary": "Show a Terraform Policy Evaluation", - "description": "Get details about a specific Terraform Policy evaluation.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", - "tags": [ - "tf-policy-evaluations" + "operationId": "showVarsetVar", + "summary": "Show a Variable in a Variable Set", + "description": "Show details of a variable in a variable set.", + "tags": [ + "varsets" ], "parameters": [ + { + "in": "path", + "name": "varset_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the variable set." + }, { "in": "path", "name": "id", @@ -12097,52 +12568,29 @@ "type": "string" }, "required": true, - "description": "The ID of the Terraform Policy evaluation to show." + "description": "The ID of the variable." }, { "in": "query", - "name": "include", + "name": "fields[vars]", + "description": "Return only the specified fields for vars resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", "style": "form", "explode": false, "schema": { "type": "array", "items": { - "type": "string", - "enum": [ - "tf_policy_set_outcomes" - ] + "type": "string" } - }, - "required": false, - "description": "Comma-separated list of related resources to include." + } } ], "responses": { "200": { - "description": "Terraform Policy evaluation details", + "description": "Variable details", "content": { "application/vnd.api+json": { "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/tf-policy-evaluations-envelope" - }, - { - "type": "object", - "properties": { - "included": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/tf-policy-set-outcome" - } - ] - } - } - } - } - ] + "$ref": "#/components/schemas/vars-envelope" } } } @@ -12158,20 +12606,24 @@ } } } - } - }, - "/tf-policy-evaluations/{id}/actions/override": { - "x-vis": [ - "public-beta" - ], - "post": { - "operationId": "overrideTfPolicyEvaluation", - "summary": "Override a Terraform Policy Evaluation", - "description": "Override a mandatory-overridable Terraform Policy evaluation to allow the run to continue.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + }, + "patch": { + "operationId": "updateVarsetVar", + "summary": "Update a Variable in a Variable Set", + "description": "Update attributes of an existing variable in a variable set.", "tags": [ - "tf-policy-evaluations" + "varsets" ], "parameters": [ + { + "in": "path", + "name": "varset_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the variable set." + }, { "in": "path", "name": "id", @@ -12179,43 +12631,26 @@ "type": "string" }, "required": true, - "description": "The ID of the Terraform Policy evaluation to override." + "description": "The ID of the variable to update." } ], "requestBody": { - "required": false, + "required": true, "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "comment": { - "type": "string", - "nullable": true, - "description": "An optional comment explaining the reason for overriding the Terraform Policy evaluation." - } - } + "$ref": "#/components/schemas/vars-envelope" } } } }, "responses": { "200": { - "description": "Terraform Policy evaluation successfully overridden", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/tf-policy-evaluations-envelope" - } - } - } - }, - "409": { - "description": "The Terraform Policy evaluation is not in an overridable state.", + "description": "Variable updated", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/vars-envelope" } } } @@ -12231,110 +12666,37 @@ } } } - } - }, - "/tf-policy-evaluations/{tf_policy_evaluation_id}/tf-policy-set-outcomes": { - "x-vis": [ - "public-beta" - ], - "get": { - "operationId": "listTfPolicyEvaluationTfPolicySetOutcomes", - "summary": "List Terraform Policy Set Outcomes for a Terraform Policy Evaluation", - "description": "List the Terraform Policy set outcomes associated with a Terraform Policy evaluation. Supports filtering via the `filter` parameter.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + }, + "delete": { + "operationId": "deleteVarsetVar", + "summary": "Delete a Variable from a Variable Set", + "description": "Delete a variable from a variable set.", "tags": [ - "tf-policy-evaluations" + "varsets" ], "parameters": [ { "in": "path", - "name": "tf_policy_evaluation_id", + "name": "varset_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the Terraform Policy evaluation to list Terraform Policy set outcomes for." + "description": "The ID of the variable set." }, { - "in": "query", - "name": "filter", - "style": "deepObject", - "explode": true, - "required": false, + "in": "path", + "name": "id", "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "passed", - "failed", - "errored", - "unknown" - ], - "description": "Filter outcomes by status." - }, - "enforcement_level": { - "type": "string", - "enum": [ - "advisory", - "mandatory", - "mandatory_overridable" - ], - "description": "Filter outcomes by enforcement level." - } - } - } + "type": "string" }, - "description": "Filter outcomes using OR-grouped AND conditions. Each numeric index defines\nan independent AND-condition group; groups are combined with OR.\n\nExample — return outcomes that are errored OR (failed + mandatory) OR (failed + mandatory_overridable):\n```\nfilter[0][status]=errored\n&filter[1][status]=failed&filter[1][enforcement_level]=mandatory\n&filter[2][status]=failed&filter[2][enforcement_level]=mandatory_overridable\n```\n" - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "required": true, + "description": "The ID of the variable to delete." } ], "responses": { - "200": { - "description": "List of Terraform Policy set outcomes", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tf-policy-set-outcome" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } - } - } - } - }, - "400": { - "description": "Invalid filter provided", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } + "204": { + "description": "Variable deleted successfully" }, "default": { "description": "Error details", @@ -12349,18 +12711,33 @@ } } }, - "/tf-policy-set-outcomes/{id}": { - "x-vis": [ - "public-beta" - ], + "/workspaces/{workspace_id}/varsets/{varset_id}/relationships/vars/{id}": { "get": { - "operationId": "getTfPolicySetOutcome", - "summary": "Show a Terraform Policy Set Outcome", - "description": "Get details about a specific Terraform Policy set outcome.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "operationId": "showWorkspaceVarsetVar", + "summary": "Show a Variable in a Variable Set (Workspace Context)", + "description": "Show details of a variable in a variable set, with overwrite context from the specified workspace.", "tags": [ - "tf-policy-evaluations" + "varsets" ], "parameters": [ + { + "in": "path", + "name": "workspace_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the workspace providing overwrite context." + }, + { + "in": "path", + "name": "varset_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the variable set." + }, { "in": "path", "name": "id", @@ -12368,16 +12745,29 @@ "type": "string" }, "required": true, - "description": "The ID of the Terraform Policy set outcome to show." + "description": "The ID of the variable." + }, + { + "in": "query", + "name": "fields[vars]", + "description": "Return only the specified fields for vars resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Terraform Policy set outcome details", + "description": "Variable details with workspace overwrite context", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/tf-policy-set-outcomes-envelope" + "$ref": "#/components/schemas/vars-envelope" } } } @@ -12395,34 +12785,56 @@ } } }, - "/policy-sets/{policy_set_id}/parameters": { + "/workspaces/{workspace_id}/varsets/{varset_id}/relationships/vars": { "get": { - "operationId": "listPolicySetParams", - "summary": "List Policy Set Parameters", - "description": "List parameters belonging to a policy set.", + "operationId": "listWorkspaceVarsetVars", + "summary": "List Variables in a Variable Set (Workspace Context)", + "description": "List all variables in a variable set, with overwrite context from the specified workspace.", "tags": [ - "policy-set-params" + "varsets" ], "parameters": [ { "in": "path", - "name": "policy_set_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set." + "description": "The ID of the workspace providing overwrite context." + }, + { + "in": "path", + "name": "varset_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the variable set." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[vars]", + "description": "Return only the specified fields for vars resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of policy set parameters", + "description": "List of variables in the variable set with workspace overwrite context", "content": { "application/vnd.api+json": { "schema": { @@ -12437,6 +12849,9 @@ "$ref": "#/components/schemas/vars" } }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, "meta": { "type": "object", "properties": { @@ -12444,9 +12859,6 @@ "$ref": "#/components/schemas/pagination" } } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" } } } @@ -12464,23 +12876,25 @@ } } } - }, + } + }, + "/varsets/{varset_id}/relationships/projects": { "post": { - "operationId": "createPolicySetParam", - "summary": "Create a Policy Set Parameter", - "description": "Create a new parameter for a policy set.", + "operationId": "applyVarsetToProjects", + "summary": "Apply Variable Set to Projects", + "description": "Apply a variable set to one or more projects. When you apply a variable set to a project, all the workspaces in that project will have the variable set applied to them.", "tags": [ - "policy-set-params" + "varsets" ], "parameters": [ { "in": "path", - "name": "policy_set_id", + "name": "varset_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set." + "description": "The ID of the variable set." } ], "requestBody": { @@ -12488,21 +12902,14 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/vars-envelope" + "$ref": "#/components/schemas/projects-identifier-array-document" } } } }, "responses": { - "201": { - "description": "Policy set parameter created", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/vars-envelope" - } - } - } + "204": { + "description": "Variable set successfully applied to the requested projects." }, "default": { "description": "Error details", @@ -12515,46 +12922,38 @@ } } } - } - }, - "/policy-sets/{policy_set_id}/parameters/{id}": { - "get": { - "operationId": "getPolicySetParam", - "summary": "Get a Policy Set Parameter", - "description": "Get details about a policy set parameter.", + }, + "delete": { + "operationId": "removeVarsetFromProjects", + "summary": "Remove Variable Set from Projects", + "description": "Remove a variable set from one or more projects.", "tags": [ - "policy-set-params" + "varsets" ], "parameters": [ { "in": "path", - "name": "policy_set_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the policy set." - }, - { - "in": "path", - "name": "id", + "name": "varset_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the parameter." + "description": "The ID of the variable set." } ], - "responses": { - "200": { - "description": "Policy set parameter details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/vars-envelope" - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/projects-identifier-array-document" } } + } + }, + "responses": { + "204": { + "description": "Variable set successfully removed from the requested projects." }, "default": { "description": "Error details", @@ -12567,32 +12966,25 @@ } } } - }, - "patch": { - "operationId": "updatePolicySetParam", - "summary": "Update a Policy Set Parameter", - "description": "Update an existing policy set parameter.", + } + }, + "/varsets/{varset_id}/relationships/workspaces": { + "post": { + "operationId": "applyVarsetToWorkspaces", + "summary": "Apply Variable Set to Workspaces", + "description": "Apply a variable set to one or more workspaces.", "tags": [ - "policy-set-params" + "varsets" ], "parameters": [ { "in": "path", - "name": "policy_set_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the policy set." - }, - { - "in": "path", - "name": "id", + "name": "varset_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the parameter to update." + "description": "The ID of the variable set." } ], "requestBody": { @@ -12600,21 +12992,14 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/vars-envelope" + "$ref": "#/components/schemas/workspaces-identifier-array-document" } } } }, "responses": { - "200": { - "description": "Policy set parameter updated", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/vars-envelope" - } - } - } + "204": { + "description": "Variable set successfully applied to the requested workspaces." }, "default": { "description": "Error details", @@ -12629,35 +13014,36 @@ } }, "delete": { - "operationId": "deletePolicySetParam", - "summary": "Delete a Policy Set Parameter", - "description": "Delete a policy set parameter.", + "operationId": "removeVarsetFromWorkspaces", + "summary": "Remove Variable Set from Workspaces", + "description": "Remove a variable set from one or more workspaces.", "tags": [ - "policy-set-params" + "varsets" ], "parameters": [ { "in": "path", - "name": "policy_set_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the policy set." - }, - { - "in": "path", - "name": "id", + "name": "varset_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the parameter to delete." + "description": "The ID of the variable set." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspaces-identifier-array-document" + } + } + } + }, "responses": { "204": { - "description": "Policy set parameter deleted" + "description": "Variable set successfully removed from the requested workspaces." }, "default": { "description": "Error details", @@ -12672,35 +13058,38 @@ } } }, - "/policy-sets/{policy_set_id}": { - "get": { - "operationId": "getPolicySet", - "summary": "Get a Policy Set", - "description": "Get details about a specific policy set.", + "/varsets/{varset_id}/relationships/stacks": { + "post": { + "operationId": "applyVarsetToStacks", + "summary": "Apply Variable Set to Stacks", + "description": "Apply a variable set to one or more Stacks. Only available in HCP Terraform.", "tags": [ - "policy-sets" + "varsets" ], "parameters": [ { "in": "path", - "name": "policy_set_id", + "name": "varset_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set." + "description": "The ID of the variable set." } ], - "responses": { - "200": { - "description": "Policy set details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/policy-sets-envelope" - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/jsonapi-identifier-array-document" } } + } + }, + "responses": { + "204": { + "description": "Variable set successfully applied to the requested Stacks." }, "default": { "description": "Error details", @@ -12714,22 +13103,22 @@ } } }, - "patch": { - "operationId": "updatePolicySet", - "summary": "Update a Policy Set", - "description": "Update an existing policy set.", + "delete": { + "operationId": "removeVarsetFromStacks", + "summary": "Remove Variable Set from Stacks", + "description": "Remove a variable set from one or more Stacks.", "tags": [ - "policy-sets" + "varsets" ], "parameters": [ { "in": "path", - "name": "policy_set_id", + "name": "varset_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set." + "description": "The ID of the variable set." } ], "requestBody": { @@ -12737,21 +13126,14 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/policy-sets-envelope" + "$ref": "#/components/schemas/jsonapi-identifier-array-document" } } } }, "responses": { - "200": { - "description": "Policy set updated", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/policy-sets-envelope" - } - } - } + "204": { + "description": "Variable set successfully removed from the requested Stacks." }, "default": { "description": "Error details", @@ -12764,28 +13146,99 @@ } } } - }, - "delete": { - "operationId": "deletePolicySet", - "summary": "Delete a Policy Set", - "description": "Delete a policy set. Deleting a policy set does not delete the policies it contains.", - "tags": [ - "policy-sets" + } + }, + "/projects/{project_id}/varsets": { + "get": { + "operationId": "listProjectVarsets", + "summary": "List Variable Sets for a Project", + "description": "List all variable sets for a project. This includes global variable sets from the project's organization.", + "tags": [ + "varsets" ], "parameters": [ { "in": "path", - "name": "policy_set_id", + "name": "project_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set." + "description": "The ID of the project." + }, + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + }, + "required": false, + "description": "A search query string. You can search for a variable set using its name." + }, + { + "in": "query", + "name": "scope", + "schema": { + "type": "string", + "enum": [ + "applied", + "shared", + "owned", + "all" + ] + }, + "required": false, + "description": "Filter variable sets by scope relative to the project." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[varsets]", + "description": "Return only the specified fields for varsets resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { - "204": { - "description": "Policy set deleted" + "200": { + "description": "List of variable sets for the project", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/varsets" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } + } + } + } }, "default": { "description": "Error details", @@ -12800,66 +13253,56 @@ } } }, - "/organizations/{organization_name}/policy-sets": { + "/workspaces/{workspace_id}/varsets": { "get": { - "operationId": "listPolicySets", - "summary": "List Policy Sets", - "description": "List all policy sets in an organization.", + "operationId": "listWorkspaceVarsets", + "summary": "List Variable Sets for a Workspace", + "description": "List all variable sets for a workspace. This includes global variable sets from the workspace's organization and variable sets attached to the project this workspace is contained within.", "tags": [ - "policy-sets" + "varsets" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization." - }, - { - "in": "query", - "name": "filter[versioned]", - "schema": { - "type": "boolean" - }, - "required": false, - "description": "If true, only return versioned policy sets. If false, only return non-versioned policy sets." - }, - { - "in": "query", - "name": "filter[kind]", - "schema": { - "type": "string", - "enum": [ - "sentinel", - "opa", - "tfpolicy" - ] - }, - "required": false, - "description": "Filter policy sets by kind.\n\n**Note:** The following kind values are in public-beta:\n- `tfpolicy` - Terraform Policy enforcement\n" + "description": "The ID of the workspace." }, { "in": "query", - "name": "search[name]", + "name": "q", "schema": { "type": "string" }, "required": false, - "description": "Filter policy sets by name." + "description": "A search query string. You can search for a variable set using its name." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[varsets]", + "description": "Return only the specified fields for varsets resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of policy sets", + "description": "List of variable sets for the workspace", "content": { "application/vnd.api+json": { "schema": { @@ -12868,9 +13311,12 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/policy-sets" + "$ref": "#/components/schemas/varsets" } }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, "meta": { "type": "object", "properties": { @@ -12878,9 +13324,6 @@ "$ref": "#/components/schemas/pagination" } } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" } } } @@ -12898,42 +13341,114 @@ } } } - }, - "post": { - "operationId": "createPolicySet", - "summary": "Create a Policy Set", - "description": "Create a new policy set in an organization.", + } + }, + "/workspaces/{workspace_id}/resources": { + "get": { + "operationId": "listWorkspaceResources", + "summary": "List Workspace Resources", + "description": "List all resources in a workspace's current state.", "tags": [ - "policy-sets" + "workspaces" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/policy-sets-envelope" + "description": "The ID of the workspace to retrieve resources from." + }, + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + }, + "required": false, + "description": "Optional search query to filter resources by address pattern." + }, + { + "in": "query", + "name": "sort", + "schema": { + "type": "string", + "enum": [ + "name:asc", + "name:desc", + "nameIndex:asc", + "nameIndex:desc", + "provider:asc", + "provider:desc", + "providerType:asc", + "providerType:desc", + "module:asc", + "module:desc", + "updatedAt:asc", + "updatedAt:desc" + ] + }, + "required": false, + "description": "Optional sort parameter. Allows sorting workspace resources by name, nameIndex, provider, providerType, module, or updatedAt. Format is \"field:order\" where order is \"asc\" or \"desc\".\n" + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[resources]", + "description": "Return only the specified fields for resources resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "201": { - "description": "Policy set created", + "200": { + "description": "List of workspace resources", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/policy-sets-envelope" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/workspace-resource" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } + } + } + } + }, + "404": { + "description": "Workspace not found or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } @@ -12951,38 +13466,136 @@ } } }, - "/policy-sets/{policy_set_id}/relationships/workspaces": { - "post": { - "operationId": "addPolicySetWorkspaces", - "summary": "Add Workspaces to a Policy Set", - "description": "Add workspaces to a policy set. Relationships are additive; existing workspace memberships are preserved.", + "/workspaces/{workspace_id}": { + "get": { + "operationId": "getWorkspace", + "summary": "Get a Workspace", + "description": "Get details of a specific workspace by its external ID.", "tags": [ - "policy-sets" + "workspaces" ], "parameters": [ { "in": "path", - "name": "policy_set_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-identifier-array-document" + "description": "The external ID of the workspace." + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "agent_pool", + "current_assessment_result", + "current_configuration_version", + "current_configuration_version.ingress_attributes", + "current_run", + "current_run.apply", + "current_run.plan", + "current_run.configuration_version", + "current_run.configuration_version.ingress_attributes", + "current_state_version", + "current_state_version.resources_processed", + "latest_run", + "latest_run.plan", + "latest_run.configuration_version", + "latest_run.configuration_version.ingress_attributes", + "locked_by", + "no_code_module_version", + "no_code_module_version.no_code_module", + "no_code_module_version.no_code_module.latest_version", + "organization", + "outputs", + "project", + "readme", + "vars", + "effective_tag_bindings" + ] + } + }, + "required": false, + "description": "Optionally side-load relationships.\n" + }, + { + "in": "query", + "name": "fields[workspaces]", + "description": "Return only the specified fields for workspaces resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "204": { - "description": "Workspaces successfully added to policy set." + "200": { + "description": "Workspace details", + "content": { + "application/vnd.api+json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/workspaces-envelope" + }, + { + "type": "object", + "properties": { + "included": { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/no-code-module-versions" + }, + { + "$ref": "#/components/schemas/no-code-modules" + }, + { + "$ref": "#/components/schemas/workspace-readme" + }, + { + "$ref": "#/components/schemas/workspace-outputs" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "no-code-module-versions": "#/components/schemas/no-code-module-versions", + "no-code-modules": "#/components/schemas/no-code-modules", + "workspace-readme": "#/components/schemas/workspace-readme", + "workspace-outputs": "#/components/schemas/workspace-outputs" + } + } + } + } + } + } + ] + } + } + } + }, + "404": { + "description": "Workspace not found or user unauthorized to view workspace", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } }, "default": { "description": "Error details", @@ -12996,22 +13609,22 @@ } } }, - "delete": { - "operationId": "removePolicySetWorkspaces", - "summary": "Remove Workspaces from a Policy Set", - "description": "Remove workspaces from a policy set. Workspaces not currently in the set are ignored.", + "patch": { + "operationId": "updateWorkspace", + "summary": "Update a Workspace", + "description": "Update settings of an existing workspace.", "tags": [ - "policy-sets" + "workspaces" ], "parameters": [ { "in": "path", - "name": "policy_set_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set." + "description": "The external ID of the workspace." } ], "requestBody": { @@ -13019,17 +13632,24 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspaces-identifier-array-document" + "$ref": "#/components/schemas/workspaces-envelope" } } } }, "responses": { - "204": { - "description": "Workspaces successfully removed from policy set." + "200": { + "description": "Workspace updated", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspaces-envelope" + } + } + } }, - "default": { - "description": "Error details", + "404": { + "description": "Workspace not found or user unauthorized to view workspace", "content": { "application/vnd.api+json": { "schema": { @@ -13037,42 +13657,16 @@ } } } - } - } - } - }, - "/policy-sets/{policy_set_id}/relationships/policies": { - "post": { - "operationId": "addPolicySetPolicies", - "summary": "Add Policies to a Policy Set", - "description": "Add policies to a policy set. Relationships are additive; existing policy memberships are preserved.", - "tags": [ - "policy-sets" - ], - "parameters": [ - { - "in": "path", - "name": "policy_set_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the policy set." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/policies-identifier-array-document" + }, + "422": { + "description": "Malformed request body", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } } } - } - }, - "responses": { - "204": { - "description": "Policies successfully added to policy set." }, "default": { "description": "Error details", @@ -13087,36 +13681,36 @@ } }, "delete": { - "operationId": "removePolicySetPolicies", - "summary": "Remove Policies from a Policy Set", - "description": "Remove policies from a policy set. Policies not currently in the set are ignored.", + "operationId": "deleteWorkspace", + "summary": "Delete a Workspace", + "description": "Delete a workspace. This permanently removes the workspace and all its associated data including runs, state versions, and configuration versions.\n", "tags": [ - "policy-sets" + "workspaces" ], "parameters": [ { "in": "path", - "name": "policy_set_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set." + "description": "The external ID of the workspace." } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/policies-identifier-array-document" - } - } - } - }, "responses": { "204": { - "description": "Policies successfully removed from policy set." + "description": "Workspace deleted" + }, + "404": { + "description": "Workspace not found or user unauthorized to delete workspace", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } }, "default": { "description": "Error details", @@ -13131,82 +13725,65 @@ } } }, - "/policy-sets/{policy_set_id}/relationships/projects": { + "/workspaces/{workspace_id}/actions/lock": { "post": { - "operationId": "addPolicySetProjects", - "summary": "Add Projects to a Policy Set", - "description": "Add projects to a policy set. Relationships are additive; existing project memberships are preserved.", + "operationId": "lockWorkspace", + "summary": "Lock a Workspace", + "description": "Lock a workspace. A workspace can only be locked by one entity at a time. Returns a conflict error if the workspace is already locked.\n", "tags": [ - "policy-sets" + "workspaces" ], "parameters": [ { "in": "path", - "name": "policy_set_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set." + "description": "The external ID of the workspace." } ], "requestBody": { - "required": true, + "required": false, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/projects-identifier-array-document" + "$ref": "#/components/schemas/action-reason" } } } }, "responses": { - "204": { - "description": "Projects successfully added to policy set." - }, - "default": { - "description": "Error details", - "content": { + "200": { + "description": "Workspace locked successfully", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspaces-envelope" + } + } + } + }, + "404": { + "description": "Workspace not found or user unauthorized to lock workspace", + "content": { "application/vnd.api+json": { "schema": { "$ref": "#/components/schemas/errors" } } } - } - } - }, - "delete": { - "operationId": "removePolicySetProjects", - "summary": "Remove Projects from a Policy Set", - "description": "Remove projects from a policy set. Projects not currently in the set are ignored.", - "tags": [ - "policy-sets" - ], - "parameters": [ - { - "in": "path", - "name": "policy_set_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the policy set." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/projects-identifier-array-document" + }, + "409": { + "description": "Workspace is already locked", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } } } - } - }, - "responses": { - "204": { - "description": "Projects successfully removed from policy set." }, "default": { "description": "Error details", @@ -13221,41 +13798,38 @@ } } }, - "/policy-sets/{policy_set_id}/relationships/workspace-exclusions": { + "/workspaces/{workspace_id}/actions/unlock": { "post": { - "operationId": "addPolicySetWorkspaceExclusions", - "summary": "Add Workspace Exclusions to a Policy Set", - "description": "Add workspace exclusions to a policy set. Excluded workspaces will not have the policy set applied to them even if the set is global.", + "operationId": "unlockWorkspace", + "summary": "Unlock a Workspace", + "description": "Unlock a workspace. Users can unlock a workspace if they locked it. Unlocking a workspace locked by another user requires force-unlock. Returns a conflict error if the workspace is not locked by the requesting user.\n", "tags": [ - "policy-sets" + "workspaces" ], "parameters": [ { "in": "path", - "name": "policy_set_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set." + "description": "The external ID of the workspace." } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-identifier-array-document" + "responses": { + "200": { + "description": "Workspace unlocked successfully", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspaces-envelope" + } } } - } - }, - "responses": { - "204": { - "description": "Workspace exclusions successfully added to policy set." }, - "default": { - "description": "Error details", + "404": { + "description": "Workspace not found or user unauthorized to unlock workspace", "content": { "application/vnd.api+json": { "schema": { @@ -13263,40 +13837,16 @@ } } } - } - } - }, - "delete": { - "operationId": "removePolicySetWorkspaceExclusions", - "summary": "Remove Workspace Exclusions from a Policy Set", - "description": "Remove workspace exclusions from a policy set. Workspace exclusions not currently in the set are ignored.", - "tags": [ - "policy-sets" - ], - "parameters": [ - { - "in": "path", - "name": "policy_set_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the policy set." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspaces-identifier-array-document" + }, + "409": { + "description": "Workspace is locked by another user", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } } } - } - }, - "responses": { - "204": { - "description": "Workspace exclusions successfully removed from policy set." }, "default": { "description": "Error details", @@ -13311,41 +13861,38 @@ } } }, - "/policy-sets/{policy_set_id}/relationships/project-exclusions": { + "/workspaces/{workspace_id}/actions/force-unlock": { "post": { - "operationId": "addPolicySetProjectExclusions", - "summary": "Add Project Exclusions to a Policy Set", - "description": "Add project exclusions to a policy set. Excluded projects will not have the policy set applied to them even if the set is global.", + "operationId": "forceUnlockWorkspace", + "summary": "Force Unlock a Workspace", + "description": "Forcibly unlock a workspace regardless of who locked it. This action requires elevated permissions and should be used with caution.\n", "tags": [ - "policy-sets" + "workspaces" ], "parameters": [ { "in": "path", - "name": "policy_set_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set." + "description": "The external ID of the workspace." } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/projects-identifier-array-document" + "responses": { + "200": { + "description": "Workspace force-unlocked successfully", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspaces-envelope" + } } } - } - }, - "responses": { - "204": { - "description": "Project exclusions successfully added to policy set." }, - "default": { - "description": "Error details", + "404": { + "description": "Workspace not found or user unauthorized to force-unlock workspace", "content": { "application/vnd.api+json": { "schema": { @@ -13353,40 +13900,6 @@ } } } - } - } - }, - "delete": { - "operationId": "removePolicySetProjectExclusions", - "summary": "Remove Project Exclusions from a Policy Set", - "description": "Remove project exclusions from a policy set. project exclusions not currently in the set are ignored.", - "tags": [ - "policy-sets" - ], - "parameters": [ - { - "in": "path", - "name": "policy_set_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the policy set." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/projects-identifier-array-document" - } - } - } - }, - "responses": { - "204": { - "description": "Project exclusions successfully removed from policy set." }, "default": { "description": "Error details", @@ -13401,72 +13914,31 @@ } } }, - "/policy-sets/{policy_set_id}/tag-selectors": { - "x-vis": [ - "public-beta" - ], + "/workspaces/{workspace_id}/actions/safe-delete": { "post": { - "operationId": "addPolicySetTagSelectors", - "summary": "Add Tag Selectors to a Policy Set", - "description": "Add tag selectors to a policy set. Tag selectors define tag-based scoping rules for the policy set.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "operationId": "safeDeleteWorkspace", + "summary": "Safe Delete a Workspace", + "description": "Delete a workspace only if it has no resources under management. Returns a conflict error if the workspace has managed resources or is locked.\n", "tags": [ - "policy-sets" + "workspaces" ], "parameters": [ { "in": "path", - "name": "policy_set_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set." + "description": "The external ID of the workspace." } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "properties": { - "tag-key": { - "type": "string", - "description": "The tag key to match." - }, - "tag-value": { - "type": "string", - "nullable": true, - "description": "The tag value to match." - }, - "is-exclude": { - "type": "boolean", - "description": "Whether this selector excludes matching workspaces." - } - }, - "required": [ - "tag-key", - "tag-value", - "is-exclude" - ] - } - } - } - } - } - } - }, "responses": { "204": { - "description": "Tag selectors successfully added to policy set." + "description": "Workspace deleted" }, "404": { - "description": "Policy set not found or feature not enabled.", + "description": "Workspace not found or user unauthorized to delete workspace", "content": { "application/vnd.api+json": { "schema": { @@ -13475,8 +13947,8 @@ } } }, - "422": { - "description": "Validation error, e.g. tag-based scoping conflicts with explicit associations.", + "409": { + "description": "Workspace has managed resources or is locked and cannot be safely deleted", "content": { "application/vnd.api+json": { "schema": { @@ -13496,69 +13968,50 @@ } } } - }, - "delete": { - "operationId": "removePolicySetTagSelectors", - "summary": "Remove Tag Selectors from a Policy Set", - "description": "Remove tag selectors from a policy set by their tag key and value.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + } + }, + "/workspaces/{workspace_id}/actions/assess": { + "post": { + "operationId": "assessWorkspace", + "summary": "Trigger a Workspace Assessment", + "description": "Trigger a drift detection assessment for a workspace. The workspace must have assessments enabled and not have a pending assessment already running.\n", "tags": [ - "policy-sets" + "workspaces" ], "parameters": [ { "in": "path", - "name": "policy_set_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set." + "description": "The external ID of the workspace." } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "properties": { - "tag-key": { - "type": "string", - "description": "The tag key to match." - }, - "tag-value": { - "type": "string", - "nullable": true, - "description": "The tag value to match." - }, - "is-exclude": { - "type": "boolean", - "description": "Whether this selector excludes matching workspaces." - } - }, - "required": [ - "tag-key", - "tag-value", - "is-exclude" - ] - } - } + "responses": { + "200": { + "description": "Assessment triggered successfully", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspaces-envelope" } } } - } - }, - "responses": { - "204": { - "description": "Tag selectors successfully removed from policy set." }, "404": { - "description": "Policy set not found or feature not enabled.", + "description": "Workspace not found or user unauthorized to manage assessments", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "409": { + "description": "Assessment cannot be triggered in the current workspace state", "content": { "application/vnd.api+json": { "schema": { @@ -13580,45 +14033,73 @@ } } }, - "/policy-sets/{policy_set_id}/versions": { + "/workspaces/{workspace_id}/relationships/remote-state-consumers": { "get": { - "operationId": "listPolicySetVersions", - "summary": "List Policy Set Versions", - "description": "List all versions of a policy set.", + "operationId": "listWorkspaceRemoteStateConsumers", + "summary": "List Remote State Consumers", + "description": "List the workspaces that are allowed to access this workspace's state. When global-remote-state is enabled on the workspace, this lists all workspaces in the organization; otherwise, it lists only the explicitly allowed consumers.\n", "tags": [ - "policy-set-versions" + "workspaces" ], "parameters": [ { "in": "path", - "name": "policy_set_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set." + "description": "The external ID of the workspace." + }, + { + "in": "query", + "name": "show_only_configured", + "schema": { + "type": "boolean" + }, + "required": false, + "description": "When true, return only explicitly configured remote state consumers even if global-remote-state is enabled.\n" }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[workspaces]", + "description": "Return only the specified fields for workspaces resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of policy set versions", + "description": "List of workspaces that can consume this workspace's remote state", "content": { "application/vnd.api+json": { "schema": { "type": "object", + "required": [ + "data" + ], "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/policy-set-versions" + "$ref": "#/components/schemas/workspaces" } }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, "meta": { "type": "object", "properties": { @@ -13626,15 +14107,22 @@ "$ref": "#/components/schemas/pagination" } } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" } } } } } }, + "404": { + "description": "Workspace not found or user unauthorized to view workspace", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, "default": { "description": "Error details", "content": { @@ -13648,30 +14136,43 @@ } }, "post": { - "operationId": "createPolicySetVersion", - "summary": "Create a Policy Set Version", - "description": "Create a new version for a policy set. The version will be in a pending state until policies are uploaded to it.", + "operationId": "addWorkspaceRemoteStateConsumers", + "summary": "Add Remote State Consumers", + "description": "Add workspaces to the list of allowed remote state consumers.", "tags": [ - "policy-set-versions" + "workspaces" ], "parameters": [ { "in": "path", - "name": "policy_set_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set." + "description": "The external ID of the workspace." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspaces-identifier-array-document" + } + } + } + }, "responses": { - "201": { - "description": "Policy set version created", + "204": { + "description": "Remote state consumers updated" + }, + "404": { + "description": "Workspace not found or user unauthorized to manage remote state consumers", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/policy-set-versions-envelope" + "$ref": "#/components/schemas/errors" } } } @@ -13687,34 +14188,45 @@ } } } - } - }, - "/policy-set-versions/{policy_set_version_id}": { - "get": { - "operationId": "getPolicySetVersion", - "summary": "Get a Policy Set Version", - "description": "Get details about a specific policy set version.", + }, + "patch": { + "operationId": "replaceWorkspaceRemoteStateConsumers", + "summary": "Replace Remote State Consumers", + "description": "Replace the entire list of allowed remote state consumers with the provided list.", "tags": [ - "policy-set-versions" + "workspaces" ], "parameters": [ { "in": "path", - "name": "policy_set_version_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set version." + "description": "The external ID of the workspace." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspaces-identifier-array-document" + } + } + } + }, "responses": { - "200": { - "description": "Policy set version details", + "204": { + "description": "Remote state consumers replaced" + }, + "404": { + "description": "Workspace not found or user unauthorized to manage remote state consumers", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/policy-set-versions-envelope" + "$ref": "#/components/schemas/errors" } } } @@ -13730,34 +14242,45 @@ } } } - } - }, - "/policy-evaluations/{policy_evaluation_id}": { - "get": { - "operationId": "getPolicyEvaluation", - "summary": "Show a Policy Evaluation", - "description": "Get details about a specific policy evaluation.", + }, + "delete": { + "operationId": "removeWorkspaceRemoteStateConsumers", + "summary": "Remove Remote State Consumers", + "description": "Remove workspaces from the list of allowed remote state consumers.", "tags": [ - "policy-evaluations" + "workspaces" ], "parameters": [ { "in": "path", - "name": "policy_evaluation_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy evaluation to show." + "description": "The external ID of the workspace." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspaces-identifier-array-document" + } + } + } + }, "responses": { - "200": { - "description": "Policy evaluation details", + "204": { + "description": "Remote state consumers removed" + }, + "404": { + "description": "Workspace not found or user unauthorized to manage remote state consumers", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/policy-evaluations-envelope" + "$ref": "#/components/schemas/errors" } } } @@ -13775,63 +14298,48 @@ } } }, - "/policy-evaluations/{policy_evaluation_id}/policy-set-outcomes": { - "get": { - "operationId": "listPolicySetOutcomes", - "summary": "List Policy Set Outcomes", - "description": "List the policy set outcomes associated with a policy evaluation.", + "/workspaces/{workspace_id}/relationships/ssh-key": { + "patch": { + "operationId": "assignWorkspaceSshKey", + "summary": "Assign an SSH Key to a Workspace", + "description": "Assign an SSH key to a workspace for use when cloning VCS repositories. Pass null for the id to unassign the current SSH key.\n", "tags": [ - "policy-evaluations" + "workspaces" ], "parameters": [ { "in": "path", - "name": "policy_evaluation_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy evaluation to list outcomes for." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "description": "The external ID of the workspace." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/ssh-keys-nullable-identifier-document" + } + } + } + }, "responses": { "200": { - "description": "List of policy set outcomes", + "description": "SSH key assignment updated", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/policy-set-outcomes" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } + "$ref": "#/components/schemas/workspaces-envelope" } } } }, - "400": { - "description": "Invalid filter provided", + "404": { + "description": "Workspace or SSH key not found, or user unauthorized", "content": { "application/vnd.api+json": { "schema": { @@ -13853,32 +14361,65 @@ } } }, - "/policy-set-outcomes/{policy_set_outcome_id}": { - "get": { - "operationId": "getPolicySetOutcome", - "summary": "Show a Policy Set Outcome", - "description": "Get details about a specific policy set outcome.", + "/workspaces/{workspace_id}/relationships/vars": { + "patch": { + "operationId": "updateWorkspaceVars", + "summary": "Update Workspace Variables", + "description": "Batch update workspace variables. Provide an array of variable objects to update. Variables are matched by their external ID.\n", "tags": [ - "policy-evaluations" + "workspaces" ], "parameters": [ { "in": "path", - "name": "policy_set_outcome_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the policy set outcome to show." + "description": "The external ID of the workspace." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspace-vars-update-document" + } + } + } + }, "responses": { - "200": { - "description": "Policy set outcome details", + "204": { + "description": "Variables updated" + }, + "400": { + "description": "Too many variables or invalid request", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/policy-set-outcomes-envelope" + "$ref": "#/components/schemas/errors" + } + } + } + }, + "404": { + "description": "Workspace not found or user unauthorized to update variables", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Validation error on one or more variables", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } @@ -13896,57 +14437,55 @@ } } }, - "/task-stages/{task_stage_id}/policy-evaluations": { + "/workspaces/{workspace_id}/relationships/tag-bindings": { "get": { - "operationId": "listTaskStagePolicyEvaluations", - "summary": "List Policy Evaluations for a Task Stage", - "description": "List the policy evaluations associated with a task stage.", + "operationId": "listWorkspaceTagBindings", + "summary": "List Workspace Tags", + "description": "List all tags associated with a workspace.", "tags": [ - "policy-evaluations" + "workspaces" ], "parameters": [ { "in": "path", - "name": "task_stage_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the task stage to list policy evaluations for." - }, - { - "$ref": "#/components/parameters/page_number" + "description": "The ID of the workspace." }, { - "$ref": "#/components/parameters/page_size" + "in": "query", + "name": "fields[tag-bindings]", + "description": "Return only the specified fields for tag-bindings resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of policy evaluations", + "description": "List of tags", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/policy-evaluations" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } + "$ref": "#/components/schemas/tag-bindings-collection" + } + } + } + }, + "404": { + "description": "Workspace not found or user unauthorized to view workspace", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } @@ -13962,33 +14501,45 @@ } } } - } - }, - "/plan-exports": { + }, "post": { - "operationId": "createPlanExport", - "summary": "Create a Plan Export", - "description": "Export data from a plan in the specified format. The export process is asynchronous, and the resulting data becomes downloadable when its status is \"finished\".", + "operationId": "addWorkspaceTagBindings", + "summary": "Add Tag Bindings to a Workspace", + "description": "Add one or more tag bindings to a workspace.", "tags": [ - "plan-exports" + "workspaces" + ], + "parameters": [ + { + "in": "path", + "name": "workspace_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The external ID of the workspace." + } ], "requestBody": { "required": true, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/plan-exports-envelope" + "$ref": "#/components/schemas/tag-bindings-collection" } } } }, "responses": { - "201": { - "description": "Plan export created", + "204": { + "description": "Tags added" + }, + "404": { + "description": "Workspace not found or user unauthorized to manage tags", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/plan-exports-envelope" + "$ref": "#/components/schemas/errors" } } } @@ -14004,34 +14555,45 @@ } } } - } - }, - "/plan-exports/{id}": { - "get": { - "operationId": "showPlanExport", - "summary": "Show a Plan Export", - "description": "Get details about a specific plan export.", + }, + "patch": { + "operationId": "replaceWorkspaceTagBindings", + "summary": "Replace Tag Bindings in a Workspace", + "description": "Replace all tag bindings in a workspace.", "tags": [ - "plan-exports" + "workspaces" ], "parameters": [ { "in": "path", - "name": "id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the plan export to show." + "description": "The ID of the workspace." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/tag-bindings-collection" + } + } + } + }, "responses": { - "200": { - "description": "Plan export details", + "204": { + "description": "Tag bindings replaced" + }, + "404": { + "description": "Workspace not found or user unauthorized to manage tag bindings", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/plan-exports-envelope" + "$ref": "#/components/schemas/errors" } } } @@ -14047,28 +14609,60 @@ } } } - }, - "delete": { - "operationId": "deletePlanExport", - "summary": "Delete a Plan Export", - "description": "Delete the exported plan data. Plan exports expire after one hour, but can be deleted manually.", + } + }, + "/workspaces/{workspace_id}/effective-tag-bindings": { + "get": { + "operationId": "listWorkspaceEffectiveTagBindings", + "summary": "List Workspace Effective Tag Bindings", + "description": "List all effective (inherited and direct) tag bindings for a workspace.", "tags": [ - "plan-exports" + "workspaces" ], "parameters": [ { "in": "path", - "name": "id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the plan export to delete." + "description": "The ID of the workspace." + }, + { + "in": "query", + "name": "fields[effective-tag-bindings]", + "description": "Return only the specified fields for effective-tag-bindings resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { - "204": { - "description": "Plan export deleted successfully" + "200": { + "description": "List of effective tag bindings", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/effective-tag-bindings-envelope-many" + } + } + } + }, + "404": { + "description": "Workspace not found or user unauthorized to view workspace", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } }, "default": { "description": "Error details", @@ -14083,33 +14677,85 @@ } } }, - "/plan-exports/{id}/download": { + "/workspaces/{workspace_id}/relationships/tags": { "get": { - "operationId": "downloadPlanExport", - "summary": "Download exported plan data", - "description": "Generate a temporary URL to the location of the exported plan data in a .tar.gz archive, then redirect to that link.", + "operationId": "listWorkspaceTags", + "summary": "List Workspace Tags", + "description": "List all tags associated with a workspace.", "tags": [ - "plan-exports" + "workspaces" ], "parameters": [ { "in": "path", - "name": "id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the plan export to download." + "description": "The external ID of the workspace." + }, + { + "in": "query", + "name": "fields[tags]", + "description": "Return only the specified fields for tags resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": ".tar.gz file containing the exported plan data.", + "description": "List of tags", "content": { - "application/octet-stream": { + "application/vnd.api+json": { "schema": { - "type": "string", - "format": "binary" + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "tags" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Workspace not found or user unauthorized to view workspace", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } @@ -14125,39 +14771,51 @@ } } } - } - }, - "/assessment-results/{id}": { - "get": { - "summary": "Show an assessment result", - "operationId": "getAssessmentResult", + }, + "post": { + "operationId": "addWorkspaceTags", + "summary": "Add Tags to a Workspace", + "description": "Add one or more tags to a workspace.", "tags": [ - "assessment-results" + "workspaces" ], "parameters": [ { - "name": "id", "in": "path", - "required": true, - "description": "The external ID of the assessment result to show.", + "name": "workspace_id", "schema": { "type": "string" - } + }, + "required": true, + "description": "The external ID of the workspace." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/tags-create-array-document" + } + } + } + }, "responses": { - "200": { - "description": "The request was successful", + "204": { + "description": "Tags added" + }, + "404": { + "description": "Workspace not found or user unauthorized to manage tags", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/assessment-results-envelope" + "$ref": "#/components/schemas/errors" } } } }, "default": { - "description": "Assessment result not found, or user unauthorized to perform action", + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -14167,42 +14825,41 @@ } } } - } - }, - "/assessment-results/{id}/json-output": { - "get": { - "operationId": "getAssessmentResultJSONOutput", - "summary": "Get the JSON assessment output", - "description": "This endpoint returns the JSON formatted assessment output.\nThis is only available when the assessment has succeeded and has JSON output data.\n", + }, + "delete": { + "operationId": "removeWorkspaceTags", + "summary": "Remove Tags from a Workspace", + "description": "Remove one or more tags from a workspace.", + "tags": [ + "workspaces" + ], "parameters": [ { - "name": "id", "in": "path", - "description": "The external ID of the assessment result.", - "required": true, + "name": "workspace_id", "schema": { "type": "string" - } + }, + "required": true, + "description": "The external ID of the workspace." } ], - "tags": [ - "assessment-results" - ], - "responses": { - "200": { - "description": "Assessment result JSON output found and returned.", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": true, - "description": "The JSON formatted assessment output with dynamic structure" - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/tags-remove-array-document" } } + } + }, + "responses": { + "204": { + "description": "Tags removed" }, "404": { - "description": "Assessment result failed or JSON output is not available.", + "description": "Workspace not found or user unauthorized to manage tags", "content": { "application/vnd.api+json": { "schema": { @@ -14224,39 +14881,68 @@ } } }, - "/assessment-results/{id}/json-schema": { + "/workspaces/{workspace_id}/relationships/data-retention-policy": { + "x-vis": [ + "tfe" + ], "get": { - "operationId": "getAssessmentResultJSONSchema", - "summary": "Get the JSON schema", - "description": "This endpoint returns the JSON schema for the assessment result.\nThis is only available when the assessment has succeeded and has provider schemas.\n", + "operationId": "getWorkspaceDataRetentionPolicy", + "summary": "Get Workspace Data Retention Policy", + "description": "Show the data retention policy explicitly set on the workspace.\n\nThis operation is only available in Terraform Enterprise.", + "tags": [ + "workspaces", + "data-retention-policies" + ], "parameters": [ { - "name": "id", "in": "path", - "description": "The external ID of the assessment result.", - "required": true, + "name": "workspace_id", "schema": { "type": "string" + }, + "required": true, + "description": "The external ID of the workspace." + }, + { + "in": "query", + "name": "fields[data-retention-policy-delete-olders]", + "description": "Return only the specified fields for data-retention-policy-delete-olders resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "fields[data-retention-policy-dont-deletes]", + "description": "Return only the specified fields for data-retention-policy-dont-deletes resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } } } ], - "tags": [ - "assessment-results" - ], "responses": { "200": { - "description": "JSON schema found and returned.", + "description": "Workspace data retention policy", "content": { - "application/json": { + "application/vnd.api+json": { "schema": { - "type": "object", - "description": "The JSON schema of the assessment result" + "$ref": "#/components/schemas/data-retention-policy-envelope" } } } }, "404": { - "description": "Assessment result failed or JSON schema is not available.", + "description": "Workspace not found or policy not set", "content": { "application/vnd.api+json": { "schema": { @@ -14276,41 +14962,49 @@ } } } - } - }, - "/assessment-results/{id}/sanitized-plan": { - "get": { - "operationId": "getAssessmentResultSanitizedPlan", - "summary": "Get the sanitized plan", - "description": "This endpoint returns the sanitized plan for the assessment result.\nThis is only available when HYOK is enabled for the organization,\nthe assessment has succeeded, and a sanitized plan is available.\n", + }, + "patch": { + "operationId": "setWorkspaceDataRetentionPolicy", + "summary": "Set Workspace Data Retention Policy", + "description": "Create or update the data retention policy explicitly set on the workspace.\n\nThis operation is only available in Terraform Enterprise.", + "tags": [ + "workspaces", + "data-retention-policies" + ], "parameters": [ { - "name": "id", "in": "path", - "description": "The external ID of the assessment result.", - "required": true, + "name": "workspace_id", "schema": { "type": "string" - } + }, + "required": true, + "description": "The external ID of the workspace." } ], - "tags": [ - "assessment-results" - ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/data-retention-policy-envelope" + } + } + } + }, "responses": { "200": { - "description": "Sanitized plan found and returned.", + "description": "Data retention policy set", "content": { - "application/json": { + "application/vnd.api+json": { "schema": { - "type": "object", - "description": "The sanitized plan output" + "$ref": "#/components/schemas/data-retention-policy-envelope" } } } }, "404": { - "description": "HYOK not available, assessment result failed, or sanitized plan is not available.", + "description": "Workspace not found or user unauthorized", "content": { "application/vnd.api+json": { "schema": { @@ -14319,8 +15013,8 @@ } } }, - "default": { - "description": "Error details", + "422": { + "description": "Malformed request body", "content": { "application/vnd.api+json": { "schema": { @@ -14328,67 +15022,6 @@ } } } - } - } - } - }, - "/assessment-results/{id}/log-output": { - "get": { - "operationId": "getAssessmentResultLogOutput", - "summary": "Get the log output", - "description": "This endpoint returns the log output for the assessment result.\nSupports both JSON and plain text formats based on the Accept header.\nQuery parameters allow for pagination of log output.\n", - "parameters": [ - { - "name": "id", - "in": "path", - "description": "The external ID of the assessment result.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "limit", - "in": "query", - "description": "Maximum number of bytes to return", - "required": false, - "schema": { - "type": "integer" - } - }, - { - "name": "offset", - "in": "query", - "description": "Byte offset to start reading from", - "required": false, - "schema": { - "type": "integer" - } - }, - { - "name": "tail", - "in": "query", - "description": "If true, return the last N bytes instead of the first N bytes", - "required": false, - "schema": { - "type": "boolean" - } - } - ], - "tags": [ - "assessment-results" - ], - "responses": { - "200": { - "description": "Log output returned successfully.", - "content": { - "text/plain": { - "schema": { - "type": "string", - "description": "The log output in plain text format" - } - } - } }, "default": { "description": "Error details", @@ -14401,39 +15034,42 @@ } } } - } - }, - "/applies/{id}": { - "get": { - "summary": "Show an apply", - "operationId": "getApply", + }, + "delete": { + "operationId": "deleteWorkspaceDataRetentionPolicy", + "summary": "Delete Workspace Data Retention Policy", + "description": "Remove the data retention policy explicitly set on the workspace.\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "applies" + "workspaces", + "data-retention-policies" ], "parameters": [ { - "name": "id", "in": "path", - "required": true, - "description": "The ID of the apply to show.", + "name": "workspace_id", "schema": { "type": "string" - } + }, + "required": true, + "description": "The external ID of the workspace." } ], "responses": { - "200": { - "description": "The request was successful", + "204": { + "description": "Data retention policy deleted" + }, + "404": { + "description": "Workspace not found or user unauthorized", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/applies-envelope" + "$ref": "#/components/schemas/errors" } } } }, "default": { - "description": "Apply not found, or user unauthorized to perform action", + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -14445,38 +15081,68 @@ } } }, - "/applies/{id}/errored-state": { + "/workspaces/{workspace_id}/current-state-version": { "get": { - "summary": "Recover a failed state upload after applying", - "operationId": "getApplyErroredState", + "operationId": "getCurrentStateVersion", + "summary": "Get Current State Version", + "description": "Get the current state version for a workspace.", "tags": [ - "applies" + "workspaces" ], "parameters": [ { - "name": "id", "in": "path", - "required": true, - "description": "The ID of the apply to recover state for.", + "name": "workspace_id", "schema": { "type": "string" + }, + "required": true, + "description": "The external ID of the workspace." + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "outputs" + ] + } + }, + "required": false, + "description": "Optionally side-load relationships.\n" + }, + { + "in": "query", + "name": "fields[state-versions]", + "description": "Return only the specified fields for state-versions resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } } } ], "responses": { - "307": { - "description": "Errored state available and user is authorized to read it", - "headers": { - "Location": { - "description": "Storage URL to raw state file", + "200": { + "description": "Current state version details", + "content": { + "application/vnd.api+json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/current-state-version-envelope" } } } }, - "default": { - "description": "Apply not found, errored state not uploaded, or user unauthorized to perform action", + "404": { + "description": "Workspace not found, no current state version exists, or user unauthorized", "content": { "application/vnd.api+json": { "schema": { @@ -14484,35 +15150,6 @@ } } } - } - } - } - }, - "/applies/{id}/actions/soft-delete-backing-data": { - "x-vis": [ - "tfe" - ], - "post": { - "operationId": "softDeleteApplyBackingData", - "summary": "Soft Delete Apply Backing Data", - "description": "Mark the backing files associated with this apply for garbage collection. Terraform permanently deletes backing files after a set number of days unless the apply is restored.\n\nThis operation is only available in Terraform Enterprise.", - "tags": [ - "applies" - ], - "parameters": [ - { - "in": "path", - "name": "id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the apply to mark for garbage collection." - } - ], - "responses": { - "204": { - "description": "Apply backing data marked for garbage collection" }, "default": { "description": "Error details", @@ -14527,34 +15164,51 @@ } } }, - "/applies/{id}/actions/restore-backing-data": { - "x-vis": [ - "tfe" - ], - "post": { - "operationId": "restoreApplyBackingData", - "summary": "Restore Apply Backing Data", - "description": "Restore backing files associated with an apply that was previously marked for garbage collection. This restores the apply back to its finalized state.\n\nThis operation is only available in Terraform Enterprise.", + "/workspaces/{workspace_id}/current-assessment-result": { + "get": { + "operationId": "getCurrentAssessmentResult", + "summary": "Get Current Assessment Result", + "description": "Get the most recent drift detection assessment result for a workspace.", "tags": [ - "applies" + "workspaces" ], "parameters": [ { "in": "path", - "name": "id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the apply to restore." + "description": "The external ID of the workspace." + }, + { + "in": "query", + "name": "fields[assessment-results]", + "description": "Return only the specified fields for assessment-results resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { - "204": { - "description": "Apply backing data restore initiated" + "200": { + "description": "Current assessment result", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/assessment-results-envelope" + } + } + } }, - "default": { - "description": "Error details", + "404": { + "description": "Workspace not found, no current assessment result exists, or user unauthorized", "content": { "application/vnd.api+json": { "schema": { @@ -14562,35 +15216,6 @@ } } } - } - } - } - }, - "/applies/{id}/actions/permanently-delete-backing-data": { - "x-vis": [ - "tfe" - ], - "post": { - "operationId": "permanentlyDeleteApplyBackingData", - "summary": "Permanently Delete Apply Backing Data", - "description": "Permanently delete the backing files associated with an apply that has been soft deleted. This action cannot be undone.\n\nThis operation is only available in Terraform Enterprise.", - "tags": [ - "applies" - ], - "parameters": [ - { - "in": "path", - "name": "id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the apply to permanently delete backing data for." - } - ], - "responses": { - "204": { - "description": "Apply backing data permanently deleted" }, "default": { "description": "Error details", @@ -14605,34 +15230,142 @@ } } }, - "/assessments/{id}/actions/soft-delete-backing-data": { - "x-vis": [ - "tfe" - ], - "post": { - "operationId": "softDeleteAssessmentBackingData", - "summary": "Soft Delete Assessment Backing Data", - "description": "Mark the backing files associated with this assessment for garbage collection. Terraform permanently deletes backing files after a set number of days unless the assessment is restored.\n\nThis operation is only available in Terraform Enterprise.", + "/workspaces/{workspace_id}/applicable-varsets": { + "get": { + "operationId": "listApplicableVarsets", + "summary": "List Applicable Variable Sets", + "description": "List the variable sets that can be applied to a workspace. This returns variable sets from the workspace's organization that are not already applied to the workspace, filtered by project scope.\n", "tags": [ - "assessments" + "workspaces" ], "parameters": [ { "in": "path", - "name": "id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the assessment to mark for garbage collection." + "description": "The external ID of the workspace." + }, + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + }, + "required": false, + "description": "Optional search query to filter variable sets by name." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[varsets]", + "description": "Return only the specified fields for varsets resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { - "204": { - "description": "Assessment backing data marked for garbage collection" + "200": { + "description": "List of applicable variable sets", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "varsets" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string", + "nullable": true + }, + "global": { + "type": "boolean" + }, + "auto-apply": { + "type": "boolean" + }, + "var-count": { + "type": "integer" + }, + "workspace-count": { + "type": "integer" + }, + "project-count": { + "type": "integer" + }, + "created-at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated-at": { + "type": "string", + "format": "date-time", + "readOnly": true + } + } + } + } + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + }, + "status-counts": { + "type": "object", + "additionalProperties": { + "type": "integer" + } + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } }, - "default": { - "description": "Error details", + "404": { + "description": "Workspace not found or user unauthorized to view workspace", "content": { "application/vnd.api+json": { "schema": { @@ -14640,35 +15373,6 @@ } } } - } - } - } - }, - "/assessments/{id}/actions/restore-backing-data": { - "x-vis": [ - "tfe" - ], - "post": { - "operationId": "restoreAssessmentBackingData", - "summary": "Restore Assessment Backing Data", - "description": "Restore backing files associated with an assessment that was previously marked for garbage collection. This restores the assessment back to its finalized state.\n\nThis operation is only available in Terraform Enterprise.", - "tags": [ - "assessments" - ], - "parameters": [ - { - "in": "path", - "name": "id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the assessment to restore." - } - ], - "responses": { - "204": { - "description": "Assessment backing data restore initiated" }, "default": { "description": "Error details", @@ -14683,31 +15387,34 @@ } } }, - "/assessments/{id}/actions/permanently-delete-backing-data": { - "x-vis": [ - "tfe" - ], + "/runs": { "post": { - "operationId": "permanentlyDeleteAssessmentBackingData", - "summary": "Permanently Delete Assessment Backing Data", - "description": "Permanently delete the backing files associated with an assessment that has been soft deleted. This action cannot be undone.\n\nThis operation is only available in Terraform Enterprise.", + "operationId": "createRun", + "summary": "Create a Run", + "description": "Create a new run.", "tags": [ - "assessments" + "runs" ], - "parameters": [ - { - "in": "path", - "name": "id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the assessment to permanently delete backing data for." + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/runs-envelope" + } + } } - ], + }, "responses": { - "204": { - "description": "Assessment backing data permanently deleted" + "201": { + "description": "Run created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/runs-envelope" + } + } + } }, "default": { "description": "Error details", @@ -14720,76 +15427,41 @@ } } } - } - }, - "/cost-estimates/{id}": { + }, "get": { - "summary": "Show a cost estimate", - "operationId": "showCostEstimate", + "operationId": "listRuns", + "summary": "List Runs", + "description": "List all runs in a workspace.", "tags": [ - "cost-estimates" + "runs" ], "parameters": [ { - "name": "id", - "in": "path", - "required": true, - "description": "The ID of the cost estimate to show.", + "in": "query", + "name": "workspace_id", "schema": { "type": "string" - } - } - ], - "responses": { - "200": { - "description": "The request was successful", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/cost-estimates-envelope" - } - } - } + }, + "required": true, + "description": "Workspace ID" }, - "default": { - "description": "Cost estimate not found, or user unauthorized to perform action", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - } - }, - "/state-versions": { - "get": { - "operationId": "listStateVersions", - "summary": "List State Versions for a Workspace", - "description": "List state versions for a workspace, filtered by organization and workspace name.", - "tags": [ - "state-versions" - ], - "parameters": [ { "in": "query", - "name": "filter[workspace][name]", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The name of the workspace to list state versions for." + "description": "Organization Name" }, { "in": "query", - "name": "filter[organization][name]", + "name": "filter[operation]", "schema": { "type": "string" }, - "required": true, - "description": "The name of the organization that owns the workspace." + "required": false, + "description": "Filter by run operation." }, { "in": "query", @@ -14798,18 +15470,31 @@ "type": "string" }, "required": false, - "description": "Filter state versions by status. One or more comma-separated values from pending, finalized, or discarded." + "description": "Filter by run status." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[runs]", + "description": "Return only the specified fields for runs resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of state versions", + "description": "List of runs", "content": { "application/vnd.api+json": { "schema": { @@ -14818,7 +15503,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/state-versions" + "$ref": "#/components/schemas/runs" } }, "meta": { @@ -14850,32 +15535,70 @@ } } }, - "/state-versions/{state_version_id}": { + "/runs/{run_id}": { "get": { - "operationId": "getStateVersion", - "summary": "Show a State Version", - "description": "Show details for a specific state version.", + "operationId": "getRun", + "summary": "Get Run details", + "description": "Get details about a run.", "tags": [ - "state-versions" + "runs" ], "parameters": [ { "in": "path", - "name": "state_version_id", + "name": "run_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the state version to show." + "description": "Run ID" + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "plan", + "apply", + "created_by", + "configuration_version", + "configuration_version.ingress_attributes", + "cost_estimate", + "workspace", + "task_stages", + "tf_policy_evaluations" + ] + } + }, + "required": false, + "description": "Available side-load related resources. Multiple values can be comma-separated.\n\nAvailable includes:\n- `plan` - The plan for this run\n- `apply` - The apply for this run\n- `created_by` - The user who created this run\n- `configuration_version` - The configuration version used\n- `configuration_version.ingress_attributes` - VCS ingress details\n- `cost_estimate` - Cost estimation for this run\n- `workspace` - The workspace this run belongs to\n- `task_stages` - Run task stages\n- `tf_policy_evaluations` - Terraform Policy evaluations *(public-beta)*\n" + }, + { + "in": "query", + "name": "fields[runs]", + "description": "Return only the specified fields for runs resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "State version details", + "description": "Run details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/state-versions-envelope" + "$ref": "#/components/schemas/runs-envelope" } } } @@ -14893,57 +15616,45 @@ } } }, - "/state-versions/{state_version_id}/outputs": { + "/runs/{run_id}/configuration-version": { "get": { - "operationId": "listStateVersionOutputs", - "summary": "List State Version Outputs", - "description": "List the output values associated with a specific state version.", + "operationId": "getRunConfigurationVersion", + "summary": "Get Run Configuration Version", + "description": "Get details of a specific configuration version.", "tags": [ - "state-versions" + "configuration-versions" ], "parameters": [ { "in": "path", - "name": "state_version_id", + "name": "run_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the state version whose outputs to list." - }, - { - "$ref": "#/components/parameters/page_number" + "description": "The ID of the run" }, { - "$ref": "#/components/parameters/page_size" + "in": "query", + "name": "fields[configuration-versions]", + "description": "Return only the specified fields for configuration-versions resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of state version outputs", + "description": "Configuration version details", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/state-version-outputs" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } + "$ref": "#/components/schemas/configuration-versions-envelope" } } } @@ -14961,70 +15672,36 @@ } } }, - "/state-versions/{state_version_id}/actions/soft_delete_backing_data": { - "x-vis": [ - "tfe" - ], - "post": { - "operationId": "softDeleteStateVersionBackingData", - "summary": "Soft Delete State Version Backing Data", - "description": "Mark the backing files associated with this state version for garbage collection. Terraform permanently deletes backing files after a set number of days unless the state version is restored.\n\nThis operation is only available in Terraform Enterprise.", + "/runs/{run_id}/configuration-version/download": { + "get": { + "operationId": "downloadRunConfigurationVersion", + "summary": "Download Run Configuration Version", + "description": "Generate a temporary URL to download the configuration version files.", "tags": [ - "state-versions" + "configuration-versions" ], "parameters": [ { "in": "path", - "name": "state_version_id", + "name": "run_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the state version to mark for garbage collection." + "description": "The ID of the run." } ], "responses": { - "204": { - "description": "State version backing data marked for garbage collection" - }, - "default": { - "description": "Error details", + "200": { + "description": ".tar.gz file containing the configuration version.", "content": { - "application/vnd.api+json": { + "application/octet-stream": { "schema": { - "$ref": "#/components/schemas/errors" + "type": "string", + "format": "binary" } } } - } - } - } - }, - "/state-versions/{state_version_id}/actions/restore_backing_data": { - "x-vis": [ - "tfe" - ], - "post": { - "operationId": "restoreStateVersionBackingData", - "summary": "Restore State Version Backing Data", - "description": "Restore backing files associated with a state version that was previously marked for garbage collection. This restores the state version back to its finalized state.\n\nThis operation is only available in Terraform Enterprise.", - "tags": [ - "state-versions" - ], - "parameters": [ - { - "in": "path", - "name": "state_version_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the state version to restore." - } - ], - "responses": { - "204": { - "description": "State version backing data restore initiated" }, "default": { "description": "Error details", @@ -15039,81 +15716,70 @@ } } }, - "/state-versions/{state_version_id}/actions/permanently_delete_backing_data": { - "x-vis": [ - "tfe" - ], - "post": { - "operationId": "permanentlyDeleteStateVersionBackingData", - "summary": "Permanently Delete State Version Backing Data", - "description": "Permanently delete the backing files associated with a state version that has been soft deleted. This action cannot be undone.\n\nThis operation is only available in Terraform Enterprise.", + "/runs/{run_id}/comments": { + "get": { + "operationId": "listRunComments", + "summary": "List Comments for a Run", + "description": "List all comments for a run.", "tags": [ - "state-versions" + "comments" ], "parameters": [ { "in": "path", - "name": "state_version_id", + "name": "run_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the state version to permanently delete backing data for." - } - ], - "responses": { - "204": { - "description": "State version backing data permanently deleted" + "description": "Run ID" }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - } - }, - "/workspaces/{workspace_id}/state-versions": { - "post": { - "operationId": "createStateVersion", - "summary": "Create a State Version", - "description": "Create a state version and set it as the current state version for the given workspace. The workspace must be locked by the user creating the state version.", - "tags": [ - "state-versions" - ], - "parameters": [ { - "in": "path", - "name": "workspace_id", + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[comments]", + "description": "Return only the specified fields for comments resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the workspace to create the state version in." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/state-versions-envelope" + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "201": { - "description": "State version created", + "200": { + "description": "List of comments", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/state-versions-envelope" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/comments" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } } } } @@ -15130,22 +15796,22 @@ } } }, - "patch": { - "operationId": "rollbackStateVersion", - "summary": "Rollback to a Previous State Version", - "description": "Create a state version by duplicating the specified state version and set it as the current state version for the given workspace. The workspace must be locked by the user performing the rollback.", + "post": { + "operationId": "createRunComment", + "summary": "Create a Comment", + "description": "Create a new comment on a run.", "tags": [ - "state-versions" + "comments" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "run_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace to rollback the state version in." + "description": "Run ID" } ], "requestBody": { @@ -15153,18 +15819,18 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/state-versions-envelope" + "$ref": "#/components/schemas/comments-envelope" } } } }, "responses": { "201": { - "description": "State version rollback created", + "description": "Comment created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/state-versions-envelope" + "$ref": "#/components/schemas/comments-envelope" } } } @@ -15182,38 +15848,51 @@ } } }, - "/state-version-outputs/{state_version_output_id}": { + "/comments/{id}": { "get": { - "operationId": "getStateVersionOutput", - "summary": "Show a State Version Output", - "description": "Show details for a specific state version output.", + "operationId": "showComment", + "summary": "Show a Comment", + "description": "Get details about a comment.", "tags": [ - "state-version-outputs" + "comments" ], "parameters": [ { - "name": "state_version_output_id", "in": "path", - "required": true, - "description": "The ID of the state version output to show.", + "name": "id", "schema": { "type": "string" + }, + "required": true, + "description": "Comment ID" + }, + { + "in": "query", + "name": "fields[comments]", + "description": "Return only the specified fields for comments resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } } } ], "responses": { "200": { - "description": "The request was successful", + "description": "Comment details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/state-version-outputs-envelope" + "$ref": "#/components/schemas/comments-envelope" } } } }, "default": { - "description": "State version output not found or user not authorized to perform action", + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -15225,56 +15904,51 @@ } } }, - "/workspaces/{workspace_id}/current-state-version-outputs": { - "get": { - "operationId": "getCurrentStateVersionOutputs", - "summary": "Show Current State Version Outputs for a Workspace", - "description": "List the current state version outputs for a workspace. Sensitive output values are not revealed and will be returned as null. Organization users who do not have permission to read state versions may use this endpoint to fetch the latest output values for a workspace.", + "/runs/{run_id}/actions/apply": { + "post": { + "operationId": "applyRun", + "summary": "Apply a Run", + "description": "Apply a run that is paused waiting for confirmation.", "tags": [ - "state-version-outputs" + "runs" ], "parameters": [ { - "name": "workspace_id", "in": "path", - "required": true, - "description": "The ID of the workspace to read outputs from.", + "name": "run_id", "schema": { "type": "string" - } + }, + "required": true, + "description": "Run ID" } ], - "responses": { - "200": { - "description": "The request was successful", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/state-version-outputs" - } - } - } - } + "requestBody": { + "required": false, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/action-comment" } } - }, - "503": { - "description": "State version outputs are being processed and are not yet ready. Retry the request.", + } + }, + "responses": { + "202": { + "description": "Successfully queued an apply request", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "type": "string", + "enum": [ + "null" + ] } } } }, - "default": { - "description": "State version outputs not found or user not authorized to perform action", + "409": { + "description": "Run was not paused for confirmation; apply not allowed.", "content": { "application/vnd.api+json": { "schema": { @@ -15286,37 +15960,65 @@ } } }, - "/organizations/{organization_name}/hyok-configurations": { - "x-vis": [ - "hcpt" - ], + "/workspaces/{workspace_id}/runs": { "get": { - "operationId": "listHyokConfigurations", - "summary": "List HYOK Configurations", - "description": "List all HYOK configurations in an organization\n\nThis operation is only available in HCP Terraform.", + "operationId": "listWorkspaceRuns", + "summary": "List Runs in a Workspace", + "description": "List all runs in a workspace.", "tags": [ - "hyok" + "runs" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization" + "description": "Workspace ID" + }, + { + "in": "query", + "name": "filter[operation]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Filter by run operation." + }, + { + "in": "query", + "name": "filter[status]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Filter by run status." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[runs]", + "description": "Return only the specified fields for runs resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Success", + "description": "List of runs", "content": { "application/vnd.api+json": { "schema": { @@ -15325,12 +16027,9 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/hyok-configurations" + "$ref": "#/components/schemas/runs" } }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, "meta": { "type": "object", "properties": { @@ -15338,6 +16037,9 @@ "$ref": "#/components/schemas/pagination" } } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" } } } @@ -15345,7 +16047,7 @@ } }, "default": { - "description": "Organization not found, or user unauthorized to perform action", + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -15355,129 +16057,88 @@ } } } - }, - "post": { - "operationId": "createHyokConfiguration", - "summary": "Create HYOK Configuration", - "description": "Create a new HYOK configuration\n\nThis operation is only available in HCP Terraform.", + } + }, + "/workspaces/{workspace_id}/run-triggers": { + "get": { + "operationId": "listRunTriggers", + "summary": "List Run Triggers", + "description": "List all run triggers for a workspace.", "tags": [ - "hyok" + "run-triggers" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "Name of the organization" - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/hyok-configurations-envelope" - } - } - } - }, - "responses": { - "201": { - "description": "HYOK Configuration created", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/hyok-configurations-envelope" - } - } - } + "description": "Workspace ID" }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - } - }, - "/organizations/{organization_name}/hyok-configurations/test": { - "x-vis": [ - "hcpt" - ], - "post": { - "operationId": "testUnpersistedHyokConfiguration", - "summary": "Test new HYOK configuration", - "description": "Test an HYOK configuration that has yet to be saved on HCP Terraform. The test ensures that the configuration is set up correctly to connect to the specified KMS.\n\nThis operation is only available in HCP Terraform.", - "tags": [ - "hyok" - ], - "parameters": [ { - "in": "path", - "name": "organization_name", + "in": "query", + "name": "filter[run-trigger][type]", "schema": { - "type": "string" + "type": "string", + "enum": [ + "inbound", + "outbound" + ] }, "required": true, - "description": "Name of the organization" + "description": "Filter by run trigger type (inbound or outbound)" + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[run-triggers]", + "description": "Return only the specified fields for run-triggers resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "required": [ - "hyok-configuration", - "oidc-configuration" - ], - "properties": { - "hyok-configuration": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/hyok-configurations" + "responses": { + "200": { + "description": "List of run triggers", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/run-triggers" } - } - }, - "oidc-configuration": { - "type": "object", - "properties": { - "data": { - "oneOf": [ - { - "$ref": "#/components/schemas/aws-oidc-configurations" - }, - { - "$ref": "#/components/schemas/gcp-oidc-configurations" - }, - { - "$ref": "#/components/schemas/azure-oidc-configurations" - }, - { - "$ref": "#/components/schemas/vault-oidc-configurations" - } - ] + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" } } } } } - } - }, - "responses": { - "204": { - "description": "HYOK Configuration successfully tested and verified" }, "default": { "description": "Error details", @@ -15490,28 +16151,23 @@ } } } - } - }, - "/organizations/{organization_name}/oidc-configurations": { - "x-vis": [ - "hcpt" - ], + }, "post": { - "operationId": "createOidcConfiguration", - "summary": "Create OIDC Configuration", - "description": "Create a new OIDC configuration\n\nThis operation is only available in HCP Terraform.", + "operationId": "createRunTrigger", + "summary": "Create a Run Trigger", + "description": "Create a new run trigger for a workspace.", "tags": [ - "hyok" + "run-triggers" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "Name of the organization" + "description": "Workspace ID" } ], "requestBody": { @@ -15519,18 +16175,18 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/oidc-configuration-envelope" + "$ref": "#/components/schemas/run-triggers-envelope" } } } }, "responses": { "201": { - "description": "OIDC Configuration created", + "description": "Run trigger created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/oidc-configuration-envelope" + "$ref": "#/components/schemas/run-triggers-envelope" } } } @@ -15548,86 +16204,45 @@ } } }, - "/hyok-configurations/{hyok_configuration_id}": { - "x-vis": [ - "hcpt" - ], + "/run-triggers/{id}": { "get": { - "operationId": "getHyokConfiguration", - "summary": "Get HYOK configuration details", - "description": "Get details about an HYOK configuration\n\nThis operation is only available in HCP Terraform.", + "operationId": "showRunTrigger", + "summary": "Show a Run Trigger", + "description": "Get details about a run trigger.", "tags": [ - "hyok" + "run-triggers" ], "parameters": [ { "in": "path", - "name": "hyok_configuration_id", + "name": "id", "schema": { "type": "string" }, "required": true, - "description": "HYOK Configuration ID" - } - ], - "responses": { - "200": { - "description": "HYOK Configuration details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/hyok-configurations-envelope" - } - } - } + "description": "Run Trigger ID" }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - }, - "patch": { - "operationId": "updateHyokConfiguration", - "summary": "Update HYOK Configuration", - "description": "Update an HYOK configuration\n\nThis operation is only available in HCP Terraform.", - "tags": [ - "hyok" - ], - "parameters": [ { - "in": "path", - "name": "hyok_configuration_id", + "in": "query", + "name": "fields[run-triggers]", + "description": "Return only the specified fields for run-triggers resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": true, - "description": "HYOK configuration ID" - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/hyok-configurations-envelope" + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { "200": { - "description": "HYOK configuration updated", + "description": "Run trigger details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/hyok-configurations-envelope" + "$ref": "#/components/schemas/run-triggers-envelope" } } } @@ -15645,26 +16260,26 @@ } }, "delete": { - "operationId": "deleteHyokConfiguration", - "summary": "Delete HYOK Configuration", - "description": "Delete an HYOK configuration. Can only be performed on unused configurations.\n\nThis operation is only available in HCP Terraform.", + "operationId": "deleteRunTrigger", + "summary": "Delete a Run Trigger", + "description": "Delete a run trigger.", "tags": [ - "hyok" + "run-triggers" ], "parameters": [ { "in": "path", - "name": "hyok_configuration_id", + "name": "id", "schema": { "type": "string" }, "required": true, - "description": "HYOK Configuration ID" + "description": "Run Trigger ID" } ], "responses": { "204": { - "description": "HYOK configuration deleted" + "description": "Run trigger deleted" }, "default": { "description": "Error details", @@ -15679,37 +16294,75 @@ } } }, - "/hyok-configurations/{hyok_configuration_id}/hyok-customer-key-versions": { - "x-vis": [ - "hcpt" - ], + "/organizations/{organization_name}/runs": { "get": { - "operationId": "listHyokCustomerKeyVersions", - "summary": "List HYOK Customer Key Versions", - "description": "List all HYOK Customer Key Versions for an HYOK Configuration\n\nThis operation is only available in HCP Terraform.", + "operationId": "listOrganizationRuns", + "summary": "List Runs in an Organization", + "description": "List all runs in an organization.", "tags": [ - "hyok" + "runs" ], "parameters": [ { "in": "path", - "name": "hyok_configuration_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "HYOK Configuration ID" + "description": "Organization name" + }, + { + "in": "query", + "name": "filter[operation]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Filter by run operation." + }, + { + "in": "query", + "name": "filter[status]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Filter by run status." + }, + { + "in": "query", + "name": "filter[timeframe]", + "schema": { + "type": "string", + "default": "year" + }, + "required": false, + "description": "Filter by timeframe. Must be a numeric year or \"year\" for the last 12 months (the default)." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[runs]", + "description": "Return only the specified fields for runs resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Success", + "description": "List of runs", "content": { "application/vnd.api+json": { "schema": { @@ -15718,19 +16371,19 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/hyok-customer-key-versions" + "$ref": "#/components/schemas/runs" } }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, "meta": { "type": "object", "properties": { "pagination": { - "$ref": "#/components/schemas/pagination" + "$ref": "#/components/schemas/pagination-without-totals" } } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" } } } @@ -15750,49 +16403,45 @@ } } }, - "/hyok-configurations/{hyok_configuration_id}/actions/revoke": { - "x-vis": [ - "hcpt" - ], - "post": { - "operationId": "revokeHyokConfiguration", - "summary": "Revoke HYOK configuration", - "description": "Revoke an HYOK configuration, instructing HCP Terraform to migrate off of the described key.\n\nThis operation is only available in HCP Terraform.", - "tags": [ - "hyok" - ], + "/plans/{id}": { + "get": { "parameters": [ { + "name": "id", "in": "path", - "name": "hyok_configuration_id", + "description": "The ID of the plan to show.", + "required": true, "schema": { "type": "string" - }, - "required": true, - "description": "HYOK Configuration ID" - } - ], - "requestBody": { - "required": false, - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "additionalProperties": false + } + }, + { + "in": "query", + "name": "fields[plans]", + "description": "Return only the specified fields for plans resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], + "operationId": "showPlan", + "summary": "Show a plan", + "description": "This endpoint returns a specific plan by its ID.", + "tags": [ + "plans" + ], "responses": { - "202": { - "description": "HYOK Configuration revocation initiated", + "200": { + "description": "Successfully returned the plan.", "content": { "application/vnd.api+json": { "schema": { - "type": "string", - "enum": [ - "null" - ] + "$ref": "#/components/schemas/plans-envelope" } } } @@ -15810,31 +16459,49 @@ } } }, - "/hyok-configurations/{hyok_configuration_id}/actions/test": { - "x-vis": [ - "hcpt" - ], - "post": { - "operationId": "testHyokConfiguration", - "summary": "Test HYOK configuration", - "description": "Test an HYOK configuration to ensure that it is set up correctly to connect to the specified KMS.\n\nThis operation is only available in HCP Terraform.", - "tags": [ - "hyok" - ], + "/plans/{id}/json-output": { + "get": { + "operationId": "getPlanJSONOutput", + "summary": "Get the JSON execution plan", + "description": "This endpoint generates a temporary authenticated URL to the location of the JSON formatted execution plan.\nWhen successful, this endpoint responds with a temporary redirect that should be followed.\n\nThis endpoint is available for plans using Terraform 0.12 and later.\nThe temporary URL has a life of 1 minute and should not be relied upon beyond the initial request.\n", "parameters": [ { + "name": "id", "in": "path", - "name": "hyok_configuration_id", + "description": "The ID of the plan to show.", + "required": true, "schema": { "type": "string" - }, - "required": true, - "description": "HYOK Configuration ID" + } } ], + "tags": [ + "plans" + ], "responses": { "204": { - "description": "HYOK Configuration successfully tested and verified" + "description": "Plan JSON supported, but plan has not yet completed." + }, + "307": { + "description": "Plan JSON found and temporary download URL generated.", + "headers": { + "Location": { + "description": "Temporary URL to download the JSON output", + "schema": { + "type": "string" + } + } + } + }, + "422": { + "description": "Plan does not use a supported version of Terraform (< 0.12.X).", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } }, "default": { "description": "Error details", @@ -15849,41 +16516,58 @@ } } }, - "/hyok-customer-key-versions/{hyok_customer_key_version_id}": { - "x-vis": [ - "hcpt" - ], + "/plans/{id}/json-output-redacted": { "get": { - "operationId": "getHyokCustomerKeyVersion", - "summary": "Get HYOK Customer Key Version details", - "description": "Get details about a HYOK Customer Key Version\n\nThis operation is only available in HCP Terraform.", - "tags": [ - "hyok" - ], + "operationId": "getPlanJSONOutputRedacted", + "summary": "Get the redacted JSON execution plan", + "description": "This endpoint generates a temporary authenticated URL to the location of the redacted JSON formatted execution plan, or returns the parsed redacted plan inline when the pre-generated file is not yet available.\n\nThis endpoint is available for plans using Terraform 0.15.2 and later. The temporary URL has a life of 1 minute and should not be relied upon beyond the initial request.\n", "parameters": [ { + "name": "id", "in": "path", - "name": "hyok_customer_key_version_id", + "description": "The ID of the plan to show.", + "required": true, "schema": { "type": "string" - }, - "required": true, - "description": "HYOK Customer Key Version ID" + } } ], + "tags": [ + "plans" + ], "responses": { "200": { - "description": "HYOK Customer Key Version details", + "description": "Plan JSON output rendered inline because the pre-generated redacted plan file is not yet available.", + "content": { + "application/json": {} + } + }, + "204": { + "description": "Redacted plan JSON supported, but plan has not yet completed." + }, + "307": { + "description": "Redacted plan JSON found and temporary download URL generated.", + "headers": { + "Location": { + "description": "Temporary URL to download the redacted JSON output", + "schema": { + "type": "string" + } + } + } + }, + "404": { + "description": "Plan or redacted plan output not found.", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/hyok-customer-key-versions-envelope" + "$ref": "#/components/schemas/errors" } } } }, - "default": { - "description": "Error details", + "422": { + "description": "Plan does not use a supported version of Terraform (< 0.15.2).", "content": { "application/vnd.api+json": { "schema": { @@ -15891,30 +16575,6 @@ } } } - } - } - }, - "delete": { - "operationId": "deleteHyokCustomerKeyVersion", - "summary": "Delete HYOK Customer Key Version", - "description": "Delete a HYOK Customer Key Version. Can only be performed on unused key versions.\n\nThis operation is only available in HCP Terraform.", - "tags": [ - "hyok" - ], - "parameters": [ - { - "in": "path", - "name": "hyok_customer_key_version_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "HYOK Customer Key Version ID" - } - ], - "responses": { - "204": { - "description": "HYOK Customer Key Version deleted" }, "default": { "description": "Error details", @@ -15929,49 +16589,56 @@ } } }, - "/hyok-customer-key-versions/{hyok_customer_key_version_id}/actions/revoke": { - "x-vis": [ - "hcpt" - ], - "post": { - "operationId": "revokeHyokCustomerKeyVersion", - "summary": "Revoke HYOK Customer Key Version", - "description": "Revoke a HYOK Customer Key Version.\n\nThis operation is only available in HCP Terraform.", - "tags": [ - "hyok" - ], + "/plans/{id}/json-schema": { + "get": { + "operationId": "getPlanJSONSchema", + "summary": "Get the JSON provider schema for a plan", + "description": "This endpoint generates a temporary authenticated URL to the location of the JSON formatted provider schemas associated with a plan.\nWhen successful, this endpoint responds with a temporary redirect that should be followed.\n\nThis endpoint is available for plans using Terraform 0.12 and later. The temporary URL has a life of 1 minute and should not be relied upon beyond the initial request.\n", "parameters": [ { + "name": "id", "in": "path", - "name": "hyok_customer_key_version_id", + "description": "The ID of the plan to show.", + "required": true, "schema": { "type": "string" - }, - "required": true, - "description": "HYOK Customer Key Version ID" + } } ], - "requestBody": { - "required": false, - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "additionalProperties": false + "tags": [ + "plans" + ], + "responses": { + "204": { + "description": "Provider schema JSON supported, but plan has not yet completed." + }, + "307": { + "description": "Provider schema JSON found and temporary download URL generated.", + "headers": { + "Location": { + "description": "Temporary URL to download the JSON provider schemas", + "schema": { + "type": "string" + } } } - } - }, - "responses": { - "202": { - "description": "HYOK Key Version revocation initiated", + }, + "404": { + "description": "Plan or provider schema output not found.", "content": { "application/vnd.api+json": { "schema": { - "type": "string", - "enum": [ - "null" - ] + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Plan does not use a supported version of Terraform (< 0.12.X).", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } @@ -15989,38 +16656,31 @@ } } }, - "/hyok-encrypted-data-keys/{hyok_encrypted_data_key_id}": { + "/plans/{id}/actions/soft-delete-backing-data": { "x-vis": [ - "hcpt" + "tfe" ], - "get": { - "operationId": "getHyokEncryptedDataKey", - "summary": "Get HYOK Encrypted Data Key details", - "description": "Get details about a HYOK Encrypted Data Key\n\nThis operation is only available in HCP Terraform.", + "post": { + "operationId": "softDeletePlanBackingData", + "summary": "Soft Delete Plan Backing Data", + "description": "Mark the backing files associated with this plan for garbage collection. Terraform permanently deletes backing files after a set number of days unless the plan is restored.\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "hyok" + "plans" ], "parameters": [ { "in": "path", - "name": "hyok_encrypted_data_key_id", + "name": "id", "schema": { "type": "string" }, "required": true, - "description": "HYOK Encrypted Data Key ID" + "description": "The ID of the plan to mark for garbage collection." } ], "responses": { - "200": { - "description": "HYOK Encrypted Data Key details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/hyok-encrypted-data-keys-envelope" - } - } - } + "204": { + "description": "Plan backing data marked for garbage collection" }, "default": { "description": "Error details", @@ -16035,38 +16695,31 @@ } } }, - "/oidc-configurations/{oidc_configuration_id}": { + "/plans/{id}/actions/restore-backing-data": { "x-vis": [ - "hcpt" + "tfe" ], - "get": { - "operationId": "getOidcConfiguration", - "summary": "Get OIDC Configuration details", - "description": "Get details about an OIDC configuration\n\nThis operation is only available in HCP Terraform.", + "post": { + "operationId": "restorePlanBackingData", + "summary": "Restore Plan Backing Data", + "description": "Restore backing files associated with a plan that was previously marked for garbage collection. This restores the plan back to its finalized state.\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "hyok" + "plans" ], "parameters": [ { "in": "path", - "name": "oidc_configuration_id", + "name": "id", "schema": { "type": "string" }, "required": true, - "description": "OIDC Configuration ID" + "description": "The ID of the plan to restore." } ], "responses": { - "200": { - "description": "OIDC Configuration details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/oidc-configuration-envelope" - } - } - } + "204": { + "description": "Plan backing data restore initiated" }, "default": { "description": "Error details", @@ -16079,45 +16732,33 @@ } } } - }, - "patch": { - "operationId": "updateOidcConfiguration", - "summary": "Update OIDC Configuration", - "description": "Update an OIDC configuration\n\nThis operation is only available in HCP Terraform.", + } + }, + "/plans/{id}/actions/permanently-delete-backing-data": { + "x-vis": [ + "tfe" + ], + "post": { + "operationId": "permanentlyDeletePlanBackingData", + "summary": "Permanently Delete Plan Backing Data", + "description": "Permanently delete the backing files associated with a plan that has been soft deleted. This action cannot be undone.\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "hyok" + "plans" ], "parameters": [ { "in": "path", - "name": "oidc_configuration_id", + "name": "id", "schema": { "type": "string" }, "required": true, - "description": "OIDC Configuration ID" + "description": "The ID of the plan to permanently delete backing data for." } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/oidc-configuration-envelope" - } - } - } - }, "responses": { - "200": { - "description": "OIDC Configuration updated", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/oidc-configuration-envelope" - } - } - } + "204": { + "description": "Plan backing data permanently deleted" }, "default": { "description": "Error details", @@ -16132,38 +16773,42 @@ } } }, - "/authentication-tokens/{id}": { + "/runs/{id}/plan/json-schema": { "get": { - "operationId": "getAuthenticationToken", - "summary": "Get authentication token details", - "description": "Get details about an authentication token", - "tags": [ - "authentication-tokens" - ], + "operationId": "getPlanJSONSchemaOutput", + "summary": "Get the JSON provider schema corresponding to a plan", + "description": "This endpoint generates a temporary authenticated URL to the location of the JSON formatted provider schema.\nWhen successful, this endpoint responds with a temporary redirect that should be followed.\n\nThis endpoint is available for plans using Terraform 0.12 and later.\nThe temporary URL has a life of 1 minute and should not be relied upon beyond the initial request.\n", "parameters": [ { - "in": "path", "name": "id", + "in": "path", + "description": "The ID of the plan to show.", + "required": true, "schema": { "type": "string" - }, - "required": true, - "description": "ID - Can be a token ID or a team ID, depending on the token type" + } } ], + "tags": [ + "plans" + ], "responses": { - "200": { - "description": "Authentication Token details", - "content": { - "application/vnd.api+json": { + "204": { + "description": "Plan JSON supported, but plan has not yet completed." + }, + "307": { + "description": "Plan JSON found and temporary download URL generated.", + "headers": { + "Location": { + "description": "Temporary URL to download the JSON schema output", "schema": { - "$ref": "#/components/schemas/authentication-tokens-envelope" + "type": "string" } } } }, - "default": { - "description": "Error Details", + "422": { + "description": "Plan does not use a supported version of Terraform (< 0.12.X).", "content": { "application/vnd.api+json": { "schema": { @@ -16171,30 +16816,6 @@ } } } - } - } - }, - "delete": { - "operationId": "deleteAuthenticationToken", - "summary": "Delete authentication Token", - "description": "Delete an authentication token", - "tags": [ - "authentication-tokens" - ], - "parameters": [ - { - "in": "path", - "name": "id", - "schema": { - "type": "string" - }, - "required": true, - "description": "ID - Can be a token ID or a team ID, depending on the token type" - } - ], - "responses": { - "204": { - "description": "Authentication token deleted" }, "default": { "description": "Error details", @@ -16209,32 +16830,45 @@ } } }, - "/users/{user_id}": { + "/runs/{id}/plan": { "get": { - "operationId": "showUser", - "summary": "Show User", - "description": "Shows details for a given user.", - "tags": [ - "users" - ], "parameters": [ { + "name": "id", "in": "path", - "name": "user_id", + "description": "The ID of the run whose plan you want to get.", + "required": true, "schema": { "type": "string" - }, - "required": true, - "description": "The ID of the desired user." + } + }, + { + "in": "query", + "name": "fields[plans]", + "description": "Return only the specified fields for plans resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], + "operationId": "getRunPlan", + "summary": "Get a plan by Run ID", + "description": "This endpoint returns a specific plan by its run ID.", + "tags": [ + "plans" + ], "responses": { "200": { - "description": "User details", + "description": "Successfully returned the plan.", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/users-envelope" + "$ref": "#/components/schemas/plans-envelope" } } } @@ -16252,57 +16886,46 @@ } } }, - "/users/{user_id}/github-app-oauth-tokens": { + "/runs/{id}/plan/json-output": { "get": { - "operationId": "listUserGithubAppOauthTokens", - "summary": "List User GitHub App OAuth Tokens", - "description": "List GitHub App OAuth tokens for a given user.", - "tags": [ - "users" - ], + "operationId": "getRunPlanJsonOutput", + "summary": "Get the JSON execution plan by Run ID", + "description": "This endpoint generates a temporary authenticated URL to the location of the JSON formatted execution plan.\nWhen successful, this endpoint responds with a temporary redirect that should be followed.\n\nThis endpoint is available for plans using Terraform 0.12 and later.\nThe temporary URL has a life of 1 minute and should not be relied upon beyond the initial request.\n", "parameters": [ { + "name": "id", "in": "path", - "name": "user_id", + "description": "The ID of the run whose plan json you want to get.", + "required": true, "schema": { "type": "string" - }, - "required": true, - "description": "The ID of the user." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + } } ], + "tags": [ + "plans" + ], "responses": { - "200": { - "description": "GitHub App OAuth tokens", + "204": { + "description": "Plan JSON supported, but plan has not yet completed." + }, + "307": { + "description": "Plan JSON found and temporary download URL generated.", + "headers": { + "Location": { + "description": "Temporary URL to download the JSON output", + "schema": { + "type": "string" + } + } + } + }, + "422": { + "description": "Plan does not use a supported version of Terraform (< 0.12.X).", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/github-app-oauth-tokens" - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - } - } + "$ref": "#/components/schemas/errors" } } } @@ -16320,57 +16943,46 @@ } } }, - "/users/{user_id}/authentication-tokens": { + "/policies/{policy_id}": { "get": { - "operationId": "listUserTokens", - "summary": "List User Tokens", - "description": "List all tokens for a specified user", + "operationId": "showPolicy", + "summary": "Show a Policy", + "description": "Get details about a policy.", "tags": [ - "authentication-tokens" + "policies" ], "parameters": [ { + "name": "policy_id", "in": "path", - "name": "user_id", - "schema": { - "type": "string" - }, "required": true, - "description": "User ID" - }, - { - "$ref": "#/components/parameters/page_number" + "description": "The ID of the policy to show.", + "schema": { + "type": "string", + "example": "pol-xxxxxxxxxxxxxxxx" + } }, { - "$ref": "#/components/parameters/page_size" + "in": "query", + "name": "fields[policies]", + "description": "Return only the specified fields for policies resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Success", + "description": "OK", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/authentication-tokens" - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - } - } + "$ref": "#/components/schemas/policies-envelope" } } } @@ -16387,22 +16999,23 @@ } } }, - "post": { - "operationId": "createUserToken", - "summary": "Create User Token", - "description": "Create a user token", + "patch": { + "operationId": "updatePolicy", + "summary": "Update a Policy", + "description": "Update the enforcement level or description of an existing policy. To update the policy code itself, use the upload endpoint.", "tags": [ - "authentication-tokens" + "policies" ], "parameters": [ { + "name": "policy_id", "in": "path", - "name": "user_id", - "schema": { - "type": "string" - }, "required": true, - "description": "User ID" + "description": "The ID of the policy to update.", + "schema": { + "type": "string", + "example": "pol-xxxxxxxxxxxxxxxx" + } } ], "requestBody": { @@ -16410,18 +17023,18 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/authentication-tokens-envelope" + "$ref": "#/components/schemas/policies-envelope" } } } }, "responses": { - "201": { - "description": "User token created", + "200": { + "description": "OK", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/authentication-tokens-envelope" + "$ref": "#/components/schemas/policies-envelope" } } } @@ -16437,62 +17050,29 @@ } } } - } - }, - "/agent-pools/{agent_pool_id}/authentication-tokens": { - "get": { - "operationId": "listAgentTokens", - "summary": "List Agent Tokens", - "description": "List all tokens for the specified agent pool.", + }, + "delete": { + "operationId": "deletePolicy", + "summary": "Delete a Policy", + "description": "Delete a policy from an organization.", "tags": [ - "authentication-tokens" + "policies" ], "parameters": [ { + "name": "policy_id", "in": "path", - "name": "agent_pool_id", - "schema": { - "type": "string" - }, "required": true, - "description": "The ID of the Agent Pool" - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "description": "The ID of the policy to delete.", + "schema": { + "type": "string", + "example": "pol-xxxxxxxxxxxxxxxx" + } } ], "responses": { - "200": { - "description": "Success", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/authentication-tokens" - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - } - } - } - } - } + "204": { + "description": "No Content" }, "default": { "description": "Error details", @@ -16505,48 +17085,110 @@ } } } - }, - "post": { - "operationId": "createAgentToken", - "summary": "Create Agent Token", - "description": "Create an agent token", + } + }, + "/organizations/{organization_name}/policies": { + "get": { + "operationId": "listPolicies", + "summary": "List Policies", + "description": "List all policies for an organization.", "tags": [ - "authentication-tokens" + "policies" ], "parameters": [ { + "name": "organization_name", "in": "path", - "name": "agent_pool_id", + "required": true, + "description": "The name of the organization.", + "schema": { + "type": "string", + "example": "my-organization" + } + }, + { + "name": "search[name]", + "in": "query", + "required": false, + "description": "Allows searching the organization's policies by name.", "schema": { "type": "string" - }, - "required": true, - "description": "The ID of the Agent Pool" - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/authentication-tokens-envelope" + } + }, + { + "name": "filter[kind]", + "in": "query", + "required": false, + "description": "Filter policies by kind. Valid values are sentinel and opa.", + "schema": { + "type": "string", + "enum": [ + "sentinel", + "opa" + ] + } + }, + { + "name": "sort", + "in": "query", + "required": false, + "description": "Sort policies by the specified field. Valid values are name, -name, updated-at, and -updated-at. Prefix with - for descending order.", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[policies]", + "description": "Return only the specified fields for policies resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "201": { - "description": "Agent token created", + "200": { + "description": "OK", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/authentication-tokens-envelope" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/policies" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } } } } }, - "404": { - "description": "Agent Pool not found or user unauthorized to perform action", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -16554,23 +17196,45 @@ } } } - }, - "422": { - "description": "Malformed request body (missing attributes, wrong types, etc.)", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } + } + } + }, + "post": { + "operationId": "createPolicy", + "summary": "Create a Policy", + "description": "Create a new policy object for the organization. After creation, upload the policy code using the upload endpoint.", + "tags": [ + "policies" + ], + "parameters": [ + { + "name": "organization_name", + "in": "path", + "required": true, + "description": "The name of the organization.", + "schema": { + "type": "string", + "example": "my-organization" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/policies-envelope" } } - }, - "500": { - "description": "Failure during Agent Token creation", + } + }, + "responses": { + "201": { + "description": "Created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/policies-envelope" } } } @@ -16588,38 +17252,40 @@ } } }, - "/teams/{id}/authentication-token": { + "/policies/{policy_id}/download": { "get": { - "operationId": "getTeamAuthenticationToken", - "summary": "Get team authentication token details", - "description": "Get details about a team's authentication token", + "operationId": "downloadPolicy", + "summary": "Download a Policy", + "description": "Generate a temporary URL to the current version of the policy code and redirect to that location. Returns 404 if no policy code has been uploaded.", "tags": [ - "authentication-tokens" + "policies" ], "parameters": [ { + "name": "policy_id", "in": "path", - "name": "id", - "schema": { - "type": "string" - }, "required": true, - "description": "Team ID" + "description": "The ID of the policy to download.", + "schema": { + "type": "string", + "example": "pol-xxxxxxxxxxxxxxxx" + } } ], "responses": { "200": { - "description": "Authentication Token details", + "description": ".tar.gz file containing the policy code.", "content": { - "application/vnd.api+json": { + "application/octet-stream": { "schema": { - "$ref": "#/components/schemas/authentication-tokens-envelope" + "type": "string", + "format": "binary" } } } }, "default": { - "description": "Error Details", + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -16629,42 +17295,47 @@ } } } - }, - "post": { - "operationId": "createTeamAuthenticationToken", - "summary": "Create (or regenerate) the legacy team authentication token", - "description": "Creates the team's legacy, descriptionless authentication token. If one already exists, it is revoked and replaced.", + } + }, + "/policies/{policy_id}/upload": { + "put": { + "operationId": "uploadPolicy", + "summary": "Upload a Policy", + "description": "Upload code to an existing Sentinel or OPA policy. The request body must be the policy code with a Content-Type of application/octet-stream. Policy uploads are limited to 10MB.", "tags": [ - "authentication-tokens" + "policies" ], "parameters": [ { + "name": "policy_id", "in": "path", - "name": "id", - "schema": { - "type": "string" - }, "required": true, - "description": "Team ID" + "description": "The ID of the policy to upload code to.", + "schema": { + "type": "string", + "example": "pol-xxxxxxxxxxxxxxxx" + } } ], "requestBody": { "required": true, "content": { - "application/vnd.api+json": { + "application/octet-stream": { "schema": { - "$ref": "#/components/schemas/authentication-tokens-envelope" + "type": "string", + "format": "binary", + "description": "The policy code as a binary stream." } } } }, "responses": { - "201": { - "description": "Authentication token created", + "200": { + "description": "OK", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/authentication-tokens-envelope" + "$ref": "#/components/schemas/policies-envelope" } } } @@ -16680,13 +17351,15 @@ } } } - }, - "delete": { - "operationId": "deleteTeamAuthenticationToken", - "summary": "Delete team authentication token", - "description": "Delete a team's authentication token", + } + }, + "/policy-checks/{id}": { + "get": { + "operationId": "getPolicyCheck", + "summary": "Show a Policy Check", + "description": "Get information about a specific policy check.", "tags": [ - "authentication-tokens" + "policy-checks" ], "parameters": [ { @@ -16696,182 +17369,35 @@ "type": "string" }, "required": true, - "description": "Team ID" - } - ], - "responses": { - "204": { - "description": "Authentication token deleted" + "description": "The ID of the policy check to show." }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - } - }, - "/organization/audit-trail": { - "x-vis": [ - "hcpt" - ], - "get": { - "operationId": "showOrganizationAuditTrail", - "summary": "List organization audit events", - "description": "Returns a list of audit events for the organization associated with the authentication token. HCP Terraform retains 14 days of audit log information. Unlike most HCP Terraform APIs, this endpoint does not use the JSON:API specification. This endpoint requires an organization token or an audit trail token; user tokens and team tokens are not accepted.\n\nThis operation is only available in HCP Terraform.", - "tags": [ - "audit-trails" - ], - "parameters": [ { "in": "query", - "name": "since", + "name": "fields[policy-checks]", + "description": "Return only the specified fields for policy-checks resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string", - "format": "date-time" - }, - "required": false, - "description": "Returns only audit events created after this date. Must be a UTC ISO8601 datetime string (YYYY-MM-DDTHH:MM:SS.SSSZ)." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Audit events list", + "description": "Policy check details", "content": { - "application/json": { + "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid", - "description": "The ID of this audit event." - }, - "version": { - "type": "string", - "description": "The audit trail schema version." - }, - "type": { - "type": "string", - "description": "The type of audit event (defaults to \"Resource\")." - }, - "timestamp": { - "type": "string", - "format": "date-time", - "description": "UTC ISO8601 timestamp of the event." - }, - "auth": { - "type": "object", - "properties": { - "accessor_id": { - "type": "string", - "description": "The ID of the audited actor." - }, - "description": { - "type": "string", - "nullable": true, - "description": "Username of the audited actor." - }, - "type": { - "type": "string", - "nullable": true, - "description": "Authentication type. One of \"Client\", \"Impersonated\", or \"System\"." - }, - "impersonator_id": { - "type": "string", - "nullable": true, - "description": "The ID of the impersonating actor, if available." - }, - "organization_id": { - "type": "string", - "description": "The ID of the organization." - } - } - }, - "request": { - "type": "object", - "properties": { - "id": { - "type": "string", - "nullable": true, - "description": "The ID of the request, if available." - } - } - }, - "resource": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The ID of the audited resource." - }, - "type": { - "type": "string", - "description": "The type of the audited resource (e.g., \"run\")." - }, - "action": { - "type": "string", - "description": "The action that was audited (e.g., \"applied\")." - }, - "meta": { - "type": "object", - "nullable": true, - "additionalProperties": true, - "description": "Key-value metadata about the audited event. Defaults to null." - } - } - } - } - } - }, - "pagination": { - "type": "object", - "properties": { - "current_page": { - "type": "integer" - }, - "page_size": { - "type": "integer" - }, - "prev_page": { - "type": "integer", - "nullable": true - }, - "next_page": { - "type": "integer", - "nullable": true - }, - "total_pages": { - "type": "integer" - }, - "total_count": { - "type": "integer" - } - } - } - } + "$ref": "#/components/schemas/policy-checks-envelope" } } } }, "default": { - "description": "Unauthorized or forbidden", + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -16883,38 +17409,39 @@ } } }, - "/organizations/{organization_name}/authentication-token": { + "/policy-checks/{id}/output": { "get": { - "operationId": "getOrganizationToken", - "summary": "Get organization token details", - "description": "Get details about an organization token", + "operationId": "getPolicyCheckOutput", + "summary": "Get Policy Check Output", + "description": "Retrieve the Sentinel output log for a policy check. When output is available, the response redirects to a temporary presigned URL. When no result exists yet, the response is 204 No Content.", "tags": [ - "authentication-tokens" + "policy-checks" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "id", "schema": { "type": "string" }, "required": true, - "description": "Organization name" + "description": "The ID of the policy check." } ], "responses": { "200": { - "description": "Organization Token details", + "description": "Output log retrieved successfully.", "content": { - "application/vnd.api+json": { + "application/octet-stream": { "schema": { - "$ref": "#/components/schemas/authentication-tokens-envelope" + "type": "string", + "format": "binary" } } } }, "default": { - "description": "Error Details", + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -16924,48 +17451,50 @@ } } } - }, + } + }, + "/policy-checks/{id}/actions/override": { "post": { - "operationId": "createOrganizationToken", - "summary": "Create Organization Token", - "description": "Create an organization token", + "operationId": "overridePolicyCheck", + "summary": "Override a Policy Check", + "description": "Override a soft-mandatory or warning policy check to allow the run to continue.", "tags": [ - "authentication-tokens" + "policy-checks" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "id", "schema": { "type": "string" }, "required": true, - "description": "Organization name" + "description": "The ID of the policy check to override." } ], "requestBody": { - "required": true, + "required": false, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/authentication-tokens-envelope" + "$ref": "#/components/schemas/action-comment" } } } }, "responses": { - "201": { - "description": "Organization token created", + "200": { + "description": "Policy check successfully overridden", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/authentication-tokens-envelope" + "$ref": "#/components/schemas/policy-checks-envelope" } } } }, - "default": { - "description": "Error details", + "409": { + "description": "The policy check is not in an overridable state.", "content": { "application/vnd.api+json": { "schema": { @@ -16973,30 +17502,6 @@ } } } - } - } - }, - "delete": { - "operationId": "deleteOrganizationToken", - "summary": "Delete organization Token", - "description": "Delete an organization token", - "tags": [ - "authentication-tokens" - ], - "parameters": [ - { - "in": "path", - "name": "organization_name", - "schema": { - "type": "string" - }, - "required": true, - "description": "Organization name" - } - ], - "responses": { - "204": { - "description": "Organization token deleted" }, "default": { "description": "Error details", @@ -17011,52 +17516,47 @@ } } }, - "/organizations/{organization_name}/team-tokens": { + "/runs/{run_id}/policy-checks": { "get": { - "operationId": "listTeamTokensForAnOrganization", - "summary": "List Team Tokens for an Organization", - "description": "List all tokens for a specified organization", + "operationId": "listRunPolicyChecks", + "summary": "List Policy Checks for a Run", + "description": "List the policy checks associated with a run.", "tags": [ - "authentication-tokens" + "policy-checks" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "run_id", "schema": { "type": "string" }, "required": true, - "description": "Organization Name" - }, - { - "in": "query", - "name": "q", - "schema": { - "type": "string" - }, - "required": false, - "description": "Search team tokens by team name." - }, - { - "in": "query", - "name": "filter[expiry_status]", - "schema": { - "type": "string" - }, - "required": false, - "description": "Filter by token expiry status. Accepts a comma-separated list of any of: `active`, `expiring_in_7_days`, `expiring_in_30_days`, `expired`, `no_expiration`. Multiple values are combined with OR." + "description": "The ID of the run to list policy checks for." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[policy-checks]", + "description": "Return only the specified fields for policy-checks resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Success", + "description": "List of policy checks", "content": { "application/vnd.api+json": { "schema": { @@ -17065,12 +17565,9 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/authentication-tokens" + "$ref": "#/components/schemas/policy-checks" } }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, "meta": { "type": "object", "properties": { @@ -17078,6 +17575,9 @@ "$ref": "#/components/schemas/pagination" } } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" } } } @@ -17095,59 +17595,78 @@ } } } - }, - "delete": { - "operationId": "deleteTeamTokensForAnOrganization", - "summary": "Bulk-Delete Team Tokens for an Organization", - "description": "Bulk-delete team tokens for an organization.", + } + }, + "/runs/{run_id}/tf-policy-evaluations": { + "x-vis": [ + "public-beta" + ], + "get": { + "operationId": "listRunTfPolicyEvaluations", + "summary": "List Terraform Policy Evaluations for a Run", + "description": "List the Terraform Policy evaluations associated with a run.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "authentication-tokens" + "tf-policy-evaluations" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "run_id", "schema": { "type": "string" }, "required": true, - "description": "Organization Name" + "description": "The ID of the run to list Terraform Policy evaluations for." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[tf-policy-evaluations]", + "description": "Return only the specified fields for tf-policy-evaluations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { + "responses": { + "200": { + "description": "List of Terraform Policy evaluations", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/tf-policy-evaluation" + } + }, + "meta": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "authentication-tokens" - ] - }, - "id": { - "type": "string", - "description": "External ID of the team token to delete.", - "example": "at-abc123def456" + "pagination": { + "$ref": "#/components/schemas/pagination" } } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" } } } } } - } - }, - "responses": { - "204": { - "description": "Tokens deleted" }, "default": { "description": "Error details", @@ -17162,41 +17681,26 @@ } } }, - "/organizations/{organization_name}/teams": { + "/tf-policy-evaluations/{id}": { + "x-vis": [ + "public-beta" + ], "get": { - "operationId": "listTeams", - "summary": "List Teams", - "description": "List teams in an organization. Any member of an organization can view visible teams and any secret teams they are a member of.", + "operationId": "getTfPolicyEvaluation", + "summary": "Show a Terraform Policy Evaluation", + "description": "Get details about a specific Terraform Policy evaluation.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "teams" + "tf-policy-evaluations" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "id", "schema": { "type": "string" }, "required": true, - "description": "Name of the organization" - }, - { - "in": "query", - "name": "q", - "schema": { - "type": "string" - }, - "required": false, - "description": "A search query string. Teams are searchable by name (case-insensitive)." - }, - { - "in": "query", - "name": "filter[names]", - "schema": { - "type": "string" - }, - "required": false, - "description": "If specified, restricts results to a team with a matching name. If multiple comma separated values are specified, teams matching any of the names are returned." + "description": "The ID of the Terraform Policy evaluation to show." }, { "in": "query", @@ -17208,90 +17712,53 @@ "items": { "type": "string", "enum": [ - "users", - "organization-memberships" + "tf_policy_set_outcomes" ] } }, "required": false, - "description": "Optionally side-load relationships. Can include \"users\" or \"organization-memberships\"." - }, - { - "$ref": "#/components/parameters/page_number" + "description": "Comma-separated list of related resources to include." }, { - "$ref": "#/components/parameters/page_size" + "in": "query", + "name": "fields[tf-policy-evaluations]", + "description": "Return only the specified fields for tf-policy-evaluations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Teams list", + "description": "Terraform Policy evaluation details", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/teams" - } + "allOf": [ + { + "$ref": "#/components/schemas/tf-policy-evaluations-envelope" }, - "meta": { + { "type": "object", "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "included": { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/users" - }, - { - "$ref": "#/components/schemas/organization-memberships" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "users": "#/components/schemas/users", - "organization-memberships": "#/components/schemas/organization-memberships" + "included": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/tf-policy-set-outcome" + } + ] } } } } - } - } - } - } - }, - "400": { - "description": "Invalid include parameter", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "404": { - "description": "Organization not found, or user unauthorized to perform action", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" + ] } } } @@ -17307,68 +17774,60 @@ } } } - }, + } + }, + "/tf-policy-evaluations/{id}/actions/override": { + "x-vis": [ + "public-beta" + ], "post": { - "operationId": "createTeam", - "summary": "Create Team", - "description": "Create a team in an organization.", + "operationId": "overrideTfPolicyEvaluation", + "summary": "Override a Terraform Policy Evaluation", + "description": "Override a mandatory-overridable Terraform Policy evaluation to allow the run to continue.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "teams" + "tf-policy-evaluations" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "id", "schema": { "type": "string" }, "required": true, - "description": "Name of the organization" + "description": "The ID of the Terraform Policy evaluation to override." } ], "requestBody": { - "required": true, + "required": false, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/teams-envelope" + "type": "object", + "properties": { + "comment": { + "type": "string", + "nullable": true, + "description": "An optional comment explaining the reason for overriding the Terraform Policy evaluation." + } + } } } } }, "responses": { "200": { - "description": "Team created successfully", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/teams-envelope" - } - } - } - }, - "400": { - "description": "Invalid include parameter", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "404": { - "description": "Organization not found, or user unauthorized to perform action", + "description": "Terraform Policy evaluation successfully overridden", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/tf-policy-evaluations-envelope" } } } }, - "422": { - "description": "Malformed request body (missing attributes, wrong types, etc.)", + "409": { + "description": "The Terraform Policy evaluation is not in an overridable state.", "content": { "application/vnd.api+json": { "schema": { @@ -17390,95 +17849,114 @@ } } }, - "/teams/{team_id}": { + "/tf-policy-evaluations/{tf_policy_evaluation_id}/tf-policy-set-outcomes": { + "x-vis": [ + "public-beta" + ], "get": { - "operationId": "getTeam", - "summary": "Show Team Information", - "description": "Get details about a team.", + "operationId": "listTfPolicyEvaluationTfPolicySetOutcomes", + "summary": "List Terraform Policy Set Outcomes for a Terraform Policy Evaluation", + "description": "List the Terraform Policy set outcomes associated with a Terraform Policy evaluation. Supports filtering via the `filter` parameter.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "teams" + "tf-policy-evaluations" ], "parameters": [ { "in": "path", - "name": "team_id", + "name": "tf_policy_evaluation_id", "schema": { "type": "string" }, "required": true, - "description": "Team ID" + "description": "The ID of the Terraform Policy evaluation to list Terraform Policy set outcomes for." }, { "in": "query", - "name": "include", + "name": "filter", + "style": "deepObject", + "explode": true, + "required": false, + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "passed", + "failed", + "errored", + "unknown" + ], + "description": "Filter outcomes by status." + }, + "enforcement_level": { + "type": "string", + "enum": [ + "advisory", + "mandatory", + "mandatory_overridable" + ], + "description": "Filter outcomes by enforcement level." + } + } + } + }, + "description": "Filter outcomes using OR-grouped AND conditions. Each numeric index defines\nan independent AND-condition group; groups are combined with OR.\n\nExample — return outcomes that are errored OR (failed + mandatory) OR (failed + mandatory_overridable):\n```\nfilter[0][status]=errored\n&filter[1][status]=failed&filter[1][enforcement_level]=mandatory\n&filter[2][status]=failed&filter[2][enforcement_level]=mandatory_overridable\n```\n" + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[tf-policy-set-outcomes]", + "description": "Return only the specified fields for tf-policy-set-outcomes resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", "style": "form", "explode": false, "schema": { "type": "array", "items": { - "type": "string", - "enum": [ - "users", - "organization-memberships" - ] + "type": "string" } - }, - "required": false, - "description": "Optionally side-load relationships. Can include \"users\" or \"organization-memberships\"." + } } ], "responses": { "200": { - "description": "Team details", + "description": "List of Terraform Policy set outcomes", "content": { "application/vnd.api+json": { "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/teams-envelope" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/tf-policy-set-outcome" + } }, - { + "meta": { "type": "object", "properties": { - "included": { - "type": "array", - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/users" - }, - { - "$ref": "#/components/schemas/organization-memberships" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "users": "#/components/schemas/users", - "organization-memberships": "#/components/schemas/organization-memberships" - } - } - } + "pagination": { + "$ref": "#/components/schemas/pagination" } } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" } - ] + } } } } }, "400": { - "description": "Invalid include parameter", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "404": { - "description": "Team not found, or user unauthorized to perform action", + "description": "Invalid filter provided", "content": { "application/vnd.api+json": { "schema": { @@ -17498,48 +17976,56 @@ } } } - }, - "patch": { - "operationId": "updateTeam", - "summary": "Update Team", - "description": "Update a team's attributes.", + } + }, + "/tf-policy-set-outcomes/{id}": { + "x-vis": [ + "public-beta" + ], + "get": { + "operationId": "getTfPolicySetOutcome", + "summary": "Show a Terraform Policy Set Outcome", + "description": "Get details about a specific Terraform Policy set outcome.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "teams" + "tf-policy-evaluations" ], "parameters": [ { "in": "path", - "name": "team_id", + "name": "id", "schema": { "type": "string" }, "required": true, - "description": "Team ID" - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/teams-envelope" + "description": "The ID of the Terraform Policy set outcome to show." + }, + { + "in": "query", + "name": "fields[tf-policy-set-outcomes]", + "description": "Return only the specified fields for tf-policy-set-outcomes resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { "200": { - "description": "Team updated successfully", + "description": "Terraform Policy set outcome details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/teams-envelope" + "$ref": "#/components/schemas/tf-policy-set-outcomes-envelope" } } } }, - "400": { - "description": "Invalid include parameter", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -17547,23 +18033,77 @@ } } } + } + } + } + }, + "/policy-sets/{policy_set_id}/parameters": { + "get": { + "operationId": "listPolicySetParams", + "summary": "List Policy Set Parameters", + "description": "List parameters belonging to a policy set.", + "tags": [ + "policy-set-params" + ], + "parameters": [ + { + "in": "path", + "name": "policy_set_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the policy set." }, - "404": { - "description": "Team not found, or user unauthorized to perform action", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[vars]", + "description": "Return only the specified fields for vars resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } - }, - "422": { - "description": "Malformed request body (missing attributes, wrong types, etc.)", + } + ], + "responses": { + "200": { + "description": "List of policy set parameters", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/vars" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } } } } @@ -17580,34 +18120,41 @@ } } }, - "delete": { - "operationId": "deleteTeam", - "summary": "Delete Team", - "description": "Delete a team. Only organization owners can delete teams.", + "post": { + "operationId": "createPolicySetParam", + "summary": "Create a Policy Set Parameter", + "description": "Create a new parameter for a policy set.", "tags": [ - "teams" + "policy-set-params" ], "parameters": [ { "in": "path", - "name": "team_id", + "name": "policy_set_id", "schema": { "type": "string" }, "required": true, - "description": "Team ID" + "description": "The ID of the policy set." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/vars-envelope" + } + } + } + }, "responses": { - "204": { - "description": "Team deleted successfully" - }, - "404": { - "description": "Team not found, or user unauthorized to perform action", + "201": { + "description": "Policy set parameter created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/vars-envelope" } } } @@ -17625,65 +18172,54 @@ } } }, - "/teams/{team_id}/relationships/users": { - "post": { - "operationId": "addTeamMembersByUsername", - "summary": "Add Users to Team (by username)", - "description": "Add multiple users to a team using their usernames. Both users and teams must already exist.", + "/policy-sets/{policy_set_id}/parameters/{id}": { + "get": { + "operationId": "getPolicySetParam", + "summary": "Get a Policy Set Parameter", + "description": "Get details about a policy set parameter.", "tags": [ - "teams" + "policy-set-params" ], "parameters": [ { "in": "path", - "name": "team_id", + "name": "policy_set_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the team." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/users-identifier-array-document" - } - } - } - }, - "responses": { - "204": { - "description": "Users successfully added to team." + "description": "The ID of the policy set." }, - "400": { - "description": "Invalid request (blank ID, wrong type, user does not exist, user is already a member, user is not in the organization).", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } + { + "in": "path", + "name": "id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the parameter." }, - "403": { - "description": "Forbidden. The organization is managed by HCP.", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } + { + "in": "query", + "name": "fields[vars]", + "description": "Return only the specified fields for vars resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } - }, - "404": { - "description": "Team not found, or user unauthorized to perform action.", + } + ], + "responses": { + "200": { + "description": "Policy set parameter details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/vars-envelope" } } } @@ -17700,22 +18236,31 @@ } } }, - "delete": { - "operationId": "removeTeamMembersByUsername", - "summary": "Remove Users from Team (by username)", - "description": "Remove multiple users from a team using their usernames. This only removes users from this team; it does not delete the users from the organization.", + "patch": { + "operationId": "updatePolicySetParam", + "summary": "Update a Policy Set Parameter", + "description": "Update an existing policy set parameter.", "tags": [ - "teams" + "policy-set-params" ], "parameters": [ { "in": "path", - "name": "team_id", + "name": "policy_set_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the team." + "description": "The ID of the policy set." + }, + { + "in": "path", + "name": "id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the parameter to update." } ], "requestBody": { @@ -17723,27 +18268,24 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/users-identifier-array-document" + "$ref": "#/components/schemas/vars-envelope" } } } }, "responses": { - "204": { - "description": "Users successfully removed from team." - }, - "400": { - "description": "Invalid request (blank ID, wrong type, user is not a member).", + "200": { + "description": "Policy set parameter updated", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/vars-envelope" } } } }, - "403": { - "description": "Forbidden. The organization is managed by HCP, or attempting to remove the last owner of the owners team.", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -17751,16 +18293,39 @@ } } } + } + } + }, + "delete": { + "operationId": "deletePolicySetParam", + "summary": "Delete a Policy Set Parameter", + "description": "Delete a policy set parameter.", + "tags": [ + "policy-set-params" + ], + "parameters": [ + { + "in": "path", + "name": "policy_set_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the policy set." }, - "404": { - "description": "Team not found, or user unauthorized to perform action.", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } + { + "in": "path", + "name": "id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the parameter to delete." + } + ], + "responses": { + "204": { + "description": "Policy set parameter deleted" }, "default": { "description": "Error details", @@ -17775,120 +18340,45 @@ } } }, - "/teams/{team_id}/relationships/organization-memberships": { + "/policy-sets/{policy_set_id}": { "get": { - "operationId": "listTeamOrganizationMemberships", - "summary": "List Team Organization Memberships", - "description": "List all organization memberships for a team. Returns both active members and invited users.", + "operationId": "getPolicySet", + "summary": "Get a Policy Set", + "description": "Get details about a specific policy set.", "tags": [ - "teams" + "policy-sets" ], "parameters": [ { "in": "path", - "name": "team_id", + "name": "policy_set_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the team." - }, - { - "in": "query", - "name": "filter[status]", - "schema": { - "type": "string", - "enum": [ - "active", - "invited", - "inactive" - ] - }, - "required": false, - "description": "Filter memberships by status." - }, - { - "in": "query", - "name": "filter[is_service_account]", - "schema": { - "type": "string", - "enum": [ - "true", - "false" - ] - }, - "required": false, - "description": "Filter to include only service account members." + "description": "The ID of the policy set." }, { "in": "query", - "name": "sort", + "name": "fields[policy-sets]", + "description": "Return only the specified fields for policy-sets resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string", - "enum": [ - "status", - "-status" - ] - }, - "required": false, - "description": "Sort memberships. Prefix with '-' for descending order (e.g. '-status')." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of organization memberships for the team.", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/organization-memberships" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } - } - } - } - }, - "400": { - "description": "Invalid filter or sort parameter.", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "404": { - "description": "Team not found, or user unauthorized to perform action.", + "description": "Policy set details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/policy-sets-envelope" } } } @@ -17905,22 +18395,22 @@ } } }, - "post": { - "operationId": "addTeamMembersByOrgMembership", - "summary": "Add Users to Team (by organization membership ID)", - "description": "Add multiple users to a team using their organization membership IDs. Unlike the username method, users only need a pending invitation to the organization.", + "patch": { + "operationId": "updatePolicySet", + "summary": "Update a Policy Set", + "description": "Update an existing policy set.", "tags": [ - "teams" + "policy-sets" ], "parameters": [ { "in": "path", - "name": "team_id", + "name": "policy_set_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the team." + "description": "The ID of the policy set." } ], "requestBody": { @@ -17928,41 +18418,18 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/organization-memberships-identifier-array-document" + "$ref": "#/components/schemas/policy-sets-envelope" } } } }, "responses": { - "204": { - "description": "Users successfully added to team." - }, - "400": { - "description": "Invalid request (blank ID, wrong type, membership does not exist, user is already a member, user is not in the organization).", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "403": { - "description": "Forbidden. The organization is managed by HCP.", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "404": { - "description": "Team not found, or user unauthorized to perform action.", + "200": { + "description": "Policy set updated", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/policy-sets-envelope" } } } @@ -17980,66 +18447,26 @@ } }, "delete": { - "operationId": "removeTeamMembersByOrgMembership", - "summary": "Remove Users from Team (by organization membership ID)", - "description": "Remove multiple users from a team using their organization membership IDs. This only removes users from this team; it does not delete the users from the organization.", + "operationId": "deletePolicySet", + "summary": "Delete a Policy Set", + "description": "Delete a policy set. Deleting a policy set does not delete the policies it contains.", "tags": [ - "teams" + "policy-sets" ], "parameters": [ { "in": "path", - "name": "team_id", + "name": "policy_set_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the team." + "description": "The ID of the policy set." } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/organization-memberships-identifier-array-document" - } - } - } - }, "responses": { "204": { - "description": "Users successfully removed from team." - }, - "400": { - "description": "Invalid request (blank ID, wrong type, membership does not exist, user is not a member).", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "403": { - "description": "Forbidden. The organization is managed by HCP, or attempting to remove the last active owner of the owners team.", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "404": { - "description": "Team not found, or user unauthorized to perform action.", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } + "description": "Policy set deleted" }, "default": { "description": "Error details", @@ -18054,43 +18481,79 @@ } } }, - "/team-projects": { + "/organizations/{organization_name}/policy-sets": { "get": { - "operationId": "listTeamProjects", - "summary": "List Team Access to a Project", - "description": "List all team access grants for a project.", + "operationId": "listPolicySets", + "summary": "List Policy Sets", + "description": "List all policy sets in an organization.", "tags": [ - "team-projects" + "policy-sets" ], "parameters": [ { - "in": "query", - "name": "filter[project][id]", + "in": "path", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The project ID to list team access for." + "description": "The name of the organization." }, { "in": "query", - "name": "filter[team][id]", + "name": "filter[versioned]", + "schema": { + "type": "boolean" + }, + "required": false, + "description": "If true, only return versioned policy sets. If false, only return non-versioned policy sets." + }, + { + "in": "query", + "name": "filter[kind]", + "schema": { + "type": "string", + "enum": [ + "sentinel", + "opa", + "tfpolicy" + ] + }, + "required": false, + "description": "Filter policy sets by kind.\n\n**Note:** The following kind values are in public-beta:\n- `tfpolicy` - Terraform Policy enforcement\n" + }, + { + "in": "query", + "name": "search[name]", "schema": { "type": "string" }, "required": false, - "description": "Optionally filter by team ID." + "description": "Filter policy sets by name." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[policy-sets]", + "description": "Return only the specified fields for policy-sets resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of team-project access grants", + "description": "List of policy sets", "content": { "application/vnd.api+json": { "schema": { @@ -18099,7 +18562,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/team-projects" + "$ref": "#/components/schemas/policy-sets" } }, "meta": { @@ -18118,16 +18581,6 @@ } } }, - "404": { - "description": "Project not found or user unauthorized to perform action", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, "default": { "description": "Error details", "content": { @@ -18141,49 +18594,40 @@ } }, "post": { - "operationId": "addProjectTeamAccess", - "summary": "Add Team Access to a Project", - "description": "Add a team's access to a project.", + "operationId": "createPolicySet", + "summary": "Create a Policy Set", + "description": "Create a new policy set in an organization.", "tags": [ - "team-projects" + "policy-sets" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the organization." + } ], "requestBody": { "required": true, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/team-projects-envelope" + "$ref": "#/components/schemas/policy-sets-envelope" } } } }, "responses": { "201": { - "description": "Team access created", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/team-projects-envelope" - } - } - } - }, - "404": { - "description": "Project or team not found or user unauthorized to perform action", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "422": { - "description": "Malformed request body (missing attributes, wrong types, etc.)", + "description": "Policy set created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/policy-sets-envelope" } } } @@ -18201,45 +18645,38 @@ } } }, - "/team-projects/{team_project_id}": { - "get": { - "operationId": "showProjectTeamAccess", - "summary": "Show a Team Access Relationship", - "description": "Get details about a team's access to a project.", + "/policy-sets/{policy_set_id}/relationships/workspaces": { + "post": { + "operationId": "addPolicySetWorkspaces", + "summary": "Add Workspaces to a Policy Set", + "description": "Add workspaces to a policy set. Relationships are additive; existing workspace memberships are preserved.", "tags": [ - "team-projects" + "policy-sets" ], "parameters": [ { "in": "path", - "name": "team_project_id", + "name": "policy_set_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the team/project relationship." + "description": "The ID of the policy set." } ], - "responses": { - "200": { - "description": "Team-project access details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/team-projects-envelope" - } - } - } - }, - "404": { - "description": "Team access not found or user unauthorized to perform action", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspaces-identifier-array-document" } } + } + }, + "responses": { + "204": { + "description": "Workspaces successfully added to policy set." }, "default": { "description": "Error details", @@ -18253,22 +18690,22 @@ } } }, - "patch": { - "operationId": "updateProjectTeamAccess", - "summary": "Update Team Access to a Project", - "description": "Update a team's access level on a project.", + "delete": { + "operationId": "removePolicySetWorkspaces", + "summary": "Remove Workspaces from a Policy Set", + "description": "Remove workspaces from a policy set. Workspaces not currently in the set are ignored.", "tags": [ - "team-projects" + "policy-sets" ], "parameters": [ { "in": "path", - "name": "team_project_id", + "name": "policy_set_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the team/project relationship." + "description": "The ID of the policy set." } ], "requestBody": { @@ -18276,24 +18713,17 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/team-projects-envelope" + "$ref": "#/components/schemas/workspaces-identifier-array-document" } } } }, "responses": { - "200": { - "description": "Team access updated successfully", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/team-projects-envelope" - } - } - } + "204": { + "description": "Workspaces successfully removed from policy set." }, - "404": { - "description": "Team access not found or user unauthorized to perform action", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -18301,16 +18731,42 @@ } } } - }, - "422": { - "description": "Malformed request body (missing attributes, wrong types, etc.)", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } + } + } + } + }, + "/policy-sets/{policy_set_id}/relationships/policies": { + "post": { + "operationId": "addPolicySetPolicies", + "summary": "Add Policies to a Policy Set", + "description": "Add policies to a policy set. Additive; existing memberships are preserved. Each `data` item references an existing policy by id; see the request schema for accepted shapes.", + "tags": [ + "policy-sets" + ], + "parameters": [ + { + "in": "path", + "name": "policy_set_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the policy set." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/policies-identifier-array-document" } } + } + }, + "responses": { + "204": { + "description": "Policies successfully added to policy set." }, "default": { "description": "Error details", @@ -18325,36 +18781,36 @@ } }, "delete": { - "operationId": "removeProjectTeamAccess", - "summary": "Remove Team Access from a Project", - "description": "Remove a team's access from a project.", + "operationId": "removePolicySetPolicies", + "summary": "Remove Policies from a Policy Set", + "description": "Remove policies from a policy set. Policies not currently in the set are ignored.", "tags": [ - "team-projects" + "policy-sets" ], "parameters": [ { "in": "path", - "name": "team_project_id", + "name": "policy_set_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the team/project relationship." + "description": "The ID of the policy set." } ], - "responses": { - "204": { - "description": "Team access removed successfully" - }, - "404": { - "description": "Team access not found or user unauthorized to perform action", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/policies-identifier-array-document" } } + } + }, + "responses": { + "204": { + "description": "Policies successfully removed from policy set." }, "default": { "description": "Error details", @@ -18369,72 +18825,41 @@ } } }, - "/team-workspaces": { - "get": { - "operationId": "listTeamWorkspaces", - "summary": "List Team Access to a Workspace", - "description": "List all team access relationships. Optionally filter by workspace or team ID.", + "/policy-sets/{policy_set_id}/relationships/projects": { + "post": { + "operationId": "addPolicySetProjects", + "summary": "Add Projects to a Policy Set", + "description": "Add projects to a policy set. Relationships are additive; existing project memberships are preserved.", "tags": [ - "team-access" + "policy-sets" ], "parameters": [ { - "in": "query", - "name": "filter[workspace][id]", - "schema": { - "type": "string" - }, - "required": false, - "description": "The workspace ID to list team access for." - }, - { - "in": "query", - "name": "filter[team][id]", + "in": "path", + "name": "policy_set_id", "schema": { "type": "string" }, - "required": false, - "description": "The team ID to list workspace access for." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "required": true, + "description": "The ID of the policy set." } ], - "responses": { - "200": { - "description": "List of team access relationships", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/team-workspaces" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/projects-identifier-array-document" } } + } + }, + "responses": { + "204": { + "description": "Projects successfully added to policy set." }, - "404": { - "description": "Workspace not found or user unauthorized to perform action", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -18442,6 +18867,40 @@ } } } + } + } + }, + "delete": { + "operationId": "removePolicySetProjects", + "summary": "Remove Projects from a Policy Set", + "description": "Remove projects from a policy set. Projects not currently in the set are ignored.", + "tags": [ + "policy-sets" + ], + "parameters": [ + { + "in": "path", + "name": "policy_set_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the policy set." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/projects-identifier-array-document" + } + } + } + }, + "responses": { + "204": { + "description": "Projects successfully removed from policy set." }, "default": { "description": "Error details", @@ -18454,37 +18913,43 @@ } } } - }, + } + }, + "/policy-sets/{policy_set_id}/relationships/workspace-exclusions": { "post": { - "operationId": "addTeamAccess", - "summary": "Add Team Access to a Workspace", - "description": "Add a team's access to a workspace.", + "operationId": "addPolicySetWorkspaceExclusions", + "summary": "Add Workspace Exclusions to a Policy Set", + "description": "Add workspace exclusions to a policy set. Excluded workspaces will not have the policy set applied to them even if the set is global.", "tags": [ - "team-access" + "policy-sets" + ], + "parameters": [ + { + "in": "path", + "name": "policy_set_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the policy set." + } ], "requestBody": { "required": true, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/team-workspaces-envelope" + "$ref": "#/components/schemas/workspaces-identifier-array-document" } } } }, "responses": { - "201": { - "description": "Team access relationship created", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/team-workspaces-envelope" - } - } - } + "204": { + "description": "Workspace exclusions successfully added to policy set." }, - "404": { - "description": "Workspace or Team not found or user unauthorized to perform action", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -18492,16 +18957,40 @@ } } } - }, - "422": { - "description": "Malformed request body (missing attributes, wrong types, etc.)", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } + } + } + }, + "delete": { + "operationId": "removePolicySetWorkspaceExclusions", + "summary": "Remove Workspace Exclusions from a Policy Set", + "description": "Remove workspace exclusions from a policy set. Workspace exclusions not currently in the set are ignored.", + "tags": [ + "policy-sets" + ], + "parameters": [ + { + "in": "path", + "name": "policy_set_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the policy set." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspaces-identifier-array-document" } } + } + }, + "responses": { + "204": { + "description": "Workspace exclusions successfully removed from policy set." }, "default": { "description": "Error details", @@ -18516,45 +19005,38 @@ } } }, - "/team-workspaces/{team_workspace_id}": { - "get": { - "operationId": "showTeamAccess", - "summary": "Show a Team Access Relationship", - "description": "Get details about a team's access to a workspace.", + "/policy-sets/{policy_set_id}/relationships/project-exclusions": { + "post": { + "operationId": "addPolicySetProjectExclusions", + "summary": "Add Project Exclusions to a Policy Set", + "description": "Add project exclusions to a policy set. Excluded projects will not have the policy set applied to them even if the set is global.", "tags": [ - "team-access" + "policy-sets" ], "parameters": [ { "in": "path", - "name": "team_workspace_id", + "name": "policy_set_id", "schema": { "type": "string" }, "required": true, - "description": "The team/workspace relationship ID." + "description": "The ID of the policy set." } ], - "responses": { - "200": { - "description": "Team access relationship details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/team-workspaces-envelope" - } - } - } - }, - "404": { - "description": "Team access not found or user unauthorized to perform action", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/projects-identifier-array-document" } } + } + }, + "responses": { + "204": { + "description": "Project exclusions successfully added to policy set." }, "default": { "description": "Error details", @@ -18568,22 +19050,22 @@ } } }, - "patch": { - "operationId": "updateTeamAccess", - "summary": "Update Team Access to a Workspace", - "description": "Update a team's access to a workspace.", + "delete": { + "operationId": "removePolicySetProjectExclusions", + "summary": "Remove Project Exclusions from a Policy Set", + "description": "Remove project exclusions from a policy set. project exclusions not currently in the set are ignored.", "tags": [ - "team-access" + "policy-sets" ], "parameters": [ { "in": "path", - "name": "team_workspace_id", + "name": "policy_set_id", "schema": { "type": "string" }, "required": true, - "description": "The team/workspace relationship ID." + "description": "The ID of the policy set." } ], "requestBody": { @@ -18591,41 +19073,14 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/team-workspaces-envelope" + "$ref": "#/components/schemas/projects-identifier-array-document" } } } }, "responses": { - "200": { - "description": "Team access relationship updated", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/team-workspaces-envelope" - } - } - } - }, - "404": { - "description": "Team access not found or user unauthorized to perform action", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "422": { - "description": "Malformed request body (missing attributes, wrong types, etc.)", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } + "204": { + "description": "Project exclusions successfully removed from policy set." }, "default": { "description": "Error details", @@ -18638,31 +19093,84 @@ } } } - }, - "delete": { - "operationId": "removeTeamAccess", - "summary": "Remove Team Access to a Workspace", - "description": "Remove a team's access to a workspace.", + } + }, + "/policy-sets/{policy_set_id}/tag-selectors": { + "x-vis": [ + "public-beta" + ], + "post": { + "operationId": "addPolicySetTagSelectors", + "summary": "Add Tag Selectors to a Policy Set", + "description": "Add tag selectors to a policy set. Tag selectors define tag-based scoping rules for the policy set.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "team-access" + "policy-sets" ], "parameters": [ { "in": "path", - "name": "team_workspace_id", + "name": "policy_set_id", "schema": { "type": "string" }, "required": true, - "description": "The team/workspace relationship ID." + "description": "The ID of the policy set." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "tag-key": { + "type": "string", + "description": "The tag key to match." + }, + "tag-value": { + "type": "string", + "nullable": true, + "description": "The tag value to match." + }, + "is-exclude": { + "type": "boolean", + "description": "Whether this selector excludes matching workspaces." + } + }, + "required": [ + "tag-key", + "tag-value", + "is-exclude" + ] + } + } + } + } + } + } + }, "responses": { "204": { - "description": "Team access relationship deleted" + "description": "Tag selectors successfully added to policy set." }, "404": { - "description": "Team access not found or user unauthorized to perform action", + "description": "Policy set not found or feature not enabled.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Validation error, e.g. tag-based scoping conflicts with explicit associations.", "content": { "application/vnd.api+json": { "schema": { @@ -18682,90 +19190,69 @@ } } } - } - }, - "/tasks/integrations": { - "get": { - "operationId": "listTaskIntegrations", + }, + "delete": { + "operationId": "removePolicySetTagSelectors", + "summary": "Remove Tag Selectors from a Policy Set", + "description": "Remove tag selectors from a policy set by their tag key and value.\n\nThis operation is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", "tags": [ - "tasks" + "policy-sets" ], - "summary": "List Integrations", - "description": "List all available integrations that can be used with tasks. \nBy default, only active integrations are returned.\n", "parameters": [ { - "name": "search", - "in": "query", - "required": false, - "description": "Search integrations by name (case-insensitive, partial match).", - "schema": { - "type": "string", - "example": "cloud" - } - }, - { - "name": "category", - "in": "query", - "required": false, - "description": "Filter integrations by category.", - "schema": { - "type": "string", - "example": "cost-estimation" - } - }, - { - "name": "include_inactive", - "in": "query", - "required": false, - "description": "Include inactive integrations in the results.", + "in": "path", + "name": "policy_set_id", "schema": { - "type": "string", - "enum": [ - "true", - "false" - ], - "default": "false" - } - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "type": "string" + }, + "required": true, + "description": "The ID of the policy set." } ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/integrations" - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "meta": { + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { "type": "object", "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" + "tag-key": { + "type": "string", + "description": "The tag key to match." + }, + "tag-value": { + "type": "string", + "nullable": true, + "description": "The tag value to match." + }, + "is-exclude": { + "type": "boolean", + "description": "Whether this selector excludes matching workspaces." } - } + }, + "required": [ + "tag-key", + "tag-value", + "is-exclude" + ] } } } } } + } + }, + "responses": { + "204": { + "description": "Tag selectors successfully removed from policy set." }, - "401": { - "description": "Unauthorized", + "404": { + "description": "Policy set not found or feature not enabled.", "content": { "application/vnd.api+json": { "schema": { @@ -18774,8 +19261,8 @@ } } }, - "422": { - "description": "Unprocessable Content", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -18787,46 +19274,56 @@ } } }, - "/workspaces/{workspace_id}/configuration-versions": { + "/policy-sets/{policy_set_id}/versions": { "get": { - "operationId": "listConfigurationVersions", - "summary": "List Configuration Versions", - "description": "List configuration versions for a workspace.", + "operationId": "listPolicySetVersions", + "summary": "List Policy Set Versions", + "description": "List all versions of a policy set.", "tags": [ - "configuration-versions" + "policy-set-versions" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "policy_set_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace." + "description": "The ID of the policy set." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[policy-set-versions]", + "description": "Return only the specified fields for policy-set-versions resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of configuration versions", + "description": "List of policy set versions", "content": { "application/vnd.api+json": { "schema": { "type": "object", - "required": [ - "data" - ], "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/configuration-versions" + "$ref": "#/components/schemas/policy-set-versions" } }, "meta": { @@ -18858,40 +19355,30 @@ } }, "post": { - "operationId": "createConfigurationVersion", - "summary": "Create Configuration Version", - "description": "Create a new configuration version in a workspace.", + "operationId": "createPolicySetVersion", + "summary": "Create a Policy Set Version", + "description": "Create a new version for a policy set. The version will be in a pending state until policies are uploaded to it.", "tags": [ - "configuration-versions" + "policy-set-versions" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "policy_set_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace." + "description": "The ID of the policy set." } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/configuration-versions-envelope" - } - } - } - }, "responses": { "201": { - "description": "Configuration version created", + "description": "Policy set version created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/configuration-versions-envelope" + "$ref": "#/components/schemas/policy-set-versions-envelope" } } } @@ -18909,32 +19396,45 @@ } } }, - "/configuration-versions/{configuration_version_id}": { + "/policy-set-versions/{policy_set_version_id}": { "get": { - "operationId": "getConfigurationVersion", - "summary": "Get Configuration Version", - "description": "Get details of a specific configuration version.", + "operationId": "getPolicySetVersion", + "summary": "Get a Policy Set Version", + "description": "Get details about a specific policy set version.", "tags": [ - "configuration-versions" + "policy-set-versions" ], "parameters": [ { "in": "path", - "name": "configuration_version_id", + "name": "policy_set_version_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the configuration version." + "description": "The ID of the policy set version." + }, + { + "in": "query", + "name": "fields[policy-set-versions]", + "description": "Return only the specified fields for policy-set-versions resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Configuration version details", + "description": "Policy set version details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/configuration-versions-envelope" + "$ref": "#/components/schemas/policy-set-versions-envelope" } } } @@ -18952,32 +19452,45 @@ } } }, - "/configuration-versions/{configuration_version_id}/ingress-attributes": { + "/policy-evaluations/{policy_evaluation_id}": { "get": { - "operationId": "getIngressAttributes", - "summary": "Get Ingress Attributes", - "description": "Get commit information for a configuration version.", + "operationId": "getPolicyEvaluation", + "summary": "Show a Policy Evaluation", + "description": "Get details about a specific policy evaluation.", "tags": [ - "configuration-versions" + "policy-evaluations" ], "parameters": [ { "in": "path", - "name": "configuration_version_id", + "name": "policy_evaluation_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the configuration version." + "description": "The ID of the policy evaluation to show." + }, + { + "in": "query", + "name": "fields[policy-evaluations]", + "description": "Return only the specified fields for policy-evaluations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Ingress attributes details", + "description": "Policy evaluation details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/ingress-attributes" + "$ref": "#/components/schemas/policy-evaluations-envelope" } } } @@ -18995,41 +19508,76 @@ } } }, - "/configuration-versions/{configuration_version_id}/actions/archive": { - "post": { - "operationId": "archiveConfigurationVersion", - "summary": "Archive Configuration Version", - "description": "Archive the uploaded files for a configuration version.", + "/policy-evaluations/{policy_evaluation_id}/policy-set-outcomes": { + "get": { + "operationId": "listPolicySetOutcomes", + "summary": "List Policy Set Outcomes", + "description": "List the policy set outcomes associated with a policy evaluation.", "tags": [ - "configuration-versions" + "policy-evaluations" ], "parameters": [ { "in": "path", - "name": "configuration_version_id", + "name": "policy_evaluation_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the configuration version." + "description": "The ID of the policy evaluation to list outcomes for." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[policy-set-outcomes]", + "description": "Return only the specified fields for policy-set-outcomes resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { - "202": { - "description": "Archive process initiated", + "200": { + "description": "List of policy set outcomes", "content": { "application/vnd.api+json": { "schema": { - "type": "string", - "enum": [ - "null" - ] + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/policy-set-outcomes" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } } } } }, - "409": { - "description": "Configuration version was in a non-archivable state or the configuration version was created with VCS and cannot be archived through the API.", + "400": { + "description": "Invalid filter provided", "content": { "application/vnd.api+json": { "schema": { @@ -19051,31 +19599,48 @@ } } }, - "/configuration-versions/{configuration_version_id}/actions/soft_delete_backing_data": { - "x-vis": [ - "tfe" - ], - "post": { - "operationId": "softDeleteConfigurationVersion", - "summary": "Soft Delete Configuration Version", - "description": "Mark a configuration version for garbage collection.\n\nThis operation is only available in Terraform Enterprise.", + "/policy-set-outcomes/{policy_set_outcome_id}": { + "get": { + "operationId": "getPolicySetOutcome", + "summary": "Show a Policy Set Outcome", + "description": "Get details about a specific policy set outcome.", "tags": [ - "configuration-versions" + "policy-evaluations" ], "parameters": [ { "in": "path", - "name": "configuration_version_id", + "name": "policy_set_outcome_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the configuration version." + "description": "The ID of the policy set outcome to show." + }, + { + "in": "query", + "name": "fields[policy-set-outcomes]", + "description": "Return only the specified fields for policy-set-outcomes resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Configuration version marked for garbage collection" + "description": "Policy set outcome details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/policy-set-outcomes-envelope" + } + } + } }, "default": { "description": "Error details", @@ -19090,31 +19655,73 @@ } } }, - "/configuration-versions/{configuration_version_id}/actions/restore_backing_data": { - "x-vis": [ - "tfe" - ], - "post": { - "operationId": "restoreConfigurationVersion", - "summary": "Restore Configuration Version", - "description": "Restore a configuration version marked for garbage collection.\n\nThis operation is only available in Terraform Enterprise.", + "/task-stages/{task_stage_id}/policy-evaluations": { + "get": { + "operationId": "listTaskStagePolicyEvaluations", + "summary": "List Policy Evaluations for a Task Stage", + "description": "List the policy evaluations associated with a task stage.", "tags": [ - "configuration-versions" + "policy-evaluations" ], "parameters": [ { "in": "path", - "name": "configuration_version_id", + "name": "task_stage_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the configuration version." + "description": "The ID of the task stage to list policy evaluations for." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[policy-evaluations]", + "description": "Return only the specified fields for policy-evaluations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Configuration version restored" + "description": "List of policy evaluations", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/policy-evaluations" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } }, "default": { "description": "Error details", @@ -19129,31 +19736,124 @@ } } }, - "/configuration-versions/{configuration_version_id}/actions/permanently_delete_backing_data": { - "x-vis": [ - "tfe" - ], + "/plan-exports": { "post": { - "operationId": "permanentlyDeleteConfigurationVersion", - "summary": "Permanently Delete Configuration Version", - "description": "Permanently delete the backing files for a configuration version.\n\nThis operation is only available in Terraform Enterprise.", + "operationId": "createPlanExport", + "summary": "Create a Plan Export", + "description": "Export data from a plan in the specified format. The export process is asynchronous, and the resulting data becomes downloadable when its status is \"finished\".", "tags": [ - "configuration-versions" + "plan-exports" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/plan-exports-envelope" + } + } + } + }, + "responses": { + "201": { + "description": "Plan export created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/plan-exports-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/plan-exports/{id}": { + "get": { + "operationId": "showPlanExport", + "summary": "Show a Plan Export", + "description": "Get details about a specific plan export.", + "tags": [ + "plan-exports" ], "parameters": [ { "in": "path", - "name": "configuration_version_id", + "name": "id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the configuration version." + "description": "The ID of the plan export to show." + }, + { + "in": "query", + "name": "fields[plan-exports]", + "description": "Return only the specified fields for plan-exports resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Configuration version permanently deleted" + "description": "Plan export details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/plan-exports-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "delete": { + "operationId": "deletePlanExport", + "summary": "Delete a Plan Export", + "description": "Delete the exported plan data. Plan exports expire after one hour, but can be deleted manually.", + "tags": [ + "plan-exports" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the plan export to delete." + } + ], + "responses": { + "204": { + "description": "Plan export deleted successfully" }, "default": { "description": "Error details", @@ -19168,28 +19868,28 @@ } } }, - "/configuration-versions/{configuration_version_id}/download": { + "/plan-exports/{id}/download": { "get": { - "operationId": "downloadConfigurationVersion", - "summary": "Download Configuration Version", - "description": "Generate a temporary URL to download the configuration version files.", + "operationId": "downloadPlanExport", + "summary": "Download exported plan data", + "description": "Generate a temporary URL to the location of the exported plan data in a .tar.gz archive, then redirect to that link.", "tags": [ - "configuration-versions" + "plan-exports" ], "parameters": [ { "in": "path", - "name": "configuration_version_id", + "name": "id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the configuration version." + "description": "The ID of the plan export to download." } ], "responses": { "200": { - "description": ".tar.gz file containing the configuration version.", + "description": ".tar.gz file containing the exported plan data.", "content": { "application/octet-stream": { "schema": { @@ -19212,118 +19912,50 @@ } } }, - "/organizations/{organization_name}/vcs-events": { + "/assessment-results/{id}": { "get": { - "operationId": "listOrganizationVcsEvents", - "summary": "List VCS Events", - "description": "List VCS events for an organization.", + "summary": "Show an assessment result", + "operationId": "getAssessmentResult", "tags": [ - "vcs-events" + "assessment-results" ], "parameters": [ { + "name": "id", "in": "path", - "name": "organization_name", - "schema": { - "type": "string" - }, "required": true, - "description": "The name of the organization to list VCS events from." - }, - { - "in": "query", - "name": "filter[from]", - "schema": { - "type": "string", - "format": "date-time" - }, - "required": false, - "description": "RFC3339 formatted UTC timestamp. If omitted, defaults to 10 days ago." - }, - { - "in": "query", - "name": "filter[to]", - "schema": { - "type": "string", - "format": "date-time" - }, - "required": false, - "description": "RFC3339 formatted UTC timestamp. If omitted, defaults to now." - }, - { - "in": "query", - "name": "filter[oauth_client_external_ids]", - "schema": { - "type": "string" - }, - "required": false, - "description": "Comma-separated list of OAuth client external IDs to filter by." - }, - { - "in": "query", - "name": "filter[levels]", + "description": "The external ID of the assessment result to show.", "schema": { "type": "string" - }, - "required": false, - "description": "Comma-separated list of event levels to filter by. Accepted values are \"info\" and \"error\"." + } }, { "in": "query", - "name": "include", + "name": "fields[assessment-results]", + "description": "Return only the specified fields for assessment-results resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", "style": "form", "explode": false, "schema": { "type": "array", "items": { - "type": "string", - "enum": [ - "oauth_client" - ] + "type": "string" } - }, - "required": false, - "description": "Allows including related resource data." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + } } ], "responses": { "200": { - "description": "List of VCS events", + "description": "The request was successful", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/vcs-events" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } + "$ref": "#/components/schemas/assessment-results-envelope" } } } }, "default": { - "description": "Error details", + "description": "Assessment result not found, or user unauthorized to perform action", "content": { "application/vnd.api+json": { "schema": { @@ -19335,97 +19967,40 @@ } } }, - "/organizations/{organization_name}/vcs/tree": { + "/assessment-results/{id}/json-output": { "get": { - "operationId": "getVcsTree", - "summary": "List directories in a repository", - "description": "This endpoint returns a list of directories in a repository \nat the root or at a specific reference (branch, tag, or commit SHA).\nNote: This endpoint only returns directories, not files.\n", - "tags": [ - "vcs" - ], + "operationId": "getAssessmentResultJSONOutput", + "summary": "Get the JSON assessment output", + "description": "This endpoint returns the JSON formatted assessment output.\nThis is only available when the assessment has succeeded and has JSON output data.\n", "parameters": [ { - "name": "organization_name", + "name": "id", "in": "path", + "description": "The external ID of the assessment result.", "required": true, "schema": { "type": "string" - }, - "description": "The name of the organization" - }, - { - "name": "oauth_token_id", - "in": "query", - "required": true, - "schema": { - "type": "string" - }, - "description": "The OAuth token ID to authenticate with the VCS provider" - }, - { - "name": "identifier", - "in": "query", - "required": true, - "schema": { - "type": "string" - }, - "description": "The repository identifier (e.g., \"owner/repo\")" - }, - { - "name": "branch", - "in": "query", - "required": false, - "schema": { - "type": "string" - }, - "description": "The branch, tag, or commit SHA to list directories for. \nIf not provided, the default branch will be used.\n" - }, - { - "name": "githubAppInstallationId", - "in": "query", - "required": false, - "schema": { - "type": "string" - }, - "description": "The GitHub App installation ID (only needed when using GitHub App authentication)" + } } ], + "tags": [ + "assessment-results" + ], "responses": { "200": { - "description": "Successfully retrieved repository directories", + "description": "Assessment result JSON output found and returned.", "content": { - "application/vnd.api+json": { + "application/json": { "schema": { "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the directory" - }, - "type": { - "type": "string", - "enum": [ - "vcs-tree" - ] - } - } - } - } - } + "additionalProperties": true, + "description": "The JSON formatted assessment output with dynamic structure" } } } }, "404": { - "description": "Repository not found or user doesn't have access" - }, - "422": { - "description": "VCS provider error", + "description": "Assessment result failed or JSON output is not available.", "content": { "application/vnd.api+json": { "schema": { @@ -19433,124 +20008,53 @@ } } } - } - }, - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/organizations/{organization_name}/vcs/repo": { - "get": { - "operationId": "checkVcsRepository", - "summary": "Check if a repository exists", - "description": "This endpoint checks if a repository exists and is accessible to the user.\n", - "tags": [ - "vcs" - ], - "parameters": [ - { - "name": "organization_name", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "The name of the organization" - }, - { - "name": "oauth_token_id", - "in": "query", - "required": true, - "schema": { - "type": "string" - }, - "description": "The OAuth token ID to authenticate with the VCS provider" }, - { - "name": "identifier", - "in": "query", - "required": true, - "schema": { - "type": "string" - }, - "description": "The repository identifier (e.g., \"owner/repo\")" - } - ], - "responses": { - "200": { - "description": "Successfully checked repository existence", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/vcs-repo-check-envelope" + "$ref": "#/components/schemas/errors" } } } - }, - "404": { - "description": "OAuth token not found or user doesn't have access" - } - }, - "security": [ - { - "bearerAuth": [] } - ] + } } }, - "/organizations/{organization_name}/registry-modules/validation": { + "/assessment-results/{id}/json-schema": { "get": { - "operationId": "validateRegistryModuleNames", - "summary": "Check if a module name and provider combination is available", - "description": "This endpoint checks if a module name and provider combination is available for use within an organization.\nIt returns a validation result indicating whether the name is already in use.\n", - "tags": [ - "registry" - ], + "operationId": "getAssessmentResultJSONSchema", + "summary": "Get the JSON schema", + "description": "This endpoint returns the JSON schema for the assessment result.\nThis is only available when the assessment has succeeded and has provider schemas.\n", "parameters": [ { - "name": "organization_name", + "name": "id", "in": "path", + "description": "The external ID of the assessment result.", "required": true, "schema": { "type": "string" - }, - "description": "The name of the organization" - }, - { - "name": "name", - "in": "query", - "required": true, - "schema": { - "type": "string" - }, - "description": "The name of the module to validate" - }, - { - "name": "provider", - "in": "query", - "required": true, - "schema": { - "type": "string" - }, - "description": "The provider of the module to validate" + } } ], + "tags": [ + "assessment-results" + ], "responses": { "200": { - "description": "Successfully validated the module name and provider", + "description": "JSON schema found and returned.", "content": { - "application/vnd.api+json": { + "application/json": { "schema": { - "$ref": "#/components/schemas/registry-module-address-validations-envelope" + "type": "object", + "description": "The JSON schema of the assessment result" } } } }, - "400": { - "description": "Bad request", + "404": { + "description": "Assessment result failed or JSON schema is not available.", "content": { "application/vnd.api+json": { "schema": { @@ -19559,8 +20063,8 @@ } } }, - "401": { - "description": "Unauthorized", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -19568,9 +20072,43 @@ } } } + } + } + } + }, + "/assessment-results/{id}/sanitized-plan": { + "get": { + "operationId": "getAssessmentResultSanitizedPlan", + "summary": "Get the sanitized plan", + "description": "This endpoint returns the sanitized plan for the assessment result.\nThis is only available when HYOK is enabled for the organization,\nthe assessment has succeeded, and a sanitized plan is available.\n", + "parameters": [ + { + "name": "id", + "in": "path", + "description": "The external ID of the assessment result.", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "assessment-results" + ], + "responses": { + "200": { + "description": "Sanitized plan found and returned.", + "content": { + "application/json": { + "schema": { + "type": "object", + "description": "The sanitized plan output" + } + } + } }, "404": { - "description": "Organization not found", + "description": "HYOK not available, assessment result failed, or sanitized plan is not available.", "content": { "application/vnd.api+json": { "schema": { @@ -19579,8 +20117,8 @@ } } }, - "422": { - "description": "Validation error", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -19592,68 +20130,60 @@ } } }, - "/organizations/{organization_name}/registry-modules/{registry_name}/{namespace}/{name}/{provider}": { + "/assessment-results/{id}/log-output": { "get": { - "operationId": "getRegistryModule", - "summary": "Show a registry module", - "description": "Returns details for a registry module, including its status, publishing\nmechanism, version statuses, and VCS settings when available to the\nrequesting organization.\n", - "tags": [ - "registry" - ], + "operationId": "getAssessmentResultLogOutput", + "summary": "Get the log output", + "description": "This endpoint returns the log output for the assessment result.\nSupports both JSON and plain text formats based on the Accept header.\nQuery parameters allow for pagination of log output.\n", "parameters": [ { + "name": "id", "in": "path", - "name": "organization_name", - "schema": { - "type": "string" - }, + "description": "The external ID of the assessment result.", "required": true, - "description": "The name of the organization requesting the module." - }, - { - "in": "path", - "name": "registry_name", "schema": { "type": "string" - }, - "required": true, - "description": "The registry the module belongs to (e.g. \"private\" or \"public\")." + } }, { - "in": "path", - "name": "namespace", + "name": "limit", + "in": "query", + "description": "Maximum number of bytes to return", + "required": false, "schema": { - "type": "string" - }, - "required": true, - "description": "The namespace of the module." + "type": "integer" + } }, { - "in": "path", - "name": "name", + "name": "offset", + "in": "query", + "description": "Byte offset to start reading from", + "required": false, "schema": { - "type": "string" - }, - "required": true, - "description": "The name of the module." + "type": "integer" + } }, { - "in": "path", - "name": "provider", + "name": "tail", + "in": "query", + "description": "If true, return the last N bytes instead of the first N bytes", + "required": false, "schema": { - "type": "string" - }, - "required": true, - "description": "The provider of the module." + "type": "boolean" + } } ], + "tags": [ + "assessment-results" + ], "responses": { "200": { - "description": "The registry module was found.", + "description": "Log output returned successfully.", "content": { - "application/vnd.api+json": { + "text/plain": { "schema": { - "$ref": "#/components/schemas/registry-modules-envelope" + "type": "string", + "description": "The log output in plain text format" } } } @@ -19669,84 +20199,52 @@ } } } - }, - "patch": { - "operationId": "updateRegistryModule", - "summary": "Update a registry module", - "description": "When updating a VCS-backed private registry module, you can change the publishing\nmechanism (branch, tags, or tag prefix) and the VCS connection itself.\nChanging the connection re-validates the new VCS source and re-ingests the\nmodule.\n", + } + }, + "/applies/{id}": { + "get": { + "summary": "Show an apply", + "operationId": "getApply", "tags": [ - "registry" + "applies" ], "parameters": [ { + "name": "id", "in": "path", - "name": "organization_name", - "schema": { - "type": "string" - }, - "required": true, - "description": "The name of the organization that owns the module." - }, - { - "in": "path", - "name": "registry_name", - "schema": { - "type": "string" - }, - "required": true, - "description": "The registry the module belongs to (e.g. \"private\")." - }, - { - "in": "path", - "name": "namespace", - "schema": { - "type": "string" - }, "required": true, - "description": "The namespace of the module." - }, - { - "in": "path", - "name": "name", + "description": "The ID of the apply to show.", "schema": { "type": "string" - }, - "required": true, - "description": "The name of the module." + } }, { - "in": "path", - "name": "provider", + "in": "query", + "name": "fields[applies]", + "description": "Return only the specified fields for applies resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": true, - "description": "The provider of the module." - } - ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/registry-modules-envelope" + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { "200": { - "description": "The registry module was updated.", + "description": "The request was successful", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/registry-modules-envelope" + "$ref": "#/components/schemas/applies-envelope" } } } }, "default": { - "description": "Error details", + "description": "Apply not found, or user unauthorized to perform action", "content": { "application/vnd.api+json": { "schema": { @@ -19758,99 +20256,74 @@ } } }, - "/organizations/{organization_name}/tests/registry-modules/{registry_name}/{namespace}/{name}/{provider}/test-runs/{test_run_id}/cleanups/{id}": { + "/applies/{id}/errored-state": { "get": { - "operationId": "getTestRunCleanup", - "summary": "Get a Test Run Cleanup", - "description": "Get details about a specific cleanup attempt associated with a test run.\n", + "summary": "Recover a failed state upload after applying", + "operationId": "getApplyErroredState", "tags": [ - "registry" + "applies" ], "parameters": [ { + "name": "id", "in": "path", - "name": "organization_name", "required": true, + "description": "The ID of the apply to recover state for.", "schema": { "type": "string" - }, - "description": "The name of the organization." - }, - { - "in": "path", - "name": "registry_name", - "required": true, - "schema": { - "type": "string" - }, - "description": "The registry host name." - }, - { - "in": "path", - "name": "namespace", - "required": true, - "schema": { - "type": "string" - }, - "description": "The namespace of the registry module." - }, - { - "in": "path", - "name": "name", - "required": true, - "schema": { - "type": "string" - }, - "description": "The name of the registry module." - }, - { - "in": "path", - "name": "provider", - "required": true, - "schema": { - "type": "string" - }, - "description": "The provider of the registry module." - }, - { - "in": "path", - "name": "test_run_id", - "required": true, - "schema": { - "type": "string" - }, - "description": "The ID of the test run." + } + } + ], + "responses": { + "307": { + "description": "Errored state available and user is authorized to read it", + "headers": { + "Location": { + "description": "Storage URL to raw state file", + "schema": { + "type": "string" + } + } + } }, + "default": { + "description": "Apply not found, errored state not uploaded, or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/applies/{id}/actions/soft-delete-backing-data": { + "x-vis": [ + "tfe" + ], + "post": { + "operationId": "softDeleteApplyBackingData", + "summary": "Soft Delete Apply Backing Data", + "description": "Mark the backing files associated with this apply for garbage collection. Terraform permanently deletes backing files after a set number of days unless the apply is restored.\n\nThis operation is only available in Terraform Enterprise.", + "tags": [ + "applies" + ], + "parameters": [ { "in": "path", "name": "id", - "required": true, "schema": { "type": "string" }, - "description": "The ID of the test run cleanup." + "required": true, + "description": "The ID of the apply to mark for garbage collection." } ], "responses": { - "200": { - "description": "Test run cleanup details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/test-run-cleanups-envelope" - } - } - } - }, - "404": { - "description": "Test run cleanup not found or user unauthorized to perform action", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } + "204": { + "description": "Apply backing data marked for garbage collection" }, "default": { "description": "Error details", @@ -19865,64 +20338,34 @@ } } }, - "/organizations/{organization_name}/ssh-keys": { - "get": { - "operationId": "listSshKeys", + "/applies/{id}/actions/restore-backing-data": { + "x-vis": [ + "tfe" + ], + "post": { + "operationId": "restoreApplyBackingData", + "summary": "Restore Apply Backing Data", + "description": "Restore backing files associated with an apply that was previously marked for garbage collection. This restores the apply back to its finalized state.\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "ssh-keys" + "applies" ], - "summary": "List SSH Keys", - "description": "List all SSH keys for an organization.", "parameters": [ { - "name": "organization_name", "in": "path", - "required": true, - "description": "The name of the organization.", + "name": "id", "schema": { - "type": "string", - "example": "my-organization" - } - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "type": "string" + }, + "required": true, + "description": "The ID of the apply to restore." } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ssh-keys" - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - } - } - } - } - } + "204": { + "description": "Apply backing data restore initiated" }, - "404": { - "description": "Not Found", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -19932,59 +20375,36 @@ } } } - }, + } + }, + "/applies/{id}/actions/permanently-delete-backing-data": { + "x-vis": [ + "tfe" + ], "post": { - "operationId": "createSshKey", + "operationId": "permanentlyDeleteApplyBackingData", + "summary": "Permanently Delete Apply Backing Data", + "description": "Permanently delete the backing files associated with an apply that has been soft deleted. This action cannot be undone.\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "ssh-keys" + "applies" ], - "summary": "Create an SSH Key", - "description": "Create a new SSH key for an organization.", "parameters": [ { - "name": "organization_name", "in": "path", - "required": true, - "description": "The name of the organization.", + "name": "id", "schema": { - "type": "string", - "example": "my-organization" - } + "type": "string" + }, + "required": true, + "description": "The ID of the apply to permanently delete backing data for." } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/ssh-keys-envelope" - } - } - } - }, "responses": { - "201": { - "description": "Created", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/ssh-keys-envelope" - } - } - } - }, - "404": { - "description": "Not Found", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } + "204": { + "description": "Apply backing data permanently deleted" }, - "422": { - "description": "Unprocessable Content", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -19996,39 +20416,34 @@ } } }, - "/ssh-keys/{ssh_key_id}": { - "get": { - "operationId": "getSshKey", + "/assessments/{id}/actions/soft-delete-backing-data": { + "x-vis": [ + "tfe" + ], + "post": { + "operationId": "softDeleteAssessmentBackingData", + "summary": "Soft Delete Assessment Backing Data", + "description": "Mark the backing files associated with this assessment for garbage collection. Terraform permanently deletes backing files after a set number of days unless the assessment is restored.\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "ssh-keys" + "assessments" ], - "summary": "Get an SSH Key", - "description": "Retrieve the details of a single SSH key.", "parameters": [ { - "name": "ssh_key_id", "in": "path", - "required": true, - "description": "The ID of the SSH key.", + "name": "id", "schema": { - "type": "string", - "example": "sshkey-xxxxxxxxxxxxxxxx" - } + "type": "string" + }, + "required": true, + "description": "The ID of the assessment to mark for garbage collection." } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/ssh-keys-envelope" - } - } - } + "204": { + "description": "Assessment backing data marked for garbage collection" }, - "404": { - "description": "Not Found", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -20038,49 +20453,36 @@ } } } - }, - "patch": { - "operationId": "updateSshKey", + } + }, + "/assessments/{id}/actions/restore-backing-data": { + "x-vis": [ + "tfe" + ], + "post": { + "operationId": "restoreAssessmentBackingData", + "summary": "Restore Assessment Backing Data", + "description": "Restore backing files associated with an assessment that was previously marked for garbage collection. This restores the assessment back to its finalized state.\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "ssh-keys" + "assessments" ], - "summary": "Update an SSH Key", - "description": "Update the name of an SSH key.", "parameters": [ { - "name": "ssh_key_id", "in": "path", - "required": true, - "description": "The ID of the SSH key.", + "name": "id", "schema": { - "type": "string", - "example": "sshkey-xxxxxxxxxxxxxxxx" - } + "type": "string" + }, + "required": true, + "description": "The ID of the assessment to restore." } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/ssh-keys-envelope" - } - } - } - }, "responses": { - "200": { - "description": "OK", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/ssh-keys-envelope" - } - } - } + "204": { + "description": "Assessment backing data restore initiated" }, - "404": { - "description": "Not Found", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -20088,9 +20490,38 @@ } } } + } + } + } + }, + "/assessments/{id}/actions/permanently-delete-backing-data": { + "x-vis": [ + "tfe" + ], + "post": { + "operationId": "permanentlyDeleteAssessmentBackingData", + "summary": "Permanently Delete Assessment Backing Data", + "description": "Permanently delete the backing files associated with an assessment that has been soft deleted. This action cannot be undone.\n\nThis operation is only available in Terraform Enterprise.", + "tags": [ + "assessments" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the assessment to permanently delete backing data for." + } + ], + "responses": { + "204": { + "description": "Assessment backing data permanently deleted" }, - "422": { - "description": "Unprocessable Content", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -20100,32 +20531,52 @@ } } } - }, - "delete": { - "operationId": "deleteSshKey", + } + }, + "/cost-estimates/{id}": { + "get": { + "summary": "Show a cost estimate", + "operationId": "showCostEstimate", "tags": [ - "ssh-keys" + "cost-estimates" ], - "summary": "Delete an SSH Key", - "description": "Delete an SSH key.", "parameters": [ { - "name": "ssh_key_id", + "name": "id", "in": "path", "required": true, - "description": "The ID of the SSH key.", + "description": "The ID of the cost estimate to show.", "schema": { - "type": "string", - "example": "sshkey-xxxxxxxxxxxxxxxx" + "type": "string" + } + }, + { + "in": "query", + "name": "fields[cost-estimates]", + "description": "Return only the specified fields for cost-estimates resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } } } ], "responses": { - "204": { - "description": "No Content" + "200": { + "description": "The request was successful", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/cost-estimates-envelope" + } + } + } }, - "404": { - "description": "Not Found", + "default": { + "description": "Cost estimate not found, or user unauthorized to perform action", "content": { "application/vnd.api+json": { "schema": { @@ -20137,43 +20588,65 @@ } } }, - "/workspaces/{workspace_id}/change-requests": { + "/state-versions": { "get": { - "operationId": "listWorkspaceChangeRequests", - "summary": "List Change Requests in a Workspace", - "description": "List all change requests for a workspace.", + "operationId": "listStateVersions", + "summary": "List State Versions for a Workspace", + "description": "List state versions for a workspace, filtered by organization and workspace name.", "tags": [ - "change-requests" + "state-versions" ], "parameters": [ { - "in": "path", - "name": "workspace_id", + "in": "query", + "name": "filter[workspace][name]", "schema": { "type": "string" }, "required": true, - "description": "The workspace ID." + "description": "The name of the workspace to list state versions for." }, { "in": "query", - "name": "archive", + "name": "filter[organization][name]", "schema": { - "type": "boolean" + "type": "string" + }, + "required": true, + "description": "The name of the organization that owns the workspace." + }, + { + "in": "query", + "name": "filter[status]", + "schema": { + "type": "string" }, "required": false, - "description": "When true, returns only archived change requests. When false, returns only unarchived change requests. When omitted, returns all change requests ordered by creation date." + "description": "Filter state versions by status. One or more comma-separated values from pending, finalized, or discarded." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[state-versions]", + "description": "Return only the specified fields for state-versions resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of change requests", + "description": "List of state versions", "content": { "application/vnd.api+json": { "schema": { @@ -20182,7 +20655,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/workspace-change-requests" + "$ref": "#/components/schemas/state-versions" } }, "meta": { @@ -20214,32 +20687,45 @@ } } }, - "/change-requests/{change_request_id}": { + "/state-versions/{state_version_id}": { "get": { - "operationId": "showChangeRequest", - "summary": "Show a Change Request", - "description": "Get details about a specific change request.", + "operationId": "getStateVersion", + "summary": "Show a State Version", + "description": "Show details for a specific state version.", "tags": [ - "change-requests" + "state-versions" ], "parameters": [ { "in": "path", - "name": "change_request_id", + "name": "state_version_id", "schema": { "type": "string" }, "required": true, - "description": "The change request ID." + "description": "The ID of the state version to show." + }, + { + "in": "query", + "name": "fields[state-versions]", + "description": "Return only the specified fields for state-versions resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Change request details", + "description": "State version details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspace-change-requests-envelope" + "$ref": "#/components/schemas/state-versions-envelope" } } } @@ -20257,79 +20743,154 @@ } } }, - "/change-requests/{change_request_id}/actions/archive": { + "/state-versions/{state_version_id}/outputs": { "get": { - "operationId": "getChangeRequestArchive", - "summary": "Get Change Request Archive Status", - "description": "Get the current state of a change request, including its archive status.", + "operationId": "listStateVersionOutputs", + "summary": "List State Version Outputs", + "description": "List the output values associated with a specific state version.", "tags": [ - "change-requests" + "state-versions" ], "parameters": [ { "in": "path", - "name": "change_request_id", + "name": "state_version_id", "schema": { "type": "string" }, "required": true, - "description": "The change request ID." + "description": "The ID of the state version whose outputs to list." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[state-version-outputs]", + "description": "Return only the specified fields for state-version-outputs resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Change request details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/workspace-change-requests-envelope" - } - } - } - }, - "default": { - "description": "Error details", + "description": "List of state version outputs", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/state-version-outputs" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } } } - }, + } + }, + "/state-versions/{state_version_id}/actions/soft_delete_backing_data": { + "x-vis": [ + "tfe" + ], "post": { - "operationId": "archiveChangeRequest", - "summary": "Archive a Change Request", - "description": "Archive a change request to mark it as completed.", + "operationId": "softDeleteStateVersionBackingData", + "summary": "Soft Delete State Version Backing Data", + "description": "Mark the backing files associated with this state version for garbage collection. Terraform permanently deletes backing files after a set number of days unless the state version is restored.\n\nThis operation is only available in Terraform Enterprise.", "tags": [ - "change-requests" + "state-versions" ], "parameters": [ { "in": "path", - "name": "change_request_id", + "name": "state_version_id", "schema": { "type": "string" }, "required": true, - "description": "The change request ID." + "description": "The ID of the state version to mark for garbage collection." } ], "responses": { - "200": { - "description": "Change request successfully archived", + "204": { + "description": "State version backing data marked for garbage collection" + }, + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspace-change-requests-envelope" + "$ref": "#/components/schemas/errors" } } } + } + } + } + }, + "/state-versions/{state_version_id}/actions/restore_backing_data": { + "x-vis": [ + "tfe" + ], + "post": { + "operationId": "restoreStateVersionBackingData", + "summary": "Restore State Version Backing Data", + "description": "Restore backing files associated with a state version that was previously marked for garbage collection. This restores the state version back to its finalized state.\n\nThis operation is only available in Terraform Enterprise.", + "tags": [ + "state-versions" + ], + "parameters": [ + { + "in": "path", + "name": "state_version_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the state version to restore." + } + ], + "responses": { + "204": { + "description": "State version backing data restore initiated" }, - "400": { - "description": "The change request is already archived.", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -20337,6 +20898,35 @@ } } } + } + } + } + }, + "/state-versions/{state_version_id}/actions/permanently_delete_backing_data": { + "x-vis": [ + "tfe" + ], + "post": { + "operationId": "permanentlyDeleteStateVersionBackingData", + "summary": "Permanently Delete State Version Backing Data", + "description": "Permanently delete the backing files associated with a state version that has been soft deleted. This action cannot be undone.\n\nThis operation is only available in Terraform Enterprise.", + "tags": [ + "state-versions" + ], + "parameters": [ + { + "in": "path", + "name": "state_version_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the state version to permanently delete backing data for." + } + ], + "responses": { + "204": { + "description": "State version backing data permanently deleted" }, "default": { "description": "Error details", @@ -20351,41 +20941,42 @@ } } }, - "/oauth-clients/{oauth_client_id}": { - "get": { - "operationId": "getOAuthClient", - "summary": "Get an OAuth Client", - "description": "Show details of an existing OAuth client.", + "/workspaces/{workspace_id}/state-versions": { + "post": { + "operationId": "createStateVersion", + "summary": "Create a State Version", + "description": "Create a state version and set it as the current state version for the given workspace. The workspace must be locked by the user creating the state version.", "tags": [ - "oauth-clients" + "state-versions" ], "parameters": [ { "in": "path", - "name": "oauth_client_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the OAuth Client." - }, - { - "in": "query", - "name": "show_affected_workspaces", - "schema": { - "type": "boolean" - }, - "required": false, - "description": "If true, includes names of up to 25 affected workspaces and the total count." + "description": "The ID of the workspace to create the state version in." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/state-versions-envelope" + } + } + } + }, "responses": { - "200": { - "description": "OAuth Client details", + "201": { + "description": "State version created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/oauth-clients-envelope" + "$ref": "#/components/schemas/state-versions-envelope" } } } @@ -20403,21 +20994,21 @@ } }, "patch": { - "operationId": "updateOAuthClient", - "summary": "Update an OAuth Client", - "description": "Update settings of an existing OAuth client.", + "operationId": "rollbackStateVersion", + "summary": "Rollback to a Previous State Version", + "description": "Create a state version by duplicating the specified state version and set it as the current state version for the given workspace. The workspace must be locked by the user performing the rollback.", "tags": [ - "oauth-clients" + "state-versions" ], "parameters": [ { "in": "path", - "name": "oauth_client_id", + "name": "workspace_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the OAuth Client to update." + "description": "The ID of the workspace to rollback the state version in." } ], "requestBody": { @@ -20425,18 +21016,18 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/oauth-clients-envelope" + "$ref": "#/components/schemas/state-versions-envelope" } } } }, "responses": { - "200": { - "description": "OAuth Client updated", + "201": { + "description": "State version rollback created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/oauth-clients-envelope" + "$ref": "#/components/schemas/state-versions-envelope" } } } @@ -20452,31 +21043,53 @@ } } } - }, - "delete": { - "operationId": "destroyOAuthClient", - "summary": "Destroy an OAuth Client", - "description": "Remove an existing OAuth client and unlink any associated workspaces.", + } + }, + "/state-version-outputs/{state_version_output_id}": { + "get": { + "operationId": "getStateVersionOutput", + "summary": "Show a State Version Output", + "description": "Show details for a specific state version output.", "tags": [ - "oauth-clients" + "state-version-outputs" ], "parameters": [ { + "name": "state_version_output_id", "in": "path", - "name": "oauth_client_id", + "required": true, + "description": "The ID of the state version output to show.", "schema": { "type": "string" - }, - "required": true, - "description": "The ID of the OAuth Client to destroy." + } + }, + { + "in": "query", + "name": "fields[state-version-outputs]", + "description": "Return only the specified fields for state-version-outputs resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { - "204": { - "description": "OAuth Client successfully destroyed." + "200": { + "description": "The request was successful", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/state-version-outputs-envelope" + } + } + } }, "default": { - "description": "Error details", + "description": "State version output not found or user not authorized to perform action", "content": { "application/vnd.api+json": { "schema": { @@ -20488,37 +21101,69 @@ } } }, - "/oauth-clients": { - "post": { - "operationId": "createOAuthClient", - "summary": "Create an OAuth Client", - "description": "Create a VCS connection between an organization and a VCS provider. The organization is specified via the `organization-id` attribute. This endpoint allows you to provide a pre-generated OAuth token string instead of going through the OAuth Application flow.\n", + "/workspaces/{workspace_id}/current-state-version-outputs": { + "get": { + "operationId": "getCurrentStateVersionOutputs", + "summary": "Show Current State Version Outputs for a Workspace", + "description": "List the current state version outputs for a workspace. Sensitive output values are not revealed and will be returned as null. Organization users who do not have permission to read state versions may use this endpoint to fetch the latest output values for a workspace.", "tags": [ - "oauth-clients" + "state-version-outputs" ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/oauth-clients-envelope" + "parameters": [ + { + "name": "workspace_id", + "in": "path", + "required": true, + "description": "The ID of the workspace to read outputs from.", + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "fields[state-version-outputs]", + "description": "Return only the specified fields for state-version-outputs resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" } } } - }, + ], "responses": { - "201": { - "description": "OAuth Client created", + "200": { + "description": "The request was successful", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/oauth-clients-envelope" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/state-version-outputs" + } + } + } + } + } + } + }, + "503": { + "description": "State version outputs are being processed and are not yet ready. Retry the request.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } }, "default": { - "description": "Error details", + "description": "State version outputs not found or user not authorized to perform action", "content": { "application/vnd.api+json": { "schema": { @@ -20530,13 +21175,16 @@ } } }, - "/organizations/{organization_name}/oauth-clients": { + "/organizations/{organization_name}/hyok-configurations": { + "x-vis": [ + "hcpt" + ], "get": { - "operationId": "listOAuthClients", - "summary": "List OAuth Clients", - "description": "List all VCS connections between an organization and its VCS providers.", + "operationId": "listHyokConfigurations", + "summary": "List HYOK Configurations", + "description": "List all HYOK configurations in an organization\n\nThis operation is only available in HCP Terraform.", "tags": [ - "oauth-clients" + "hyok" ], "parameters": [ { @@ -20546,27 +21194,31 @@ "type": "string" }, "required": true, - "description": "The name of the organization." - }, - { - "in": "query", - "name": "show_affected_workspaces", - "schema": { - "type": "boolean" - }, - "required": false, - "description": "If true, includes names of up to 25 affected workspaces and total count per client." + "description": "The name of the organization" }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[hyok-configurations]", + "description": "Return only the specified fields for hyok-configurations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of OAuth Clients", + "description": "Success", "content": { "application/vnd.api+json": { "schema": { @@ -20575,9 +21227,12 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/oauth-clients" + "$ref": "#/components/schemas/hyok-configurations" } }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, "meta": { "type": "object", "properties": { @@ -20585,9 +21240,6 @@ "$ref": "#/components/schemas/pagination" } } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" } } } @@ -20595,7 +21247,7 @@ } }, "default": { - "description": "Error details", + "description": "Organization not found, or user unauthorized to perform action", "content": { "application/vnd.api+json": { "schema": { @@ -20607,11 +21259,11 @@ } }, "post": { - "operationId": "createOAuthClientForOrganization", - "summary": "Create an OAuth Client for an Organization", - "description": "Create a VCS connection between an organization and a VCS provider. This endpoint allows you to provide a pre-generated OAuth token string instead of going through the OAuth Application flow.\n", + "operationId": "createHyokConfiguration", + "summary": "Create HYOK Configuration", + "description": "Create a new HYOK configuration\n\nThis operation is only available in HCP Terraform.", "tags": [ - "oauth-clients" + "hyok" ], "parameters": [ { @@ -20621,7 +21273,7 @@ "type": "string" }, "required": true, - "description": "The name of the organization." + "description": "Name of the organization" } ], "requestBody": { @@ -20629,18 +21281,18 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/oauth-clients-envelope" + "$ref": "#/components/schemas/hyok-configurations-envelope" } } } }, "responses": { "201": { - "description": "OAuth Client created", + "description": "HYOK Configuration created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/oauth-clients-envelope" + "$ref": "#/components/schemas/hyok-configurations-envelope" } } } @@ -20658,23 +21310,26 @@ } } }, - "/oauth-clients/{oauth_client_id}/relationships/projects": { + "/organizations/{organization_name}/hyok-configurations/test": { + "x-vis": [ + "hcpt" + ], "post": { - "operationId": "attachOAuthClientToProjects", - "summary": "Attach an OAuth Client to Projects", - "description": "Attach an OAuth client to one or more projects.", + "operationId": "testUnpersistedHyokConfiguration", + "summary": "Test new HYOK configuration", + "description": "Test an HYOK configuration that has yet to be saved on HCP Terraform. The test ensures that the configuration is set up correctly to connect to the specified KMS.\n\nThis operation is only available in HCP Terraform.", "tags": [ - "oauth-clients" + "hyok" ], "parameters": [ { "in": "path", - "name": "oauth_client_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the OAuth Client to attach to projects." + "description": "Name of the organization" } ], "requestBody": { @@ -20682,14 +21337,49 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/projects-identifier-array-document" + "type": "object", + "required": [ + "hyok-configuration", + "oidc-configuration" + ], + "properties": { + "hyok-configuration": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/hyok-configurations" + } + } + }, + "oidc-configuration": { + "type": "object", + "properties": { + "data": { + "oneOf": [ + { + "$ref": "#/components/schemas/aws-oidc-configurations" + }, + { + "$ref": "#/components/schemas/gcp-oidc-configurations" + }, + { + "$ref": "#/components/schemas/azure-oidc-configurations" + }, + { + "$ref": "#/components/schemas/vault-oidc-configurations" + } + ] + } + } + } + } } } } }, "responses": { "204": { - "description": "OAuth Client successfully attached to projects." + "description": "HYOK Configuration successfully tested and verified" }, "default": { "description": "Error details", @@ -20702,23 +21392,28 @@ } } } - }, - "delete": { - "operationId": "detachOAuthClientFromProjects", - "summary": "Detach an OAuth Client from Projects", - "description": "Detach an OAuth client from one or more projects.", + } + }, + "/organizations/{organization_name}/oidc-configurations": { + "x-vis": [ + "hcpt" + ], + "post": { + "operationId": "createOidcConfiguration", + "summary": "Create OIDC Configuration", + "description": "Create a new OIDC configuration\n\nThis operation is only available in HCP Terraform.", "tags": [ - "oauth-clients" + "hyok" ], "parameters": [ { "in": "path", - "name": "oauth_client_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the OAuth Client to detach from projects." + "description": "Name of the organization" } ], "requestBody": { @@ -20726,14 +21421,21 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/projects-identifier-array-document" + "$ref": "#/components/schemas/oidc-configuration-envelope" } } } }, "responses": { - "204": { - "description": "OAuth Client successfully detached from projects." + "201": { + "description": "OIDC Configuration created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/oidc-configuration-envelope" + } + } + } }, "default": { "description": "Error details", @@ -20748,39 +21450,54 @@ } } }, - "/oauth-tokens/{oauth_token_id}": { + "/hyok-configurations/{hyok_configuration_id}": { + "x-vis": [ + "hcpt" + ], "get": { + "operationId": "getHyokConfiguration", + "summary": "Get HYOK configuration details", + "description": "Get details about an HYOK configuration\n\nThis operation is only available in HCP Terraform.", "tags": [ - "oauth-tokens" + "hyok" ], - "summary": "Show an OAuth Token", - "description": "Get details about an OAuth token.", - "operationId": "getOauthToken", "parameters": [ { - "name": "oauth_token_id", "in": "path", + "name": "hyok_configuration_id", + "schema": { + "type": "string" + }, "required": true, - "description": "The ID of the OAuth token.", + "description": "HYOK Configuration ID" + }, + { + "in": "query", + "name": "fields[hyok-configurations]", + "description": "Return only the specified fields for hyok-configurations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string", - "example": "ot-xxxxxxxxxxxxxxxx" + "type": "array", + "items": { + "type": "string" + } } } ], "responses": { "200": { - "description": "OK", + "description": "HYOK Configuration details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/oauth-tokens-envelope" + "$ref": "#/components/schemas/hyok-configurations-envelope" } } } }, - "404": { - "description": "Not Found", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -20792,22 +21509,21 @@ } }, "patch": { + "operationId": "updateHyokConfiguration", + "summary": "Update HYOK Configuration", + "description": "Update an HYOK configuration\n\nThis operation is only available in HCP Terraform.", "tags": [ - "oauth-tokens" + "hyok" ], - "summary": "Update an OAuth Token", - "description": "Update an OAuth token by setting its SSH key.", - "operationId": "updateOauthToken", "parameters": [ { - "name": "oauth_token_id", "in": "path", - "required": true, - "description": "The ID of the OAuth token.", + "name": "hyok_configuration_id", "schema": { - "type": "string", - "example": "ot-xxxxxxxxxxxxxxxx" - } + "type": "string" + }, + "required": true, + "description": "HYOK configuration ID" } ], "requestBody": { @@ -20815,34 +21531,24 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/oauth-tokens-envelope" + "$ref": "#/components/schemas/hyok-configurations-envelope" } } } }, "responses": { "200": { - "description": "OK", + "description": "HYOK configuration updated", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/oauth-tokens-envelope" + "$ref": "#/components/schemas/hyok-configurations-envelope" } } } }, - "404": { - "description": "Not Found", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "422": { - "description": "Unprocessable Content", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -20854,30 +21560,29 @@ } }, "delete": { + "operationId": "deleteHyokConfiguration", + "summary": "Delete HYOK Configuration", + "description": "Delete an HYOK configuration. Can only be performed on unused configurations.\n\nThis operation is only available in HCP Terraform.", "tags": [ - "oauth-tokens" + "hyok" ], - "summary": "Destroy an OAuth Token", - "description": "Destroy an OAuth token.", - "operationId": "deleteOauthToken", "parameters": [ { - "name": "oauth_token_id", "in": "path", - "required": true, - "description": "The ID of the OAuth token.", + "name": "hyok_configuration_id", "schema": { - "type": "string", - "example": "ot-xxxxxxxxxxxxxxxx" - } + "type": "string" + }, + "required": true, + "description": "HYOK Configuration ID" } ], "responses": { "204": { - "description": "No Content" + "description": "HYOK configuration deleted" }, - "404": { - "description": "Not Found", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -20889,114 +21594,50 @@ } } }, - "/organizations/{organization_name}/oauth-tokens": { + "/hyok-configurations/{hyok_configuration_id}/hyok-customer-key-versions": { + "x-vis": [ + "hcpt" + ], "get": { + "operationId": "listHyokCustomerKeyVersions", + "summary": "List HYOK Customer Key Versions", + "description": "List all HYOK Customer Key Versions for an HYOK Configuration\n\nThis operation is only available in HCP Terraform.", "tags": [ - "oauth-tokens" + "hyok" ], - "summary": "List OAuth Tokens for an Organization", - "description": "List all OAuth tokens for a given organization.", - "operationId": "listOauthTokensForOrganization", "parameters": [ { - "name": "organization_name", "in": "path", - "required": true, - "description": "The name of the organization.", - "schema": { - "type": "string", - "example": "my-organization" - } - }, - { - "name": "filter[provider]", - "in": "query", - "required": false, - "description": "Filter tokens by VCS provider name.", + "name": "hyok_configuration_id", "schema": { - "type": "string", - "example": "github" - } + "type": "string" + }, + "required": true, + "description": "HYOK Configuration ID" }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/oauth-tokens" - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - } - } - } - } - } }, - "404": { - "description": "Not Found", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - } - } - } - }, - "/oauth-clients/{oauth_client_id}/oauth-tokens": { - "get": { - "tags": [ - "oauth-tokens" - ], - "summary": "List OAuth Tokens for an OAuth Client", - "description": "List all OAuth tokens for a given OAuth client.", - "operationId": "listOauthTokensForOauthClient", - "parameters": [ { - "name": "oauth_client_id", - "in": "path", - "required": true, - "description": "The ID of the OAuth client.", + "in": "query", + "name": "fields[hyok-customer-key-versions]", + "description": "Return only the specified fields for hyok-customer-key-versions resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string", - "example": "oc-xxxxxxxxxxxxxxxx" + "type": "array", + "items": { + "type": "string" + } } - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" } ], "responses": { "200": { - "description": "OK", + "description": "Success", "content": { "application/vnd.api+json": { "schema": { @@ -21005,7 +21646,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/oauth-tokens" + "$ref": "#/components/schemas/hyok-customer-key-versions" } }, "links": { @@ -21024,8 +21665,8 @@ } } }, - "404": { - "description": "Not Found", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -21037,72 +21678,55 @@ } } }, - "/oauth-tokens/{oauth_token_id}/authorized-repos": { - "get": { + "/hyok-configurations/{hyok_configuration_id}/actions/revoke": { + "x-vis": [ + "hcpt" + ], + "post": { + "operationId": "revokeHyokConfiguration", + "summary": "Revoke HYOK configuration", + "description": "Revoke an HYOK configuration, instructing HCP Terraform to migrate off of the described key.\n\nThis operation is only available in HCP Terraform.", "tags": [ - "oauth-tokens" + "hyok" ], - "summary": "List Authorized Repositories for an OAuth Token", - "description": "List all repositories that the OAuth token is authorized to access.", - "operationId": "listAuthorizedReposForOauthToken", "parameters": [ { - "name": "oauth_token_id", "in": "path", - "required": true, - "description": "The ID of the OAuth token.", - "schema": { - "type": "string", - "example": "ot-xxxxxxxxxxxxxxxx" - } - }, - { - "name": "organization", - "in": "query", - "required": false, - "description": "The VCS organization name to scope repositories to. Required for Azure DevOps providers.", + "name": "hyok_configuration_id", "schema": { "type": "string" - } - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + }, + "required": true, + "description": "HYOK Configuration ID" } ], + "requestBody": { + "required": false, + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + }, "responses": { - "200": { - "description": "OK", + "202": { + "description": "HYOK Configuration revocation initiated", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/authorized-repos" - } - }, - "meta": { - "type": "object", - "properties": { - "next-page": { - "type": "integer", - "nullable": true, - "description": "The next page number, if more pages are available." - } - } - } - } + "type": "string", + "enum": [ + "null" + ] } } } }, - "404": { - "description": "Not Found", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -21114,47 +21738,34 @@ } } }, - "/oauth-tokens/{oauth_token_id}/vcs-organizations": { - "get": { + "/hyok-configurations/{hyok_configuration_id}/actions/test": { + "x-vis": [ + "hcpt" + ], + "post": { + "operationId": "testHyokConfiguration", + "summary": "Test HYOK configuration", + "description": "Test an HYOK configuration to ensure that it is set up correctly to connect to the specified KMS.\n\nThis operation is only available in HCP Terraform.", "tags": [ - "oauth-tokens" + "hyok" ], - "summary": "List VCS Organizations for an OAuth Token", - "description": "List all VCS organizations accessible via the OAuth token. Only applicable to Azure DevOps providers.", - "operationId": "listVcsOrganizationsForOauthToken", "parameters": [ { - "name": "oauth_token_id", "in": "path", - "required": true, - "description": "The ID of the OAuth token.", + "name": "hyok_configuration_id", "schema": { - "type": "string", - "example": "ot-xxxxxxxxxxxxxxxx" - } + "type": "string" + }, + "required": true, + "description": "HYOK Configuration ID" } ], "responses": { - "200": { - "description": "OK", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/vcs-organization" - } - } - } - } - } - } + "204": { + "description": "HYOK Configuration successfully tested and verified" }, - "404": { - "description": "Not Found", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -21166,66 +21777,48 @@ } } }, - "/github-app-installations": { + "/hyok-customer-key-versions/{hyok_customer_key_version_id}": { + "x-vis": [ + "hcpt" + ], "get": { - "operationId": "listGithubAppInstallations", - "summary": "List GitHub App Installations", - "description": "List GitHub App installations available to the current user.", + "operationId": "getHyokCustomerKeyVersion", + "summary": "Get HYOK Customer Key Version details", + "description": "Get details about a HYOK Customer Key Version\n\nThis operation is only available in HCP Terraform.", "tags": [ - "github-app-installations" + "hyok" ], "parameters": [ { - "in": "query", - "name": "filter[name]", + "in": "path", + "name": "hyok_customer_key_version_id", "schema": { "type": "string" }, - "required": false, - "description": "Filter by GitHub organization or login name." + "required": true, + "description": "HYOK Customer Key Version ID" }, { "in": "query", - "name": "filter[installation_id]", + "name": "fields[hyok-customer-key-versions]", + "description": "Return only the specified fields for hyok-customer-key-versions resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": false, - "description": "Filter by GitHub installation ID." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of GitHub App installations", + "description": "HYOK Customer Key Version details", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/github-app-installations" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } + "$ref": "#/components/schemas/hyok-customer-key-versions-envelope" } } } @@ -21241,62 +21834,28 @@ } } } - } - }, - "/github-app-installations/{github_app_installation_id}/repos": { - "get": { - "operationId": "listGithubAppInstallationRepos", - "summary": "List GitHub App Installation Repositories", - "description": "List repositories accessible through a GitHub App installation.", + }, + "delete": { + "operationId": "deleteHyokCustomerKeyVersion", + "summary": "Delete HYOK Customer Key Version", + "description": "Delete a HYOK Customer Key Version. Can only be performed on unused key versions.\n\nThis operation is only available in HCP Terraform.", "tags": [ - "github-app-installations" + "hyok" ], "parameters": [ { "in": "path", - "name": "github_app_installation_id", + "name": "hyok_customer_key_version_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the GitHub App installation." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "description": "HYOK Customer Key Version ID" } ], "responses": { - "200": { - "description": "List of repositories", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/github-app-repos" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } - } - } - } + "204": { + "description": "HYOK Customer Key Version deleted" }, "default": { "description": "Error details", @@ -21311,32 +21870,49 @@ } } }, - "/github-app/installation/{github_app_installation_id}": { - "get": { - "operationId": "getGithubAppInstallation", - "summary": "Show GitHub App Installation", - "description": "Get details about a GitHub App installation.", + "/hyok-customer-key-versions/{hyok_customer_key_version_id}/actions/revoke": { + "x-vis": [ + "hcpt" + ], + "post": { + "operationId": "revokeHyokCustomerKeyVersion", + "summary": "Revoke HYOK Customer Key Version", + "description": "Revoke a HYOK Customer Key Version.\n\nThis operation is only available in HCP Terraform.", "tags": [ - "github-app-installations" + "hyok" ], "parameters": [ { "in": "path", - "name": "github_app_installation_id", + "name": "hyok_customer_key_version_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the GitHub App installation." + "description": "HYOK Customer Key Version ID" } ], + "requestBody": { + "required": false, + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "additionalProperties": false + } + } + } + }, "responses": { - "200": { - "description": "GitHub App installation details", + "202": { + "description": "HYOK Key Version revocation initiated", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/github-app-installations-envelope" + "type": "string", + "enum": [ + "null" + ] } } } @@ -21354,66 +21930,48 @@ } } }, - "/github-app/installations": { + "/hyok-encrypted-data-keys/{hyok_encrypted_data_key_id}": { + "x-vis": [ + "hcpt" + ], "get": { - "operationId": "listGithubAppInstallationsForCurrentUser", - "summary": "List GitHub App Installations for Current User", - "description": "List GitHub App installations accessible to the current authenticated user.", + "operationId": "getHyokEncryptedDataKey", + "summary": "Get HYOK Encrypted Data Key details", + "description": "Get details about a HYOK Encrypted Data Key\n\nThis operation is only available in HCP Terraform.", "tags": [ - "github-app-installations" + "hyok" ], "parameters": [ { - "in": "query", - "name": "filter[name]", + "in": "path", + "name": "hyok_encrypted_data_key_id", "schema": { "type": "string" }, - "required": false, - "description": "Filter by GitHub organization or login name." + "required": true, + "description": "HYOK Encrypted Data Key ID" }, { "in": "query", - "name": "filter[installation_id]", + "name": "fields[hyok-encrypted-data-keys]", + "description": "Return only the specified fields for hyok-encrypted-data-keys resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": false, - "description": "Filter by GitHub installation ID." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of GitHub App installations", + "description": "HYOK Encrypted Data Key details", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/github-app-installations" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } + "$ref": "#/components/schemas/hyok-encrypted-data-keys-envelope" } } } @@ -21431,57 +21989,87 @@ } } }, - "/organizations/{organization_name}/github-app-installations": { + "/oidc-configurations/{oidc_configuration_id}": { + "x-vis": [ + "hcpt" + ], "get": { - "operationId": "listOrganizationGithubAppInstallations", - "summary": "List Organization GitHub App Installations", - "description": "List GitHub App installations linked to an organization.", + "operationId": "getOidcConfiguration", + "summary": "Get OIDC Configuration details", + "description": "Get details about an OIDC configuration\n\nThis operation is only available in HCP Terraform.", "tags": [ - "github-app-installations" + "hyok" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "oidc_configuration_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization." + "description": "OIDC Configuration ID" }, { - "$ref": "#/components/parameters/page_number" + "in": "query", + "name": "fields[aws-oidc-configurations]", + "description": "Return only the specified fields for aws-oidc-configurations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } }, { - "$ref": "#/components/parameters/page_size" + "in": "query", + "name": "fields[gcp-oidc-configurations]", + "description": "Return only the specified fields for gcp-oidc-configurations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "fields[azure-oidc-configurations]", + "description": "Return only the specified fields for azure-oidc-configurations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "fields[vault-oidc-configurations]", + "description": "Return only the specified fields for vault-oidc-configurations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of GitHub App installations", + "description": "OIDC Configuration details", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/github-app-installations" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } + "$ref": "#/components/schemas/oidc-configuration-envelope" } } } @@ -21497,68 +22085,42 @@ } } } - } - }, - "/organizations/{organization_name}/github-app-installations/{github_app_installation_id}/repos": { - "get": { - "operationId": "listOrganizationGithubAppInstallationRepos", - "summary": "List Organization GitHub App Installation Repositories", - "description": "List repositories accessible through a GitHub App installation linked to an organization.", + }, + "patch": { + "operationId": "updateOidcConfiguration", + "summary": "Update OIDC Configuration", + "description": "Update an OIDC configuration\n\nThis operation is only available in HCP Terraform.", "tags": [ - "github-app-installations" + "hyok" ], "parameters": [ { "in": "path", - "name": "organization_name", - "schema": { - "type": "string" - }, - "required": true, - "description": "The name of the organization." - }, - { - "in": "path", - "name": "github_app_installation_id", + "name": "oidc_configuration_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the GitHub App installation." - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" + "description": "OIDC Configuration ID" } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/oidc-configuration-envelope" + } + } + } + }, "responses": { "200": { - "description": "List of repositories", + "description": "OIDC Configuration updated", "content": { "application/vnd.api+json": { "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/github-app-repos" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } + "$ref": "#/components/schemas/oidc-configuration-envelope" } } } @@ -21574,53 +22136,32 @@ } } } - } - }, - "/organizations/{organization_name}/github-app-installations/{github_app_installation_id}/link-account": { - "post": { - "operationId": "linkOrganizationGithubAppInstallation", - "summary": "Link GitHub App Installation to Organization", - "description": "Link a GitHub App installation to an organization.", + }, + "delete": { + "operationId": "deleteOidcConfiguration", + "summary": "Delete OIDC Configuration", + "description": "Delete an OIDC configuration\n\nThis operation is only available in HCP Terraform.", "tags": [ - "github-app-installations" + "hyok" ], "parameters": [ { "in": "path", - "name": "organization_name", - "schema": { - "type": "string" - }, - "required": true, - "description": "The name of the organization." - }, - { - "in": "path", - "name": "github_app_installation_id", + "name": "oidc_configuration_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the GitHub App installation." + "description": "OIDC Configuration ID" } ], "responses": { "204": { - "description": "No Content" + "description": "OIDC Configuration deleted" }, "default": { "description": "Error details", "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - }, "application/vnd.api+json": { "schema": { "$ref": "#/components/schemas/errors" @@ -21631,13 +22172,13 @@ } } }, - "/tasks/{id}": { + "/authentication-tokens/{id}": { "get": { - "operationId": "getTask", - "summary": "Get a Run Task", - "description": "Get details about a run task.", + "operationId": "getAuthenticationToken", + "summary": "Get authentication token details", + "description": "Get details about an authentication token", "tags": [ - "run-tasks" + "authentication-tokens" ], "parameters": [ { @@ -21647,91 +22188,35 @@ "type": "string" }, "required": true, - "description": "The ID of the run task." + "description": "ID - Can be a token ID or a team ID, depending on the token type" }, { "in": "query", - "name": "include", + "name": "fields[authentication-tokens]", + "description": "Return only the specified fields for authentication-tokens resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", "style": "form", "explode": false, "schema": { "type": "array", "items": { - "type": "string", - "enum": [ - "workspace_tasks", - "workspace_tasks.workspace" - ] - } - }, - "required": false, - "description": "Allows including related resource data.\n" - } - ], - "responses": { - "200": { - "description": "Run task details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/tasks-envelope" - } - } - } - }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } + "type": "string" } } } - } - }, - "patch": { - "operationId": "updateTask", - "summary": "Update a Run Task", - "description": "Update a run task.", - "tags": [ - "run-tasks" - ], - "parameters": [ - { - "in": "path", - "name": "id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the run task." - } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/tasks-envelope" - } - } - } - }, "responses": { "200": { - "description": "Run task updated", + "description": "Authentication Token details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/tasks-envelope" + "$ref": "#/components/schemas/authentication-tokens-envelope" } } } }, "default": { - "description": "Error details", + "description": "Error Details", "content": { "application/vnd.api+json": { "schema": { @@ -21743,11 +22228,11 @@ } }, "delete": { - "operationId": "deleteTask", - "summary": "Delete a Run Task", - "description": "Delete a run task.", + "operationId": "deleteAuthenticationToken", + "summary": "Delete authentication Token", + "description": "Delete an authentication token", "tags": [ - "run-tasks" + "authentication-tokens" ], "parameters": [ { @@ -21757,12 +22242,12 @@ "type": "string" }, "required": true, - "description": "The ID of the run task." + "description": "ID - Can be a token ID or a team ID, depending on the token type" } ], "responses": { "204": { - "description": "Run task deleted" + "description": "Authentication token deleted" }, "default": { "description": "Error details", @@ -21777,126 +22262,45 @@ } } }, - "/organizations/{organization_name}/tasks": { + "/users/{user_id}": { "get": { - "operationId": "listOrganizationTasks", - "summary": "List Run Tasks", - "description": "List all run tasks in an organization.", + "operationId": "showUser", + "summary": "Show User", + "description": "Shows details for a given user.", "tags": [ - "run-tasks" + "users" ], "parameters": [ { "in": "path", - "name": "organization_name", + "name": "user_id", "schema": { "type": "string" }, "required": true, - "description": "The name of the organization." + "description": "The ID of the desired user." }, { "in": "query", - "name": "include", + "name": "fields[users]", + "description": "Return only the specified fields for users resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", "style": "form", "explode": false, "schema": { "type": "array", "items": { - "type": "string", - "enum": [ - "workspace_tasks", - "workspace_tasks.workspace" - ] - } - }, - "required": false, - "description": "Allows including related resource data.\n" - }, - { - "$ref": "#/components/parameters/page_number" - }, - { - "$ref": "#/components/parameters/page_size" - } - ], - "responses": { - "200": { - "description": "List of run tasks", - "content": { - "application/vnd.api+json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/tasks" - } - }, - "meta": { - "type": "object", - "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" - } - } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" - } - } - } - } - } - }, - "default": { - "description": "Error details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } + "type": "string" } } } - } - }, - "post": { - "operationId": "createTask", - "summary": "Create a Run Task", - "description": "Create a run task in an organization.", - "tags": [ - "run-tasks" - ], - "parameters": [ - { - "in": "path", - "name": "organization_name", - "schema": { - "type": "string" - }, - "required": true, - "description": "The name of the organization." - } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/tasks-envelope" - } - } - } - }, "responses": { - "201": { - "description": "Run task created", + "200": { + "description": "User details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/tasks-envelope" + "$ref": "#/components/schemas/users-envelope" } } } @@ -21914,34 +22318,47 @@ } } }, - "/tasks/{id}/relationships/workspace-tasks": { + "/users/{user_id}/github-app-oauth-tokens": { "get": { - "operationId": "listTaskWorkspaceTasks", - "summary": "List Workspace Run Tasks for a Run Task", - "description": "List all workspace run tasks associated with a run task.", + "operationId": "listUserGithubAppOauthTokens", + "summary": "List User GitHub App OAuth Tokens", + "description": "List GitHub App OAuth tokens for a given user.", "tags": [ - "run-tasks" + "users" ], "parameters": [ { "in": "path", - "name": "id", + "name": "user_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the run task." + "description": "The ID of the user." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[github-app-oauth-tokens]", + "description": "Return only the specified fields for github-app-oauth-tokens resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of workspace run tasks", + "description": "GitHub App OAuth tokens", "content": { "application/vnd.api+json": { "schema": { @@ -21950,9 +22367,12 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/workspace-tasks" + "$ref": "#/components/schemas/github-app-oauth-tokens" } }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, "meta": { "type": "object", "properties": { @@ -21960,9 +22380,6 @@ "$ref": "#/components/schemas/pagination" } } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" } } } @@ -21982,34 +22399,47 @@ } } }, - "/workspaces/{workspace_id}/tasks": { + "/users/{user_id}/authentication-tokens": { "get": { - "operationId": "listWorkspaceTasks", - "summary": "List Workspace Run Tasks", - "description": "List all run tasks associated with a workspace.", + "operationId": "listUserTokens", + "summary": "List User Tokens", + "description": "List all tokens for a specified user", "tags": [ - "run-tasks" + "authentication-tokens" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "user_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace." + "description": "User ID" }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[authentication-tokens]", + "description": "Return only the specified fields for authentication-tokens resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of workspace run tasks", + "description": "Success", "content": { "application/vnd.api+json": { "schema": { @@ -22018,9 +22448,12 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/workspace-tasks" + "$ref": "#/components/schemas/authentication-tokens" } }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, "meta": { "type": "object", "properties": { @@ -22028,9 +22461,6 @@ "$ref": "#/components/schemas/pagination" } } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" } } } @@ -22050,21 +22480,21 @@ } }, "post": { - "operationId": "createWorkspaceTask", - "summary": "Associate a Run Task to a Workspace", - "description": "Associate an existing run task to a workspace.", + "operationId": "createUserToken", + "summary": "Create User Token", + "description": "Create a user token", "tags": [ - "run-tasks" + "authentication-tokens" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "user_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace." + "description": "User ID" } ], "requestBody": { @@ -22072,18 +22502,18 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspace-tasks-envelope" + "$ref": "#/components/schemas/authentication-tokens-envelope" } } } }, "responses": { "201": { - "description": "Workspace run task created", + "description": "User token created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspace-tasks-envelope" + "$ref": "#/components/schemas/authentication-tokens-envelope" } } } @@ -22101,41 +22531,70 @@ } } }, - "/workspaces/{workspace_id}/tasks/{id}": { + "/agent-pools/{agent_pool_id}/authentication-tokens": { "get": { - "operationId": "getWorkspaceTask", - "summary": "Show a Workspace Run Task", - "description": "Get details about a workspace run task.", + "operationId": "listAgentTokens", + "summary": "List Agent Tokens", + "description": "List all tokens for the specified agent pool.", "tags": [ - "run-tasks" + "authentication-tokens" ], "parameters": [ { "in": "path", - "name": "workspace_id", + "name": "agent_pool_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace." + "description": "The ID of the Agent Pool" }, { - "in": "path", - "name": "id", + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[authentication-tokens]", + "description": "Return only the specified fields for authentication-tokens resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the workspace run task." + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Workspace run task details", + "description": "Success", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspace-tasks-envelope" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/authentication-tokens" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } } } } @@ -22152,31 +22611,22 @@ } } }, - "patch": { - "operationId": "updateWorkspaceTask", - "summary": "Update a Workspace Run Task", - "description": "Update a workspace run task.", - "tags": [ - "run-tasks" + "post": { + "operationId": "createAgentToken", + "summary": "Create Agent Token", + "description": "Create an agent token", + "tags": [ + "authentication-tokens" ], "parameters": [ { "in": "path", - "name": "workspace_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the workspace." - }, - { - "in": "path", - "name": "id", + "name": "agent_pool_id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the workspace run task." + "description": "The ID of the Agent Pool" } ], "requestBody": { @@ -22184,24 +22634,24 @@ "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspace-tasks-envelope" + "$ref": "#/components/schemas/authentication-tokens-envelope" } } } }, "responses": { - "200": { - "description": "Workspace run task updated", + "201": { + "description": "Agent token created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspace-tasks-envelope" + "$ref": "#/components/schemas/authentication-tokens-envelope" } } } }, - "default": { - "description": "Error details", + "404": { + "description": "Agent Pool not found or user unauthorized to perform action", "content": { "application/vnd.api+json": { "schema": { @@ -22209,39 +22659,26 @@ } } } - } - } - }, - "delete": { - "operationId": "deleteWorkspaceTask", - "summary": "Delete a Workspace Run Task", - "description": "Delete a workspace run task, dissociating the run task from the workspace.", - "tags": [ - "run-tasks" - ], - "parameters": [ - { - "in": "path", - "name": "workspace_id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the workspace." }, - { - "in": "path", - "name": "id", - "schema": { - "type": "string" - }, - "required": true, - "description": "The ID of the workspace run task." - } - ], - "responses": { - "204": { - "description": "Workspace run task deleted" + "422": { + "description": "Malformed request body (missing attributes, wrong types, etc.)", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "500": { + "description": "Failure during Agent Token creation", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } }, "default": { "description": "Error details", @@ -22256,59 +22693,51 @@ } } }, - "/task-stages/{task_stage_id}": { + "/teams/{id}/authentication-token": { "get": { - "operationId": "getTaskStage", - "summary": "Show a Run Task Stage", - "description": "Get details about a specific run task stage.", + "operationId": "getTeamAuthenticationToken", + "summary": "Get team authentication token details", + "description": "Get details about a team's authentication token", "tags": [ - "task-stages" + "authentication-tokens" ], "parameters": [ { "in": "path", - "name": "task_stage_id", + "name": "id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the task stage to show." + "description": "Team ID" }, { "in": "query", - "name": "include", + "name": "fields[authentication-tokens]", + "description": "Return only the specified fields for authentication-tokens resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", "style": "form", "explode": false, "schema": { "type": "array", "items": { - "type": "string", - "enum": [ - "run", - "run.workspace", - "task_results", - "policy_evaluations", - "cost_estimate" - ] + "type": "string" } - }, - "required": false, - "description": "A comma-separated list of related resources to include." + } } ], "responses": { "200": { - "description": "Task stage details", + "description": "Authentication Token details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/task-stages-envelope" + "$ref": "#/components/schemas/authentication-tokens-envelope" } } } }, "default": { - "description": "Error details", + "description": "Error Details", "content": { "application/vnd.api+json": { "schema": { @@ -22318,40 +22747,48 @@ } } } - } - }, - "/task-stages/{task_stage_id}/actions/override": { + }, "post": { - "operationId": "overrideTaskStage", - "summary": "Override a Task Stage", - "description": "Override a task stage that is in the awaiting_override status, allowing the run to continue even when run tasks have failed.", + "operationId": "createTeamAuthenticationToken", + "summary": "Create (or regenerate) the legacy team authentication token", + "description": "Creates the team's legacy, descriptionless authentication token. If one already exists, it is revoked and replaced.", "tags": [ - "task-stages" + "authentication-tokens" ], "parameters": [ { "in": "path", - "name": "task_stage_id", + "name": "id", "schema": { "type": "string" }, "required": true, - "description": "The ID of the task stage to override." + "description": "Team ID" } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/authentication-tokens-envelope" + } + } + } + }, "responses": { - "200": { - "description": "Task stage successfully overridden", + "201": { + "description": "Authentication token created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/task-stages-envelope" + "$ref": "#/components/schemas/authentication-tokens-envelope" } } } }, - "409": { - "description": "The task stage is not in an overridable state or has no overridable failures.", + "default": { + "description": "Error details", "content": { "application/vnd.api+json": { "schema": { @@ -22359,6 +22796,30 @@ } } } + } + } + }, + "delete": { + "operationId": "deleteTeamAuthenticationToken", + "summary": "Delete team authentication token", + "description": "Delete a team's authentication token", + "tags": [ + "authentication-tokens" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "schema": { + "type": "string" + }, + "required": true, + "description": "Team ID" + } + ], + "responses": { + "204": { + "description": "Authentication token deleted" }, "default": { "description": "Error details", @@ -22373,23 +22834,27 @@ } } }, - "/runs/{run_id}/task-stages": { + "/organization/audit-trail": { + "x-vis": [ + "hcpt" + ], "get": { - "operationId": "listRunTaskStages", - "summary": "List the Run Task Stages in a Run", - "description": "List the run task stages associated with a run.", + "operationId": "showOrganizationAuditTrail", + "summary": "List organization audit events", + "description": "Returns a list of audit events for the organization associated with the authentication token. HCP Terraform retains 14 days of audit log information. Unlike most HCP Terraform APIs, this endpoint does not use the JSON:API specification. This endpoint requires an organization token or an audit trail token; user tokens and team tokens are not accepted.\n\nThis operation is only available in HCP Terraform.", "tags": [ - "task-stages" + "audit-trails" ], "parameters": [ { - "in": "path", - "name": "run_id", + "in": "query", + "name": "since", "schema": { - "type": "string" + "type": "string", + "format": "date-time" }, - "required": true, - "description": "The ID of the run to list task stages for." + "required": false, + "description": "Returns only audit events created after this date. Must be a UTC ISO8601 datetime string (YYYY-MM-DDTHH:MM:SS.SSSZ)." }, { "$ref": "#/components/parameters/page_number" @@ -22400,28 +22865,123 @@ ], "responses": { "200": { - "description": "List of run task stages", + "description": "Audit events list", "content": { - "application/vnd.api+json": { + "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/task-stages" + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "The ID of this audit event." + }, + "version": { + "type": "string", + "description": "The audit trail schema version." + }, + "type": { + "type": "string", + "description": "The type of audit event (defaults to \"Resource\")." + }, + "timestamp": { + "type": "string", + "format": "date-time", + "description": "UTC ISO8601 timestamp of the event." + }, + "auth": { + "type": "object", + "properties": { + "accessor_id": { + "type": "string", + "description": "The ID of the audited actor." + }, + "description": { + "type": "string", + "nullable": true, + "description": "Username of the audited actor." + }, + "type": { + "type": "string", + "nullable": true, + "description": "Authentication type. One of \"Client\", \"Impersonated\", or \"System\"." + }, + "impersonator_id": { + "type": "string", + "nullable": true, + "description": "The ID of the impersonating actor, if available." + }, + "organization_id": { + "type": "string", + "description": "The ID of the organization." + } + } + }, + "request": { + "type": "object", + "properties": { + "id": { + "type": "string", + "nullable": true, + "description": "The ID of the request, if available." + } + } + }, + "resource": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the audited resource." + }, + "type": { + "type": "string", + "description": "The type of the audited resource (e.g., \"run\")." + }, + "action": { + "type": "string", + "description": "The action that was audited (e.g., \"applied\")." + }, + "meta": { + "type": "object", + "nullable": true, + "additionalProperties": true, + "description": "Key-value metadata about the audited event. Defaults to null." + } + } + } + } } }, - "meta": { + "pagination": { "type": "object", "properties": { - "pagination": { - "$ref": "#/components/schemas/pagination" + "current_page": { + "type": "integer" + }, + "page_size": { + "type": "integer" + }, + "prev_page": { + "type": "integer", + "nullable": true + }, + "next_page": { + "type": "integer", + "nullable": true + }, + "total_pages": { + "type": "integer" + }, + "total_count": { + "type": "integer" } } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" } } } @@ -22429,7 +22989,7 @@ } }, "default": { - "description": "Error details", + "description": "Unauthorized or forbidden", "content": { "application/vnd.api+json": { "schema": { @@ -22441,38 +23001,66 @@ } } }, - "/task-results/{task_result_id}": { + "/organizations/{organization_name}/authentication-token": { "get": { - "operationId": "getTaskResult", - "summary": "Show a Run Task Result", - "description": "Get details about a specific run task result.", + "operationId": "getOrganizationToken", + "summary": "Get organization token details", + "description": "Get details about an organization token", "tags": [ - "task-stages" + "authentication-tokens" ], "parameters": [ { "in": "path", - "name": "task_result_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the task result to show." + "description": "Organization name" + }, + { + "in": "query", + "name": "token", + "schema": { + "type": "string", + "enum": [ + "audit-trails" + ] + }, + "required": false, + "description": "The type of organization token to retrieve. Omit for the default organization token.", + "x-vis": [ + "hcpt" + ] + }, + { + "in": "query", + "name": "fields[authentication-tokens]", + "description": "Return only the specified fields for authentication-tokens resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Task result details", + "description": "Organization Token details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/task-results-envelope" + "$ref": "#/components/schemas/authentication-tokens-envelope" } } } }, "default": { - "description": "Error details", + "description": "Error Details", "content": { "application/vnd.api+json": { "schema": { @@ -22482,45 +23070,57 @@ } } } - } - }, - "/task-results/{task_result_id}/body": { - "get": { - "operationId": "getTaskResultBody", - "summary": "Download Task Result Body", - "description": "Download the body content of a native task result. This endpoint redirects to a \npre-signed URL for downloading the task result data stored in object storage.\n", + }, + "post": { + "operationId": "createOrganizationToken", + "summary": "Create Organization Token", + "description": "Create an organization token", "tags": [ - "task-stages" + "authentication-tokens" ], "parameters": [ { "in": "path", - "name": "task_result_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the task result." + "description": "Organization name" + }, + { + "in": "query", + "name": "token", + "schema": { + "type": "string", + "enum": [ + "audit-trails" + ] + }, + "required": false, + "description": "The type of organization token to create. Omit for the default organization token.", + "x-vis": [ + "hcpt" + ] } ], - "responses": { - "200": { - "description": "File containing the task result body.", - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/authentication-tokens-envelope" } } - }, - "404": { - "description": "Task result not found or has no body content", + } + }, + "responses": { + "201": { + "description": "Organization token created", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/errors" + "$ref": "#/components/schemas/authentication-tokens-envelope" } } } @@ -22536,76 +23136,43 @@ } } } - } - }, - "/task-results/{task_result_id}/callback": { - "patch": { - "operationId": "callbackTaskResult", - "summary": "Update a Run Task Result", - "description": "Update a run task result with status, message, and optional outcome data. This endpoint is used by run task integrations to report execution results back to HCP Terraform. Requires a url_code query parameter for authentication.", + }, + "delete": { + "operationId": "deleteOrganizationToken", + "summary": "Delete organization Token", + "description": "Delete an organization token", "tags": [ - "task-stages" + "authentication-tokens" ], "parameters": [ { "in": "path", - "name": "task_result_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the task result to update." + "description": "Organization name" }, { "in": "query", - "name": "url_code", + "name": "token", "schema": { - "type": "string" + "type": "string", + "enum": [ + "audit-trails" + ] }, "required": false, - "description": "The callback authentication token issued to the run task integration. Required for run task integrations; not required for token-authenticated requests." + "description": "The type of organization token to delete. Omit for the default organization token.", + "x-vis": [ + "hcpt" + ] } ], - "requestBody": { - "required": true, - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/task-results-envelope" - } - } - } - }, "responses": { - "200": { - "description": "Task result updated successfully", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/task-results-envelope" - } - } - } - }, - "409": { - "description": "The task result is in a terminal state and cannot be updated.", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } - }, - "422": { - "description": "Invalid attributes provided.", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/errors" - } - } - } + "204": { + "description": "Organization token deleted" }, "default": { "description": "Error details", @@ -22620,34 +23187,65 @@ } } }, - "/task-results/{task_result_id}/outcomes": { + "/organizations/{organization_name}/team-tokens": { "get": { - "operationId": "listTaskResultOutcomes", - "summary": "List the Outcomes for a Run Task Result", - "description": "List the run task result outcomes associated with a run task result.", + "operationId": "listTeamTokensForAnOrganization", + "summary": "List Team Tokens for an Organization", + "description": "List all tokens for a specified organization", "tags": [ - "task-stages" + "authentication-tokens" ], "parameters": [ { "in": "path", - "name": "task_result_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the task result to list outcomes for." + "description": "Organization Name" + }, + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + }, + "required": false, + "description": "Search team tokens by team name." + }, + { + "in": "query", + "name": "filter[expiry_status]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Filter by token expiry status. Accepts a comma-separated list of any of: `active`, `expiring_in_7_days`, `expiring_in_30_days`, `expired`, `no_expiration`. Multiple values are combined with OR." }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" - } + }, + { + "in": "query", + "name": "fields[authentication-tokens]", + "description": "Return only the specified fields for authentication-tokens resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } ], "responses": { "200": { - "description": "List of run task result outcomes", + "description": "Success", "content": { "application/vnd.api+json": { "schema": { @@ -22656,9 +23254,12 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/task-result-outcomes" + "$ref": "#/components/schemas/authentication-tokens" } }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, "meta": { "type": "object", "properties": { @@ -22666,9 +23267,6 @@ "$ref": "#/components/schemas/pagination" } } - }, - "links": { - "$ref": "#/components/schemas/self-with-pagination" } } } @@ -22686,37 +23284,59 @@ } } } - } - }, - "/task-result-outcomes/{task_result_outcome_id}": { - "get": { - "operationId": "getTaskResultOutcome", - "summary": "Show a Run Task Result Outcome", - "description": "Get details about a specific run task result outcome.", + }, + "delete": { + "operationId": "deleteTeamTokensForAnOrganization", + "summary": "Bulk-Delete Team Tokens for an Organization", + "description": "Bulk-delete team tokens for an organization.", "tags": [ - "task-stages" + "authentication-tokens" ], "parameters": [ { "in": "path", - "name": "task_result_outcome_id", + "name": "organization_name", "schema": { "type": "string" }, "required": true, - "description": "The ID of the task result outcome to show." + "description": "Organization Name" } ], - "responses": { - "200": { - "description": "Task result outcome details", - "content": { - "application/vnd.api+json": { - "schema": { - "$ref": "#/components/schemas/task-result-outcomes-envelope" + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "authentication-tokens" + ] + }, + "id": { + "type": "string", + "description": "External ID of the team token to delete.", + "example": "at-abc123def456" + } + } + } + } } } } + } + }, + "responses": { + "204": { + "description": "Tokens deleted" }, "default": { "description": "Error details", @@ -22731,34 +23351,95 @@ } } }, - "/workspace-transfers": { + "/organizations/{organization_name}/teams": { "get": { - "operationId": "listWorkspaceTransfers", - "summary": "List Workspace Transfers", - "description": "List all workspace transfers you have access to.", + "operationId": "listTeams", + "summary": "List Teams", + "description": "List teams in an organization. Any member of an organization can view visible teams and any secret teams they are a member of.", "tags": [ - "workspace-transfers" + "teams" ], "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "Name of the organization" + }, + { + "in": "query", + "name": "q", + "schema": { + "type": "string" + }, + "required": false, + "description": "A search query string. Teams are searchable by name (case-insensitive)." + }, + { + "in": "query", + "name": "filter[names]", + "schema": { + "type": "string" + }, + "required": false, + "description": "If specified, restricts results to a team with a matching name. If multiple comma separated values are specified, teams matching any of the names are returned." + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "users", + "organization-memberships" + ] + } + }, + "required": false, + "description": "Optionally side-load relationships. Can include \"users\" or \"organization-memberships\"." + }, { "$ref": "#/components/parameters/page_number" }, { "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[teams]", + "description": "Return only the specified fields for teams resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "List of workspace transfers", + "description": "Teams list", "content": { "application/vnd.api+json": { "schema": { "type": "object", + "required": [ + "data" + ], "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/workspace-transfers" + "$ref": "#/components/schemas/teams" } }, "meta": { @@ -22768,12 +23449,55 @@ "$ref": "#/components/schemas/pagination" } } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "included": { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/users" + }, + { + "$ref": "#/components/schemas/organization-memberships" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "users": "#/components/schemas/users", + "organization-memberships": "#/components/schemas/organization-memberships" + } + } + } } } } } } }, + "400": { + "description": "Invalid include parameter", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "404": { + "description": "Organization not found, or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, "default": { "description": "Error details", "content": { @@ -22787,35 +23511,66 @@ } }, "post": { - "operationId": "createWorkspaceTransfer", - "summary": "Create a Workspace Transfer", - "description": "Queue a new workspace transfer across organizations.", + "operationId": "createTeam", + "summary": "Create Team", + "description": "Create a team in an organization.", "tags": [ - "workspace-transfers" + "teams" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "Name of the organization" + } ], "requestBody": { "required": true, "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspace-transfers-envelope" + "$ref": "#/components/schemas/teams-envelope" } } } }, "responses": { - "201": { - "description": "Workspace transfer created", + "200": { + "description": "Team created successfully", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspace-transfers-envelope" + "$ref": "#/components/schemas/teams-envelope" + } + } + } + }, + "400": { + "description": "Invalid include parameter", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "404": { + "description": "Organization not found, or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } }, "422": { - "description": "Validation error", + "description": "Malformed request body (missing attributes, wrong types, etc.)", "content": { "application/vnd.api+json": { "schema": { @@ -22837,23 +23592,23 @@ } } }, - "/workspace-transfers/{workspace_transfer_id}": { + "/teams/{team_id}": { "get": { - "operationId": "getWorkspaceTransfer", - "summary": "Get Workspace Transfer details", - "description": "Get details about a workspace transfer.", + "operationId": "getTeam", + "summary": "Show Team Information", + "description": "Get details about a team.", "tags": [ - "workspace-transfers" + "teams" ], "parameters": [ { "in": "path", - "name": "workspace_transfer_id", + "name": "team_id", "schema": { "type": "string" }, "required": true, - "description": "Workspace Transfer ID" + "description": "Team ID" }, { "in": "query", @@ -22865,27 +23620,80 @@ "items": { "type": "string", "enum": [ - "events" + "users", + "organization-memberships" ] } }, "required": false, - "description": "Allows including related resource data." + "description": "Optionally side-load relationships. Can include \"users\" or \"organization-memberships\"." + }, + { + "in": "query", + "name": "fields[teams]", + "description": "Return only the specified fields for teams resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } } ], "responses": { "200": { - "description": "Workspace transfer details", + "description": "Team details", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspace-transfers-envelope" + "allOf": [ + { + "$ref": "#/components/schemas/teams-envelope" + }, + { + "type": "object", + "properties": { + "included": { + "type": "array", + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/users" + }, + { + "$ref": "#/components/schemas/organization-memberships" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "users": "#/components/schemas/users", + "organization-memberships": "#/components/schemas/organization-memberships" + } + } + } + } + } + } + ] + } + } + } + }, + "400": { + "description": "Invalid include parameter", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" } } } }, "404": { - "description": "Workspace transfer not found", + "description": "Team not found, or user unauthorized to perform action", "content": { "application/vnd.api+json": { "schema": { @@ -22905,40 +23713,112 @@ } } } - } - }, - "/workspace-transfers/{workspace_transfer_id}/actions/resume": { - "post": { - "operationId": "resumeWorkspaceTransfer", - "summary": "Resume a Workspace Transfer", - "description": "Resume a paused workspace transfer. A transfer pauses automatically:\n- After data migration completes, awaiting approval before source workspace deletion (`awaiting_approval`)\n- If source workspace deletion times out (`source_workspace_deletion_stuck`)\nOnce resumed, the transfer proceeds with the remaining operations.\n", + }, + "patch": { + "operationId": "updateTeam", + "summary": "Update Team", + "description": "Update a team's attributes.", "tags": [ - "workspace-transfers" + "teams" ], "parameters": [ { "in": "path", - "name": "workspace_transfer_id", + "name": "team_id", "schema": { "type": "string" }, "required": true, - "description": "Workspace Transfer ID" + "description": "Team ID" } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/teams-envelope" + } + } + } + }, "responses": { "200": { - "description": "Workspace transfer resumed", + "description": "Team updated successfully", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspace-transfers-envelope" + "$ref": "#/components/schemas/teams-envelope" } } } }, - "409": { - "description": "Transfer is not paused", + "400": { + "description": "Invalid include parameter", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "404": { + "description": "Team not found, or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Malformed request body (missing attributes, wrong types, etc.)", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "delete": { + "operationId": "deleteTeam", + "summary": "Delete Team", + "description": "Delete a team. Only organization owners can delete teams.", + "tags": [ + "teams" + ], + "parameters": [ + { + "in": "path", + "name": "team_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "Team ID" + } + ], + "responses": { + "204": { + "description": "Team deleted successfully" + }, + "404": { + "description": "Team not found, or user unauthorized to perform action", "content": { "application/vnd.api+json": { "schema": { @@ -22960,38 +23840,61 @@ } } }, - "/workspace-transfers/{workspace_transfer_id}/actions/cancel": { + "/teams/{team_id}/relationships/users": { "post": { - "operationId": "cancelWorkspaceTransfer", - "summary": "Cancel a Workspace Transfer", - "description": "Cancel a workspace transfer before the source workspace deletion begins.\nOnce the `remove_source_workspace` operation starts, the transfer cannot be canceled.\nCanceling leaves the source workspace intact but locked. You cannot resume a canceled transfer.\n", + "operationId": "addTeamMembersByUsername", + "summary": "Add Users to Team (by username)", + "description": "Add multiple users to a team using their usernames. Both users and teams must already exist.", "tags": [ - "workspace-transfers" + "teams" ], "parameters": [ { "in": "path", - "name": "workspace_transfer_id", + "name": "team_id", "schema": { "type": "string" }, "required": true, - "description": "Workspace Transfer ID" + "description": "The ID of the team." } ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/users-identifier-array-document" + } + } + } + }, "responses": { - "200": { - "description": "Workspace transfer canceled", + "204": { + "description": "Users successfully added to team." + }, + "400": { + "description": "Invalid request (blank ID, wrong type, user does not exist, user is already a member, user is not in the organization).", "content": { "application/vnd.api+json": { "schema": { - "$ref": "#/components/schemas/workspace-transfers-envelope" + "$ref": "#/components/schemas/errors" } } } }, - "409": { - "description": "Transfer cannot be canceled (already started source workspace deletion, completed, or already canceled)", + "403": { + "description": "Forbidden. The organization is managed by HCP.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "404": { + "description": "Team not found, or user unauthorized to perform action.", "content": { "application/vnd.api+json": { "schema": { @@ -23011,156 +23914,8482 @@ } } } - } - } - }, - "components": { - "securitySchemes": { - "bearerAuth": { - "type": "http", - "scheme": "bearer" - } - }, - "schemas": { - "admin-banners": { - "type": "object", - "required": [ - "type", - "attributes" + }, + "delete": { + "operationId": "removeTeamMembersByUsername", + "summary": "Remove Users from Team (by username)", + "description": "Remove multiple users from a team using their usernames. This only removes users from this team; it does not delete the users from the organization.", + "tags": [ + "teams" ], - "properties": { - "id": { - "type": "string", - "readOnly": true, - "description": "The external ID of the banner (e.g. ab-xxxxxxxxxxxxxxxx)." - }, - "type": { - "type": "string", - "enum": [ - "admin-banners" - ] - }, - "attributes": { - "type": "object", - "required": [ - "title", - "body", - "style", - "audience" - ], - "properties": { - "title": { - "type": "string", - "maxLength": 100, + "parameters": [ + { + "in": "path", + "name": "team_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the team." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/users-identifier-array-document" + } + } + } + }, + "responses": { + "204": { + "description": "Users successfully removed from team." + }, + "400": { + "description": "Invalid request (blank ID, wrong type, user is not a member).", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "403": { + "description": "Forbidden. The organization is managed by HCP, or attempting to remove the last owner of the owners team.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "404": { + "description": "Team not found, or user unauthorized to perform action.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/teams/{team_id}/relationships/organization-memberships": { + "get": { + "operationId": "listTeamOrganizationMemberships", + "summary": "List Team Organization Memberships", + "description": "List all organization memberships for a team. Returns both active members and invited users.", + "tags": [ + "teams" + ], + "parameters": [ + { + "in": "path", + "name": "team_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the team." + }, + { + "in": "query", + "name": "filter[status]", + "schema": { + "type": "string", + "enum": [ + "active", + "invited", + "inactive" + ] + }, + "required": false, + "description": "Filter memberships by status." + }, + { + "in": "query", + "name": "filter[is_service_account]", + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ] + }, + "required": false, + "description": "Filter to include only service account members." + }, + { + "in": "query", + "name": "sort", + "schema": { + "type": "string", + "enum": [ + "status", + "-status" + ] + }, + "required": false, + "description": "Sort memberships. Prefix with '-' for descending order (e.g. '-status')." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[organization-memberships]", + "description": "Return only the specified fields for organization-memberships resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of organization memberships for the team.", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/organization-memberships" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "400": { + "description": "Invalid filter or sort parameter.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "404": { + "description": "Team not found, or user unauthorized to perform action.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "post": { + "operationId": "addTeamMembersByOrgMembership", + "summary": "Add Users to Team (by organization membership ID)", + "description": "Add multiple users to a team using their organization membership IDs. Unlike the username method, users only need a pending invitation to the organization.", + "tags": [ + "teams" + ], + "parameters": [ + { + "in": "path", + "name": "team_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the team." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organization-memberships-identifier-array-document" + } + } + } + }, + "responses": { + "204": { + "description": "Users successfully added to team." + }, + "400": { + "description": "Invalid request (blank ID, wrong type, membership does not exist, user is already a member, user is not in the organization).", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "403": { + "description": "Forbidden. The organization is managed by HCP.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "404": { + "description": "Team not found, or user unauthorized to perform action.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "delete": { + "operationId": "removeTeamMembersByOrgMembership", + "summary": "Remove Users from Team (by organization membership ID)", + "description": "Remove multiple users from a team using their organization membership IDs. This only removes users from this team; it does not delete the users from the organization.", + "tags": [ + "teams" + ], + "parameters": [ + { + "in": "path", + "name": "team_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the team." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/organization-memberships-identifier-array-document" + } + } + } + }, + "responses": { + "204": { + "description": "Users successfully removed from team." + }, + "400": { + "description": "Invalid request (blank ID, wrong type, membership does not exist, user is not a member).", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "403": { + "description": "Forbidden. The organization is managed by HCP, or attempting to remove the last active owner of the owners team.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "404": { + "description": "Team not found, or user unauthorized to perform action.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/team-projects": { + "get": { + "operationId": "listTeamProjects", + "summary": "List Team Access to a Project", + "description": "List all team access grants for a project.", + "tags": [ + "team-projects" + ], + "parameters": [ + { + "in": "query", + "name": "filter[project][id]", + "schema": { + "type": "string" + }, + "required": true, + "description": "The project ID to list team access for." + }, + { + "in": "query", + "name": "filter[team][id]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Optionally filter by team ID." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[team-projects]", + "description": "Return only the specified fields for team-projects resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of team-project access grants", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/team-projects" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "404": { + "description": "Project not found or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "post": { + "operationId": "addProjectTeamAccess", + "summary": "Add Team Access to a Project", + "description": "Add a team's access to a project.", + "tags": [ + "team-projects" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/team-projects-envelope" + } + } + } + }, + "responses": { + "201": { + "description": "Team access created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/team-projects-envelope" + } + } + } + }, + "404": { + "description": "Project or team not found or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Malformed request body (missing attributes, wrong types, etc.)", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/team-projects/{team_project_id}": { + "get": { + "operationId": "showProjectTeamAccess", + "summary": "Show a Team Access Relationship", + "description": "Get details about a team's access to a project.", + "tags": [ + "team-projects" + ], + "parameters": [ + { + "in": "path", + "name": "team_project_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the team/project relationship." + }, + { + "in": "query", + "name": "fields[team-projects]", + "description": "Return only the specified fields for team-projects resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Team-project access details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/team-projects-envelope" + } + } + } + }, + "404": { + "description": "Team access not found or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "patch": { + "operationId": "updateProjectTeamAccess", + "summary": "Update Team Access to a Project", + "description": "Update a team's access level on a project.", + "tags": [ + "team-projects" + ], + "parameters": [ + { + "in": "path", + "name": "team_project_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the team/project relationship." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/team-projects-envelope" + } + } + } + }, + "responses": { + "200": { + "description": "Team access updated successfully", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/team-projects-envelope" + } + } + } + }, + "404": { + "description": "Team access not found or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Malformed request body (missing attributes, wrong types, etc.)", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "delete": { + "operationId": "removeProjectTeamAccess", + "summary": "Remove Team Access from a Project", + "description": "Remove a team's access from a project.", + "tags": [ + "team-projects" + ], + "parameters": [ + { + "in": "path", + "name": "team_project_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the team/project relationship." + } + ], + "responses": { + "204": { + "description": "Team access removed successfully" + }, + "404": { + "description": "Team access not found or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/team-workspaces": { + "get": { + "operationId": "listTeamWorkspaces", + "summary": "List Team Access to a Workspace", + "description": "List all team access relationships. Optionally filter by workspace or team ID.", + "tags": [ + "team-access" + ], + "parameters": [ + { + "in": "query", + "name": "filter[workspace][id]", + "schema": { + "type": "string" + }, + "required": false, + "description": "The workspace ID to list team access for." + }, + { + "in": "query", + "name": "filter[team][id]", + "schema": { + "type": "string" + }, + "required": false, + "description": "The team ID to list workspace access for." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[team-workspaces]", + "description": "Return only the specified fields for team-workspaces resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of team access relationships", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/team-workspaces" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "404": { + "description": "Workspace not found or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "post": { + "operationId": "addTeamAccess", + "summary": "Add Team Access to a Workspace", + "description": "Add a team's access to a workspace.", + "tags": [ + "team-access" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/team-workspaces-envelope" + } + } + } + }, + "responses": { + "201": { + "description": "Team access relationship created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/team-workspaces-envelope" + } + } + } + }, + "404": { + "description": "Workspace or Team not found or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Malformed request body (missing attributes, wrong types, etc.)", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/team-workspaces/{team_workspace_id}": { + "get": { + "operationId": "showTeamAccess", + "summary": "Show a Team Access Relationship", + "description": "Get details about a team's access to a workspace.", + "tags": [ + "team-access" + ], + "parameters": [ + { + "in": "path", + "name": "team_workspace_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The team/workspace relationship ID." + }, + { + "in": "query", + "name": "fields[team-workspaces]", + "description": "Return only the specified fields for team-workspaces resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Team access relationship details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/team-workspaces-envelope" + } + } + } + }, + "404": { + "description": "Team access not found or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "patch": { + "operationId": "updateTeamAccess", + "summary": "Update Team Access to a Workspace", + "description": "Update a team's access to a workspace.", + "tags": [ + "team-access" + ], + "parameters": [ + { + "in": "path", + "name": "team_workspace_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The team/workspace relationship ID." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/team-workspaces-envelope" + } + } + } + }, + "responses": { + "200": { + "description": "Team access relationship updated", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/team-workspaces-envelope" + } + } + } + }, + "404": { + "description": "Team access not found or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Malformed request body (missing attributes, wrong types, etc.)", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "delete": { + "operationId": "removeTeamAccess", + "summary": "Remove Team Access to a Workspace", + "description": "Remove a team's access to a workspace.", + "tags": [ + "team-access" + ], + "parameters": [ + { + "in": "path", + "name": "team_workspace_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The team/workspace relationship ID." + } + ], + "responses": { + "204": { + "description": "Team access relationship deleted" + }, + "404": { + "description": "Team access not found or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/tasks/integrations": { + "get": { + "operationId": "listTaskIntegrations", + "tags": [ + "tasks" + ], + "summary": "List Integrations", + "description": "List all available integrations that can be used with tasks. \nBy default, only active integrations are returned.\n", + "parameters": [ + { + "name": "search", + "in": "query", + "required": false, + "description": "Search integrations by name (case-insensitive, partial match).", + "schema": { + "type": "string", + "example": "cloud" + } + }, + { + "name": "category", + "in": "query", + "required": false, + "description": "Filter integrations by category.", + "schema": { + "type": "string", + "example": "cost-estimation" + } + }, + { + "name": "include_inactive", + "in": "query", + "required": false, + "description": "Include inactive integrations in the results.", + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ], + "default": "false" + } + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[integrations]", + "description": "Return only the specified fields for integrations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/integrations" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Unprocessable Content", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/workspaces/{workspace_id}/configuration-versions": { + "get": { + "operationId": "listConfigurationVersions", + "summary": "List Configuration Versions", + "description": "List configuration versions for a workspace.", + "tags": [ + "configuration-versions" + ], + "parameters": [ + { + "in": "path", + "name": "workspace_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the workspace." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[configuration-versions]", + "description": "Return only the specified fields for configuration-versions resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of configuration versions", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/configuration-versions" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "post": { + "operationId": "createConfigurationVersion", + "summary": "Create Configuration Version", + "description": "Create a new configuration version in a workspace.", + "tags": [ + "configuration-versions" + ], + "parameters": [ + { + "in": "path", + "name": "workspace_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the workspace." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/configuration-versions-envelope" + } + } + } + }, + "responses": { + "201": { + "description": "Configuration version created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/configuration-versions-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/configuration-versions/{configuration_version_id}": { + "get": { + "operationId": "getConfigurationVersion", + "summary": "Get Configuration Version", + "description": "Get details of a specific configuration version.", + "tags": [ + "configuration-versions" + ], + "parameters": [ + { + "in": "path", + "name": "configuration_version_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the configuration version." + }, + { + "in": "query", + "name": "fields[configuration-versions]", + "description": "Return only the specified fields for configuration-versions resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Configuration version details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/configuration-versions-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/configuration-versions/{configuration_version_id}/ingress-attributes": { + "get": { + "operationId": "getIngressAttributes", + "summary": "Get Ingress Attributes", + "description": "Get commit information for a configuration version.", + "tags": [ + "configuration-versions" + ], + "parameters": [ + { + "in": "path", + "name": "configuration_version_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the configuration version." + }, + { + "in": "query", + "name": "fields[ingress-attributes]", + "description": "Return only the specified fields for ingress-attributes resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Ingress attributes details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/ingress-attributes-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/configuration-versions/{configuration_version_id}/actions/archive": { + "post": { + "operationId": "archiveConfigurationVersion", + "summary": "Archive Configuration Version", + "description": "Archive the uploaded files for a configuration version.", + "tags": [ + "configuration-versions" + ], + "parameters": [ + { + "in": "path", + "name": "configuration_version_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the configuration version." + } + ], + "responses": { + "202": { + "description": "Archive process initiated", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "string", + "enum": [ + "null" + ] + } + } + } + }, + "409": { + "description": "Configuration version was in a non-archivable state or the configuration version was created with VCS and cannot be archived through the API.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/configuration-versions/{configuration_version_id}/actions/soft_delete_backing_data": { + "x-vis": [ + "tfe" + ], + "post": { + "operationId": "softDeleteConfigurationVersion", + "summary": "Soft Delete Configuration Version", + "description": "Mark a configuration version for garbage collection.\n\nThis operation is only available in Terraform Enterprise.", + "tags": [ + "configuration-versions" + ], + "parameters": [ + { + "in": "path", + "name": "configuration_version_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the configuration version." + } + ], + "responses": { + "200": { + "description": "Configuration version marked for garbage collection" + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/configuration-versions/{configuration_version_id}/actions/restore_backing_data": { + "x-vis": [ + "tfe" + ], + "post": { + "operationId": "restoreConfigurationVersion", + "summary": "Restore Configuration Version", + "description": "Restore a configuration version marked for garbage collection.\n\nThis operation is only available in Terraform Enterprise.", + "tags": [ + "configuration-versions" + ], + "parameters": [ + { + "in": "path", + "name": "configuration_version_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the configuration version." + } + ], + "responses": { + "200": { + "description": "Configuration version restored" + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/configuration-versions/{configuration_version_id}/actions/permanently_delete_backing_data": { + "x-vis": [ + "tfe" + ], + "post": { + "operationId": "permanentlyDeleteConfigurationVersion", + "summary": "Permanently Delete Configuration Version", + "description": "Permanently delete the backing files for a configuration version.\n\nThis operation is only available in Terraform Enterprise.", + "tags": [ + "configuration-versions" + ], + "parameters": [ + { + "in": "path", + "name": "configuration_version_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the configuration version." + } + ], + "responses": { + "200": { + "description": "Configuration version permanently deleted" + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/configuration-versions/{configuration_version_id}/download": { + "get": { + "operationId": "downloadConfigurationVersion", + "summary": "Download Configuration Version", + "description": "Generate a temporary URL to download the configuration version files.", + "tags": [ + "configuration-versions" + ], + "parameters": [ + { + "in": "path", + "name": "configuration_version_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the configuration version." + } + ], + "responses": { + "200": { + "description": ".tar.gz file containing the configuration version.", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/organizations/{organization_name}/vcs-events": { + "get": { + "operationId": "listOrganizationVcsEvents", + "summary": "List VCS Events", + "description": "List VCS events for an organization.", + "tags": [ + "vcs-events" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the organization to list VCS events from." + }, + { + "in": "query", + "name": "filter[from]", + "schema": { + "type": "string", + "format": "date-time" + }, + "required": false, + "description": "RFC3339 formatted UTC timestamp. If omitted, defaults to 10 days ago." + }, + { + "in": "query", + "name": "filter[to]", + "schema": { + "type": "string", + "format": "date-time" + }, + "required": false, + "description": "RFC3339 formatted UTC timestamp. If omitted, defaults to now." + }, + { + "in": "query", + "name": "filter[oauth_client_external_ids]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Comma-separated list of OAuth client external IDs to filter by." + }, + { + "in": "query", + "name": "filter[levels]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Comma-separated list of event levels to filter by. Accepted values are \"info\" and \"error\"." + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "oauth_client" + ] + } + }, + "required": false, + "description": "Allows including related resource data." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[vcs-events]", + "description": "Return only the specified fields for vcs-events resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of VCS events", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/vcs-events" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/organizations/{organization_name}/vcs/tree": { + "get": { + "operationId": "getVcsTree", + "summary": "List directories in a repository", + "description": "This endpoint returns a list of directories in a repository \nat the root or at a specific reference (branch, tag, or commit SHA).\nNote: This endpoint only returns directories, not files.\n", + "tags": [ + "vcs" + ], + "parameters": [ + { + "name": "organization_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The name of the organization" + }, + { + "name": "oauth_token_id", + "in": "query", + "required": true, + "schema": { + "type": "string" + }, + "description": "The OAuth token ID to authenticate with the VCS provider" + }, + { + "name": "identifier", + "in": "query", + "required": true, + "schema": { + "type": "string" + }, + "description": "The repository identifier (e.g., \"owner/repo\")" + }, + { + "name": "branch", + "in": "query", + "required": false, + "schema": { + "type": "string" + }, + "description": "The branch, tag, or commit SHA to list directories for. \nIf not provided, the default branch will be used.\n" + }, + { + "name": "githubAppInstallationId", + "in": "query", + "required": false, + "schema": { + "type": "string" + }, + "description": "The GitHub App installation ID (only needed when using GitHub App authentication)" + }, + { + "in": "query", + "name": "fields[vcs-tree]", + "description": "Return only the specified fields for vcs-tree resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Successfully retrieved repository directories", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the directory" + }, + "type": { + "type": "string", + "enum": [ + "vcs-tree" + ] + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Repository not found or user doesn't have access" + }, + "422": { + "description": "VCS provider error", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/organizations/{organization_name}/vcs/repo": { + "get": { + "operationId": "checkVcsRepository", + "summary": "Check if a repository exists", + "description": "This endpoint checks if a repository exists and is accessible to the user.\n", + "tags": [ + "vcs" + ], + "parameters": [ + { + "name": "organization_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The name of the organization" + }, + { + "name": "oauth_token_id", + "in": "query", + "required": true, + "schema": { + "type": "string" + }, + "description": "The OAuth token ID to authenticate with the VCS provider" + }, + { + "name": "identifier", + "in": "query", + "required": true, + "schema": { + "type": "string" + }, + "description": "The repository identifier (e.g., \"owner/repo\")" + }, + { + "in": "query", + "name": "fields[vcs-repo-check]", + "description": "Return only the specified fields for vcs-repo-check resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Successfully checked repository existence", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/vcs-repo-check-envelope" + } + } + } + }, + "404": { + "description": "OAuth token not found or user doesn't have access" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/organizations/{organization_name}/registry-modules/validation": { + "get": { + "operationId": "validateRegistryModuleNames", + "summary": "Check if a module name and provider combination is available", + "description": "This endpoint checks if a module name and provider combination is available for use within an organization.\nIt returns a validation result indicating whether the name is already in use.\n", + "tags": [ + "registry" + ], + "parameters": [ + { + "name": "organization_name", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The name of the organization" + }, + { + "name": "name", + "in": "query", + "required": true, + "schema": { + "type": "string" + }, + "description": "The name of the module to validate" + }, + { + "name": "provider", + "in": "query", + "required": true, + "schema": { + "type": "string" + }, + "description": "The provider of the module to validate" + }, + { + "in": "query", + "name": "fields[registry-module-address-validations]", + "description": "Return only the specified fields for registry-module-address-validations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Successfully validated the module name and provider", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/registry-module-address-validations-envelope" + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "404": { + "description": "Organization not found", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Validation error", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/organizations/{organization_name}/registry-modules/{registry_name}/{namespace}/{name}/{provider}": { + "get": { + "operationId": "getRegistryModule", + "summary": "Show a registry module", + "description": "Returns details for a registry module, including its status, publishing\nmechanism, version statuses, and VCS settings when available to the\nrequesting organization.\n", + "tags": [ + "registry" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the organization requesting the module." + }, + { + "in": "path", + "name": "registry_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The registry the module belongs to (e.g. \"private\" or \"public\")." + }, + { + "in": "path", + "name": "namespace", + "schema": { + "type": "string" + }, + "required": true, + "description": "The namespace of the module." + }, + { + "in": "path", + "name": "name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the module." + }, + { + "in": "path", + "name": "provider", + "schema": { + "type": "string" + }, + "required": true, + "description": "The provider of the module." + }, + { + "in": "query", + "name": "fields[registry-modules]", + "description": "Return only the specified fields for registry-modules resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "The registry module was found.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/registry-modules-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "patch": { + "operationId": "updateRegistryModule", + "summary": "Update a registry module", + "description": "When updating a VCS-backed private registry module, you can change the publishing\nmechanism (branch, tags, or tag prefix) and the VCS connection itself.\nChanging the connection re-validates the new VCS source and re-ingests the\nmodule.\n", + "tags": [ + "registry" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the organization that owns the module." + }, + { + "in": "path", + "name": "registry_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The registry the module belongs to (e.g. \"private\")." + }, + { + "in": "path", + "name": "namespace", + "schema": { + "type": "string" + }, + "required": true, + "description": "The namespace of the module." + }, + { + "in": "path", + "name": "name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the module." + }, + { + "in": "path", + "name": "provider", + "schema": { + "type": "string" + }, + "required": true, + "description": "The provider of the module." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/registry-modules-envelope" + } + } + } + }, + "responses": { + "200": { + "description": "The registry module was updated.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/registry-modules-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/organizations/{organization_name}/tests/registry-modules/{registry_name}/{namespace}/{name}/{provider}/test-runs/{test_run_id}/cleanups/{id}": { + "get": { + "operationId": "getTestRunCleanup", + "summary": "Get a Test Run Cleanup", + "description": "Get details about a specific cleanup attempt associated with a test run.\n", + "tags": [ + "registry" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "required": true, + "schema": { + "type": "string" + }, + "description": "The name of the organization." + }, + { + "in": "path", + "name": "registry_name", + "required": true, + "schema": { + "type": "string" + }, + "description": "The registry host name." + }, + { + "in": "path", + "name": "namespace", + "required": true, + "schema": { + "type": "string" + }, + "description": "The namespace of the registry module." + }, + { + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string" + }, + "description": "The name of the registry module." + }, + { + "in": "path", + "name": "provider", + "required": true, + "schema": { + "type": "string" + }, + "description": "The provider of the registry module." + }, + { + "in": "path", + "name": "test_run_id", + "required": true, + "schema": { + "type": "string" + }, + "description": "The ID of the test run." + }, + { + "in": "path", + "name": "id", + "required": true, + "schema": { + "type": "string" + }, + "description": "The ID of the test run cleanup." + }, + { + "in": "query", + "name": "fields[test-run-cleanups]", + "description": "Return only the specified fields for test-run-cleanups resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Test run cleanup details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/test-run-cleanups-envelope" + } + } + } + }, + "404": { + "description": "Test run cleanup not found or user unauthorized to perform action", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/organizations/{organization_name}/ssh-keys": { + "get": { + "operationId": "listSshKeys", + "tags": [ + "ssh-keys" + ], + "summary": "List SSH Keys", + "description": "List all SSH keys for an organization.", + "parameters": [ + { + "name": "organization_name", + "in": "path", + "required": true, + "description": "The name of the organization.", + "schema": { + "type": "string", + "example": "my-organization" + } + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[ssh-keys]", + "description": "Return only the specified fields for ssh-keys resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ssh-keys" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "post": { + "operationId": "createSshKey", + "tags": [ + "ssh-keys" + ], + "summary": "Create an SSH Key", + "description": "Create a new SSH key for an organization.", + "parameters": [ + { + "name": "organization_name", + "in": "path", + "required": true, + "description": "The name of the organization.", + "schema": { + "type": "string", + "example": "my-organization" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/ssh-keys-envelope" + } + } + } + }, + "responses": { + "201": { + "description": "Created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/ssh-keys-envelope" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Unprocessable Content", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/ssh-keys/{ssh_key_id}": { + "get": { + "operationId": "getSshKey", + "tags": [ + "ssh-keys" + ], + "summary": "Get an SSH Key", + "description": "Retrieve the details of a single SSH key.", + "parameters": [ + { + "name": "ssh_key_id", + "in": "path", + "required": true, + "description": "The ID of the SSH key.", + "schema": { + "type": "string", + "example": "sshkey-xxxxxxxxxxxxxxxx" + } + }, + { + "in": "query", + "name": "fields[ssh-keys]", + "description": "Return only the specified fields for ssh-keys resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/ssh-keys-envelope" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "patch": { + "operationId": "updateSshKey", + "tags": [ + "ssh-keys" + ], + "summary": "Update an SSH Key", + "description": "Update the name of an SSH key.", + "parameters": [ + { + "name": "ssh_key_id", + "in": "path", + "required": true, + "description": "The ID of the SSH key.", + "schema": { + "type": "string", + "example": "sshkey-xxxxxxxxxxxxxxxx" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/ssh-keys-envelope" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/ssh-keys-envelope" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Unprocessable Content", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "delete": { + "operationId": "deleteSshKey", + "tags": [ + "ssh-keys" + ], + "summary": "Delete an SSH Key", + "description": "Delete an SSH key.", + "parameters": [ + { + "name": "ssh_key_id", + "in": "path", + "required": true, + "description": "The ID of the SSH key.", + "schema": { + "type": "string", + "example": "sshkey-xxxxxxxxxxxxxxxx" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/workspaces/{workspace_id}/change-requests": { + "get": { + "operationId": "listWorkspaceChangeRequests", + "summary": "List Change Requests in a Workspace", + "description": "List all change requests for a workspace.", + "tags": [ + "change-requests" + ], + "parameters": [ + { + "in": "path", + "name": "workspace_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The workspace ID." + }, + { + "in": "query", + "name": "archive", + "schema": { + "type": "boolean" + }, + "required": false, + "description": "When true, returns only archived change requests. When false, returns only unarchived change requests. When omitted, returns all change requests ordered by creation date." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[workspace-change-requests]", + "description": "Return only the specified fields for workspace-change-requests resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of change requests", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/workspace-change-requests" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/change-requests/{change_request_id}": { + "get": { + "operationId": "showChangeRequest", + "summary": "Show a Change Request", + "description": "Get details about a specific change request.", + "tags": [ + "change-requests" + ], + "parameters": [ + { + "in": "path", + "name": "change_request_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The change request ID." + }, + { + "in": "query", + "name": "fields[workspace-change-requests]", + "description": "Return only the specified fields for workspace-change-requests resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Change request details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspace-change-requests-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/change-requests/{change_request_id}/actions/archive": { + "get": { + "operationId": "getChangeRequestArchive", + "summary": "Get Change Request Archive Status", + "description": "Get the current state of a change request, including its archive status.", + "tags": [ + "change-requests" + ], + "parameters": [ + { + "in": "path", + "name": "change_request_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The change request ID." + }, + { + "in": "query", + "name": "fields[workspace-change-requests]", + "description": "Return only the specified fields for workspace-change-requests resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Change request details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspace-change-requests-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "post": { + "operationId": "archiveChangeRequest", + "summary": "Archive a Change Request", + "description": "Archive a change request to mark it as completed.", + "tags": [ + "change-requests" + ], + "parameters": [ + { + "in": "path", + "name": "change_request_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The change request ID." + } + ], + "responses": { + "200": { + "description": "Change request successfully archived", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspace-change-requests-envelope" + } + } + } + }, + "400": { + "description": "The change request is already archived.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/oauth-clients/{oauth_client_id}": { + "get": { + "operationId": "getOAuthClient", + "summary": "Get an OAuth Client", + "description": "Show details of an existing OAuth client.", + "tags": [ + "oauth-clients" + ], + "parameters": [ + { + "in": "path", + "name": "oauth_client_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the OAuth Client." + }, + { + "in": "query", + "name": "show_affected_workspaces", + "schema": { + "type": "boolean" + }, + "required": false, + "description": "If true, includes names of up to 25 affected workspaces and the total count." + }, + { + "in": "query", + "name": "fields[oauth-clients]", + "description": "Return only the specified fields for oauth-clients resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OAuth Client details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/oauth-clients-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "patch": { + "operationId": "updateOAuthClient", + "summary": "Update an OAuth Client", + "description": "Update settings of an existing OAuth client.", + "tags": [ + "oauth-clients" + ], + "parameters": [ + { + "in": "path", + "name": "oauth_client_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the OAuth Client to update." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/oauth-clients-envelope" + } + } + } + }, + "responses": { + "200": { + "description": "OAuth Client updated", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/oauth-clients-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "delete": { + "operationId": "destroyOAuthClient", + "summary": "Destroy an OAuth Client", + "description": "Remove an existing OAuth client and unlink any associated workspaces.", + "tags": [ + "oauth-clients" + ], + "parameters": [ + { + "in": "path", + "name": "oauth_client_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the OAuth Client to destroy." + } + ], + "responses": { + "204": { + "description": "OAuth Client successfully destroyed." + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/oauth-clients": { + "post": { + "operationId": "createOAuthClient", + "summary": "Create an OAuth Client", + "description": "Create a VCS connection between an organization and a VCS provider. The organization is specified via the `organization-id` attribute. This endpoint allows you to provide a pre-generated OAuth token string instead of going through the OAuth Application flow.\n", + "tags": [ + "oauth-clients" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/oauth-clients-envelope" + } + } + } + }, + "responses": { + "201": { + "description": "OAuth Client created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/oauth-clients-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/organizations/{organization_name}/oauth-clients": { + "get": { + "operationId": "listOAuthClients", + "summary": "List OAuth Clients", + "description": "List all VCS connections between an organization and its VCS providers.", + "tags": [ + "oauth-clients" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the organization." + }, + { + "in": "query", + "name": "show_affected_workspaces", + "schema": { + "type": "boolean" + }, + "required": false, + "description": "If true, includes names of up to 25 affected workspaces and total count per client." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[oauth-clients]", + "description": "Return only the specified fields for oauth-clients resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of OAuth Clients", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/oauth-clients" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "post": { + "operationId": "createOAuthClientForOrganization", + "summary": "Create an OAuth Client for an Organization", + "description": "Create a VCS connection between an organization and a VCS provider. This endpoint allows you to provide a pre-generated OAuth token string instead of going through the OAuth Application flow.\n", + "tags": [ + "oauth-clients" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the organization." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/oauth-clients-envelope" + } + } + } + }, + "responses": { + "201": { + "description": "OAuth Client created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/oauth-clients-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/oauth-clients/{oauth_client_id}/relationships/projects": { + "post": { + "operationId": "attachOAuthClientToProjects", + "summary": "Attach an OAuth Client to Projects", + "description": "Attach an OAuth client to one or more projects.", + "tags": [ + "oauth-clients" + ], + "parameters": [ + { + "in": "path", + "name": "oauth_client_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the OAuth Client to attach to projects." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/projects-identifier-array-document" + } + } + } + }, + "responses": { + "204": { + "description": "OAuth Client successfully attached to projects." + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "delete": { + "operationId": "detachOAuthClientFromProjects", + "summary": "Detach an OAuth Client from Projects", + "description": "Detach an OAuth client from one or more projects.", + "tags": [ + "oauth-clients" + ], + "parameters": [ + { + "in": "path", + "name": "oauth_client_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the OAuth Client to detach from projects." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/projects-identifier-array-document" + } + } + } + }, + "responses": { + "204": { + "description": "OAuth Client successfully detached from projects." + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/oauth-tokens/{oauth_token_id}": { + "get": { + "tags": [ + "oauth-tokens" + ], + "summary": "Show an OAuth Token", + "description": "Get details about an OAuth token.", + "operationId": "getOauthToken", + "parameters": [ + { + "name": "oauth_token_id", + "in": "path", + "required": true, + "description": "The ID of the OAuth token.", + "schema": { + "type": "string", + "example": "ot-xxxxxxxxxxxxxxxx" + } + }, + { + "in": "query", + "name": "fields[oauth-tokens]", + "description": "Return only the specified fields for oauth-tokens resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/oauth-tokens-envelope" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "patch": { + "tags": [ + "oauth-tokens" + ], + "summary": "Update an OAuth Token", + "description": "Update an OAuth token by setting its SSH key.", + "operationId": "updateOauthToken", + "parameters": [ + { + "name": "oauth_token_id", + "in": "path", + "required": true, + "description": "The ID of the OAuth token.", + "schema": { + "type": "string", + "example": "ot-xxxxxxxxxxxxxxxx" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/oauth-tokens-envelope" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/oauth-tokens-envelope" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Unprocessable Content", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "delete": { + "tags": [ + "oauth-tokens" + ], + "summary": "Destroy an OAuth Token", + "description": "Destroy an OAuth token.", + "operationId": "deleteOauthToken", + "parameters": [ + { + "name": "oauth_token_id", + "in": "path", + "required": true, + "description": "The ID of the OAuth token.", + "schema": { + "type": "string", + "example": "ot-xxxxxxxxxxxxxxxx" + } + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/organizations/{organization_name}/oauth-tokens": { + "get": { + "tags": [ + "oauth-tokens" + ], + "summary": "List OAuth Tokens for an Organization", + "description": "List all OAuth tokens for a given organization.", + "operationId": "listOauthTokensForOrganization", + "parameters": [ + { + "name": "organization_name", + "in": "path", + "required": true, + "description": "The name of the organization.", + "schema": { + "type": "string", + "example": "my-organization" + } + }, + { + "name": "filter[provider]", + "in": "query", + "required": false, + "description": "Filter tokens by VCS provider name.", + "schema": { + "type": "string", + "example": "github" + } + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[oauth-tokens]", + "description": "Return only the specified fields for oauth-tokens resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/oauth-tokens" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/oauth-clients/{oauth_client_id}/oauth-tokens": { + "get": { + "tags": [ + "oauth-tokens" + ], + "summary": "List OAuth Tokens for an OAuth Client", + "description": "List all OAuth tokens for a given OAuth client.", + "operationId": "listOauthTokensForOauthClient", + "parameters": [ + { + "name": "oauth_client_id", + "in": "path", + "required": true, + "description": "The ID of the OAuth client.", + "schema": { + "type": "string", + "example": "oc-xxxxxxxxxxxxxxxx" + } + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[oauth-tokens]", + "description": "Return only the specified fields for oauth-tokens resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/oauth-tokens" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/oauth-tokens/{oauth_token_id}/authorized-repos": { + "get": { + "tags": [ + "oauth-tokens" + ], + "summary": "List Authorized Repositories for an OAuth Token", + "description": "List all repositories that the OAuth token is authorized to access.", + "operationId": "listAuthorizedReposForOauthToken", + "parameters": [ + { + "name": "oauth_token_id", + "in": "path", + "required": true, + "description": "The ID of the OAuth token.", + "schema": { + "type": "string", + "example": "ot-xxxxxxxxxxxxxxxx" + } + }, + { + "name": "organization", + "in": "query", + "required": false, + "description": "The VCS organization name to scope repositories to. Required for Azure DevOps providers.", + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[authorized-repos]", + "description": "Return only the specified fields for authorized-repos resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/authorized-repos" + } + }, + "meta": { + "type": "object", + "properties": { + "next-page": { + "type": "integer", + "nullable": true, + "description": "The next page number, if more pages are available." + } + } + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/oauth-tokens/{oauth_token_id}/vcs-organizations": { + "get": { + "tags": [ + "oauth-tokens" + ], + "summary": "List VCS Organizations for an OAuth Token", + "description": "List all VCS organizations accessible via the OAuth token. Only applicable to Azure DevOps providers.", + "operationId": "listVcsOrganizationsForOauthToken", + "parameters": [ + { + "name": "oauth_token_id", + "in": "path", + "required": true, + "description": "The ID of the OAuth token.", + "schema": { + "type": "string", + "example": "ot-xxxxxxxxxxxxxxxx" + } + }, + { + "in": "query", + "name": "fields[vcs-organization]", + "description": "Return only the specified fields for vcs-organization resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/vcs-organization" + } + } + } + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/github-app-installations": { + "get": { + "operationId": "listGithubAppInstallations", + "summary": "List GitHub App Installations", + "description": "List GitHub App installations available to the current user.", + "tags": [ + "github-app-installations" + ], + "parameters": [ + { + "in": "query", + "name": "filter[name]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Filter by GitHub organization or login name." + }, + { + "in": "query", + "name": "filter[installation_id]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Filter by GitHub installation ID." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[github-app-installations]", + "description": "Return only the specified fields for github-app-installations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of GitHub App installations", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/github-app-installations" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/github-app-installations/{github_app_installation_id}/repos": { + "get": { + "operationId": "listGithubAppInstallationRepos", + "summary": "List GitHub App Installation Repositories", + "description": "List repositories accessible through a GitHub App installation.", + "tags": [ + "github-app-installations" + ], + "parameters": [ + { + "in": "path", + "name": "github_app_installation_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the GitHub App installation." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[github-app-repos]", + "description": "Return only the specified fields for github-app-repos resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of repositories", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/github-app-repos" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/github-app/installation/{github_app_installation_id}": { + "get": { + "operationId": "getGithubAppInstallation", + "summary": "Show GitHub App Installation", + "description": "Get details about a GitHub App installation.", + "tags": [ + "github-app-installations" + ], + "parameters": [ + { + "in": "path", + "name": "github_app_installation_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the GitHub App installation." + }, + { + "in": "query", + "name": "fields[github-app-installations]", + "description": "Return only the specified fields for github-app-installations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "GitHub App installation details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/github-app-installations-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/github-app/installations": { + "get": { + "operationId": "listGithubAppInstallationsForCurrentUser", + "summary": "List GitHub App Installations for Current User", + "description": "List GitHub App installations accessible to the current authenticated user.", + "tags": [ + "github-app-installations" + ], + "parameters": [ + { + "in": "query", + "name": "filter[name]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Filter by GitHub organization or login name." + }, + { + "in": "query", + "name": "filter[installation_id]", + "schema": { + "type": "string" + }, + "required": false, + "description": "Filter by GitHub installation ID." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[github-app-installations]", + "description": "Return only the specified fields for github-app-installations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of GitHub App installations", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/github-app-installations" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/admin/github-app-installations": { + "x-vis": [ + "tfe" + ], + "get": { + "operationId": "adminListGithubAppInstallations", + "summary": "List GitHub App Installations (Admin)", + "description": "List the webhook-synchronized installations of the site's Global GitHub App across every organization, including disconnected and suspended installations. This endpoint is exclusive to Terraform Enterprise and requires site-admin access.\n\nThis operation is only available in Terraform Enterprise.", + "tags": [ + "github-app-installations" + ], + "parameters": [ + { + "in": "query", + "name": "filter[query]", + "schema": { + "type": "string", + "maxLength": 255 + }, + "required": false, + "description": "Filter by GitHub account name (partial match) or exact GitHub installation ID." + }, + { + "in": "query", + "name": "filter[status]", + "schema": { + "type": "string", + "enum": [ + "all", + "connected", + "disconnected", + "suspended" + ] + }, + "required": false, + "description": "Filter by installation status. Defaults to all." + }, + { + "in": "query", + "name": "filter[type]", + "schema": { + "type": "string", + "enum": [ + "Organization", + "User" + ] + }, + "required": false, + "description": "Filter by GitHub account type." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[github-app-installations]", + "description": "Return only the specified fields for github-app-installations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of GitHub App installations", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/github-app-installations" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + }, + "total-installation-count": { + "type": "integer", + "description": "The unfiltered number of synchronized installations for the app, independent of the filter and page parameters." + } + } + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/admin/github-app-installations/refresh": { + "x-vis": [ + "tfe" + ], + "post": { + "operationId": "adminRefreshGithubAppInstallations", + "summary": "Refresh GitHub App Installations (Admin)", + "description": "Request an on-demand reconciliation of the Global GitHub App's installation inventory against GitHub, recovering installations whose webhook deliveries were missed. Only available when the app is hosted on GHE.com. This endpoint is exclusive to Terraform Enterprise and requires site-admin access.\n\nThis operation is only available in Terraform Enterprise.", + "tags": [ + "github-app-installations" + ], + "responses": { + "204": { + "description": "Reconciliation enqueued" + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/organizations/{organization_name}/github-app-installations": { + "get": { + "operationId": "listOrganizationGithubAppInstallations", + "summary": "List Organization GitHub App Installations", + "description": "List GitHub App installations linked to an organization.", + "tags": [ + "github-app-installations" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the organization." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[github-app-installations]", + "description": "Return only the specified fields for github-app-installations resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of GitHub App installations", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/github-app-installations" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/organizations/{organization_name}/github-app-installations/{github_app_installation_id}/repos": { + "get": { + "operationId": "listOrganizationGithubAppInstallationRepos", + "summary": "List Organization GitHub App Installation Repositories", + "description": "List repositories accessible through a GitHub App installation linked to an organization.", + "tags": [ + "github-app-installations" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the organization." + }, + { + "in": "path", + "name": "github_app_installation_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the GitHub App installation." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[github-app-repos]", + "description": "Return only the specified fields for github-app-repos resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of repositories", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/github-app-repos" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/organizations/{organization_name}/github-app-installations/{github_app_installation_id}/link-account": { + "post": { + "operationId": "linkOrganizationGithubAppInstallation", + "summary": "Link GitHub App Installation to Organization", + "description": "Link a GitHub App installation to an organization.", + "tags": [ + "github-app-installations" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the organization." + }, + { + "in": "path", + "name": "github_app_installation_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the GitHub App installation." + } + ], + "responses": { + "204": { + "description": "No Content" + }, + "default": { + "description": "Error details", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + } + }, + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/tasks/{id}": { + "get": { + "operationId": "getTask", + "summary": "Get a Run Task", + "description": "Get details about a run task.", + "tags": [ + "run-tasks" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the run task." + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "workspace_tasks", + "workspace_tasks.workspace" + ] + } + }, + "required": false, + "description": "Allows including related resource data.\n" + }, + { + "in": "query", + "name": "fields[tasks]", + "description": "Return only the specified fields for tasks resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Run task details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/tasks-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "patch": { + "operationId": "updateTask", + "summary": "Update a Run Task", + "description": "Update a run task.", + "tags": [ + "run-tasks" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the run task." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/tasks-envelope" + } + } + } + }, + "responses": { + "200": { + "description": "Run task updated", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/tasks-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "delete": { + "operationId": "deleteTask", + "summary": "Delete a Run Task", + "description": "Delete a run task.", + "tags": [ + "run-tasks" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the run task." + } + ], + "responses": { + "204": { + "description": "Run task deleted" + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/organizations/{organization_name}/tasks": { + "get": { + "operationId": "listOrganizationTasks", + "summary": "List Run Tasks", + "description": "List all run tasks in an organization.", + "tags": [ + "run-tasks" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the organization." + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "workspace_tasks", + "workspace_tasks.workspace" + ] + } + }, + "required": false, + "description": "Allows including related resource data.\n" + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[tasks]", + "description": "Return only the specified fields for tasks resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of run tasks", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/tasks" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "post": { + "operationId": "createTask", + "summary": "Create a Run Task", + "description": "Create a run task in an organization.", + "tags": [ + "run-tasks" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the organization." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/tasks-envelope" + } + } + } + }, + "responses": { + "201": { + "description": "Run task created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/tasks-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/tasks/{id}/relationships/workspace-tasks": { + "get": { + "operationId": "listTaskWorkspaceTasks", + "summary": "List Workspace Run Tasks for a Run Task", + "description": "List all workspace run tasks associated with a run task.", + "tags": [ + "run-tasks" + ], + "parameters": [ + { + "in": "path", + "name": "id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the run task." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[workspace-tasks]", + "description": "Return only the specified fields for workspace-tasks resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of workspace run tasks", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/workspace-tasks" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/task-configs/{external_id}": { + "get": { + "operationId": "getTaskConfig", + "summary": "Get a Task Configuration", + "description": "Get details about a task configuration.", + "tags": [ + "tasks" + ], + "parameters": [ + { + "in": "path", + "name": "external_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the task configuration." + }, + { + "in": "query", + "name": "include", + "schema": { + "type": "string" + }, + "required": false, + "description": "Allows including related resource data. Value must be a comma-separated list containing one or more of `projects`, `task`, `owner`, or `organization`.\n" + }, + { + "in": "query", + "name": "fields[task-configs]", + "description": "Return only the specified fields for task-configs resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Task configuration details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/task-configs-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "patch": { + "operationId": "updateTaskConfig", + "summary": "Update a Task Configuration", + "description": "Update a task configuration.", + "tags": [ + "tasks" + ], + "parameters": [ + { + "in": "path", + "name": "external_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the task configuration." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/task-configs-envelope" + } + } + } + }, + "responses": { + "200": { + "description": "Task configuration updated", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/task-configs-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/organizations/{organization_name}/task-configs": { + "get": { + "operationId": "listOrganizationTaskConfigs", + "summary": "List Task Configurations", + "description": "List task configurations in an organization that apply to a given target project.\n", + "tags": [ + "tasks" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the organization." + }, + { + "in": "query", + "name": "filter[target_id]", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the target project to filter by." + }, + { + "in": "query", + "name": "filter[target_type]", + "schema": { + "type": "string", + "enum": [ + "projects" + ] + }, + "required": true, + "description": "The type of the target to filter by." + }, + { + "in": "query", + "name": "filter[task_category]", + "schema": { + "type": "string", + "enum": [ + "hook", + "task", + "native" + ] + }, + "required": false, + "description": "Restricts results to task configurations whose task belongs to the given category.\n" + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[task-configs]", + "description": "Return only the specified fields for task-configs resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of task configurations", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/task-configs" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "post": { + "operationId": "createTaskConfig", + "summary": "Create a Task Configuration", + "description": "Create a task configuration in an organization.", + "tags": [ + "tasks" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the organization." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/task-configs-envelope" + } + } + } + }, + "responses": { + "201": { + "description": "Task configuration created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/task-configs-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/organizations/{organization_name}/task-configs/for-owner": { + "get": { + "operationId": "getTaskConfigForOwner", + "summary": "Get a Task Configuration for an Owner", + "description": "Get the task configuration for a specific task and owner within an organization.\n", + "tags": [ + "tasks" + ], + "parameters": [ + { + "in": "path", + "name": "organization_name", + "schema": { + "type": "string" + }, + "required": true, + "description": "The name of the organization." + }, + { + "in": "query", + "name": "q[task_id]", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the task." + }, + { + "in": "query", + "name": "q[owner_id]", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the owner. For organization owners, this is the organization name." + }, + { + "in": "query", + "name": "q[owner_type]", + "schema": { + "type": "string", + "enum": [ + "organizations" + ] + }, + "required": true, + "description": "The type of the owner." + }, + { + "in": "query", + "name": "fields[task-configs]", + "description": "Return only the specified fields for task-configs resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Task configuration details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/task-configs-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/workspaces/{workspace_id}/tasks": { + "get": { + "operationId": "listWorkspaceTasks", + "summary": "List Workspace Run Tasks", + "description": "List all run tasks associated with a workspace.", + "tags": [ + "run-tasks" + ], + "parameters": [ + { + "in": "path", + "name": "workspace_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the workspace." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[workspace-tasks]", + "description": "Return only the specified fields for workspace-tasks resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of workspace run tasks", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/workspace-tasks" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "post": { + "operationId": "createWorkspaceTask", + "summary": "Associate a Run Task to a Workspace", + "description": "Associate an existing run task to a workspace.", + "tags": [ + "run-tasks" + ], + "parameters": [ + { + "in": "path", + "name": "workspace_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the workspace." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspace-tasks-envelope" + } + } + } + }, + "responses": { + "201": { + "description": "Workspace run task created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspace-tasks-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/workspaces/{workspace_id}/tasks/{id}": { + "get": { + "operationId": "getWorkspaceTask", + "summary": "Show a Workspace Run Task", + "description": "Get details about a workspace run task.", + "tags": [ + "run-tasks" + ], + "parameters": [ + { + "in": "path", + "name": "workspace_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the workspace." + }, + { + "in": "path", + "name": "id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the workspace run task." + }, + { + "in": "query", + "name": "fields[workspace-tasks]", + "description": "Return only the specified fields for workspace-tasks resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Workspace run task details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspace-tasks-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "patch": { + "operationId": "updateWorkspaceTask", + "summary": "Update a Workspace Run Task", + "description": "Update a workspace run task.", + "tags": [ + "run-tasks" + ], + "parameters": [ + { + "in": "path", + "name": "workspace_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the workspace." + }, + { + "in": "path", + "name": "id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the workspace run task." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspace-tasks-envelope" + } + } + } + }, + "responses": { + "200": { + "description": "Workspace run task updated", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspace-tasks-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "delete": { + "operationId": "deleteWorkspaceTask", + "summary": "Delete a Workspace Run Task", + "description": "Delete a workspace run task, dissociating the run task from the workspace.", + "tags": [ + "run-tasks" + ], + "parameters": [ + { + "in": "path", + "name": "workspace_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the workspace." + }, + { + "in": "path", + "name": "id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the workspace run task." + } + ], + "responses": { + "204": { + "description": "Workspace run task deleted" + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/task-stages/{task_stage_id}": { + "get": { + "operationId": "getTaskStage", + "summary": "Show a Run Task Stage", + "description": "Get details about a specific run task stage.", + "tags": [ + "task-stages" + ], + "parameters": [ + { + "in": "path", + "name": "task_stage_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the task stage to show." + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "run", + "run.workspace", + "task_results", + "policy_evaluations", + "cost_estimate" + ] + } + }, + "required": false, + "description": "A comma-separated list of related resources to include." + }, + { + "in": "query", + "name": "fields[task-stages]", + "description": "Return only the specified fields for task-stages resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Task stage details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/task-stages-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/task-stages/{task_stage_id}/actions/override": { + "post": { + "operationId": "overrideTaskStage", + "summary": "Override a Task Stage", + "description": "Override a task stage that is in the awaiting_override status, allowing the run to continue even when run tasks have failed.", + "tags": [ + "task-stages" + ], + "parameters": [ + { + "in": "path", + "name": "task_stage_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the task stage to override." + } + ], + "responses": { + "200": { + "description": "Task stage successfully overridden", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/task-stages-envelope" + } + } + } + }, + "409": { + "description": "The task stage is not in an overridable state or has no overridable failures.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/runs/{run_id}/task-stages": { + "get": { + "operationId": "listRunTaskStages", + "summary": "List the Run Task Stages in a Run", + "description": "List the run task stages associated with a run.", + "tags": [ + "task-stages" + ], + "parameters": [ + { + "in": "path", + "name": "run_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the run to list task stages for." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[task-stages]", + "description": "Return only the specified fields for task-stages resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of run task stages", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/task-stages" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/task-results/{task_result_id}": { + "get": { + "operationId": "getTaskResult", + "summary": "Show a Run Task Result", + "description": "Get details about a specific run task result.", + "tags": [ + "task-stages" + ], + "parameters": [ + { + "in": "path", + "name": "task_result_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the task result to show." + }, + { + "in": "query", + "name": "fields[task-results]", + "description": "Return only the specified fields for task-results resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "in": "query", + "name": "fields[task_results]", + "description": "Return only the specified fields for task_results resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Task result details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/task-results-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/task-results/{task_result_id}/body": { + "get": { + "operationId": "getTaskResultBody", + "summary": "Download Task Result Body", + "description": "Download the body content of a native task result. This endpoint redirects to a \npre-signed URL for downloading the task result data stored in object storage.\n", + "tags": [ + "task-stages" + ], + "parameters": [ + { + "in": "path", + "name": "task_result_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the task result." + } + ], + "responses": { + "200": { + "description": "File containing the task result body.", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "404": { + "description": "Task result not found or has no body content", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/task-results/{task_result_id}/callback": { + "patch": { + "operationId": "callbackTaskResult", + "summary": "Update a Run Task Result", + "description": "Update a run task result with status, message, and optional outcome data. This endpoint is used by run task integrations to report execution results back to HCP Terraform. Requires a url_code query parameter for authentication.", + "tags": [ + "task-stages" + ], + "parameters": [ + { + "in": "path", + "name": "task_result_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the task result to update." + }, + { + "in": "query", + "name": "url_code", + "schema": { + "type": "string" + }, + "required": false, + "description": "The callback authentication token issued to the run task integration. Required for run task integrations; not required for token-authenticated requests." + } + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/task-results-envelope" + } + } + } + }, + "responses": { + "200": { + "description": "Task result updated successfully", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/task-results-envelope" + } + } + } + }, + "409": { + "description": "The task result is in a terminal state and cannot be updated.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "422": { + "description": "Invalid attributes provided.", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/task-results/{task_result_id}/outcomes": { + "get": { + "operationId": "listTaskResultOutcomes", + "summary": "List the Outcomes for a Run Task Result", + "description": "List the run task result outcomes associated with a run task result.", + "tags": [ + "task-stages" + ], + "parameters": [ + { + "in": "path", + "name": "task_result_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the task result to list outcomes for." + }, + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[task-result-outcomes]", + "description": "Return only the specified fields for task-result-outcomes resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of run task result outcomes", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/task-result-outcomes" + } + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/task-result-outcomes/{task_result_outcome_id}": { + "get": { + "operationId": "getTaskResultOutcome", + "summary": "Show a Run Task Result Outcome", + "description": "Get details about a specific run task result outcome.", + "tags": [ + "task-stages" + ], + "parameters": [ + { + "in": "path", + "name": "task_result_outcome_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "The ID of the task result outcome to show." + }, + { + "in": "query", + "name": "fields[task-result-outcomes]", + "description": "Return only the specified fields for task-result-outcomes resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Task result outcome details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/task-result-outcomes-envelope" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/workspace-transfers": { + "get": { + "operationId": "listWorkspaceTransfers", + "summary": "List Workspace Transfers", + "description": "List all workspace transfers you have access to.", + "tags": [ + "workspace-transfers" + ], + "parameters": [ + { + "$ref": "#/components/parameters/page_number" + }, + { + "$ref": "#/components/parameters/page_size" + }, + { + "in": "query", + "name": "fields[workspace-transfers]", + "description": "Return only the specified fields for workspace-transfers resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "List of workspace transfers", + "content": { + "application/vnd.api+json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/workspace-transfers" + } + }, + "links": { + "$ref": "#/components/schemas/self-with-pagination" + }, + "meta": { + "type": "object", + "properties": { + "pagination": { + "$ref": "#/components/schemas/pagination" + } + } + } + } + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + }, + "post": { + "operationId": "createWorkspaceTransfer", + "summary": "Create a Workspace Transfer", + "description": "Queue a new workspace transfer across organizations.", + "tags": [ + "workspace-transfers" + ], + "requestBody": { + "required": true, + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspace-transfers-envelope" + } + } + } + }, + "responses": { + "201": { + "description": "Workspace transfer created", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspace-transfers-envelope" + } + } + } + }, + "422": { + "description": "Validation error", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/workspace-transfers/{workspace_transfer_id}": { + "get": { + "operationId": "getWorkspaceTransfer", + "summary": "Get Workspace Transfer details", + "description": "Get details about a workspace transfer.", + "tags": [ + "workspace-transfers" + ], + "parameters": [ + { + "in": "path", + "name": "workspace_transfer_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "Workspace Transfer ID" + }, + { + "in": "query", + "name": "include", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "events" + ] + } + }, + "required": false, + "description": "Allows including related resource data." + }, + { + "in": "query", + "name": "fields[workspace-transfers]", + "description": "Return only the specified fields for workspace-transfers resource(s) in the response. Use underscores for identifiers that contain a dash: For example, auto_apply instead of auto-apply. An empty value indicates that no fields should be returned.", + "style": "form", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + ], + "responses": { + "200": { + "description": "Workspace transfer details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspace-transfers-envelope" + } + } + } + }, + "404": { + "description": "Workspace transfer not found", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/workspace-transfers/{workspace_transfer_id}/actions/resume": { + "post": { + "operationId": "resumeWorkspaceTransfer", + "summary": "Resume a Workspace Transfer", + "description": "Resume a paused workspace transfer. A transfer pauses automatically:\n- After data migration completes, awaiting approval before source workspace deletion (`awaiting_approval`)\n- If source workspace deletion times out (`source_workspace_deletion_stuck`)\nOnce resumed, the transfer proceeds with the remaining operations.\n", + "tags": [ + "workspace-transfers" + ], + "parameters": [ + { + "in": "path", + "name": "workspace_transfer_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "Workspace Transfer ID" + } + ], + "responses": { + "200": { + "description": "Workspace transfer resumed", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspace-transfers-envelope" + } + } + } + }, + "409": { + "description": "Transfer is not paused", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + }, + "/workspace-transfers/{workspace_transfer_id}/actions/cancel": { + "post": { + "operationId": "cancelWorkspaceTransfer", + "summary": "Cancel a Workspace Transfer", + "description": "Cancel a workspace transfer before the source workspace deletion begins.\nOnce the `remove_source_workspace` operation starts, the transfer cannot be canceled.\nCanceling leaves the source workspace intact but locked. You cannot resume a canceled transfer.\n", + "tags": [ + "workspace-transfers" + ], + "parameters": [ + { + "in": "path", + "name": "workspace_transfer_id", + "schema": { + "type": "string" + }, + "required": true, + "description": "Workspace Transfer ID" + } + ], + "responses": { + "200": { + "description": "Workspace transfer canceled", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/workspace-transfers-envelope" + } + } + } + }, + "409": { + "description": "Transfer cannot be canceled (already started source workspace deletion, completed, or already canceled)", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + }, + "default": { + "description": "Error details", + "content": { + "application/vnd.api+json": { + "schema": { + "$ref": "#/components/schemas/errors" + } + } + } + } + } + } + } + }, + "components": { + "securitySchemes": { + "bearerAuth": { + "type": "http", + "scheme": "bearer" + } + }, + "schemas": { + "errors": { + "type": "object", + "properties": { + "errors": { + "type": "array", + "items": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "title": { + "type": "string" + }, + "detail": { + "type": "string" + } + } + } + } + } + }, + "admin-banners": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true, + "description": "The external ID of the banner (e.g. ab-xxxxxxxxxxxxxxxx)." + }, + "type": { + "type": "string", + "enum": [ + "admin-banners" + ] + }, + "attributes": { + "type": "object", + "required": [ + "title", + "body", + "style", + "audience" + ], + "properties": { + "title": { + "type": "string", + "maxLength": 100, "description": "Short heading for the banner (max 100 characters)." }, - "body": { + "body": { + "type": "string", + "maxLength": 255, + "description": "Body text of the banner. Limited HTML is allowed: strong, em, b, i, and anchor tags with href. All other tags and attributes are stripped. Maximum 255 characters after sanitization.\n" + }, + "style": { + "type": "string", + "enum": [ + "info", + "warning", + "critical" + ], + "description": "Visual style controlling how the banner is rendered." + }, + "audience": { + "type": "string", + "enum": [ + "all_users", + "authenticated_only" + ], + "description": "Which users see the banner." + }, + "scheduled-publish-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "description": "ISO 8601 datetime (UTC) when the banner should become active. scheduled-publish-at, scheduled-expire-at, and timezone must all be provided together or all omitted. Providing only a subset is a validation error.\n" + }, + "scheduled-expire-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "description": "ISO 8601 datetime (UTC) when the banner should be automatically deactivated. Must be provided together with scheduled-publish-at and timezone.\n" + }, + "timezone": { + "type": "string", + "nullable": true, + "description": "IANA timezone identifier for the scheduled times (e.g. \"America/New_York\", \"UTC\"). Required when scheduled-publish-at and scheduled-expire-at are provided. Used by the UI to display the schedule in the administrator's local timezone; stored and returned as-is.\n" + }, + "published-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true, + "description": "Set to the current time the first time this banner becomes immediately active: on creation without a schedule, or when a scheduled banner has its schedule cleared via update. Once set, this value is not changed by subsequent updates. Null when the banner has an active schedule (scheduled-publish-at is set) and has not yet had it cleared.\n" + } + } + } + } + }, + "admin-banners-collection-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/admin-banners" + } + } + } + }, + "admin-banners-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/admin-banners" + } + } + }, + "admin-saml-settings": { + "type": "object", + "required": [ + "type" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true, + "example": "saml", + "description": "Always the literal string `saml`; SAML settings are a singleton resource." + }, + "type": { + "type": "string", + "enum": [ + "saml-settings" + ] + }, + "attributes": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether SAML single sign-on is enabled." + }, + "debug": { + "type": "boolean", + "description": "Whether SAML debug mode is enabled." + }, + "slo-endpoint-url": { + "type": "string", + "nullable": true, + "description": "Single Log Out URL of the identity provider." + }, + "sso-endpoint-url": { + "type": "string", + "nullable": true, + "description": "Single Sign On URL of the identity provider." + }, + "idp-cert": { + "type": "string", + "nullable": true, + "deprecated": true, + "description": "**Deprecated.** PEM-encoded primary IdP certificate. Use the `saml-settings/idp-certificates` resource instead. When the idp-certificates API is active this attribute reflects the cert body of the `legacy_primary` row; writing to it creates or rotates that row.\n" + }, + "old-idp-cert": { + "type": "string", + "nullable": true, + "deprecated": true, + "readOnly": true, + "description": "**Deprecated.** Previous identity provider certificate retained after a rotation. Use the `saml-settings/idp-certificates` resource to manage certificates directly.\n" + }, + "attr-username": { + "type": "string", + "nullable": true, + "description": "SAML attribute name for the username." + }, + "attr-groups": { + "type": "string", + "nullable": true, + "description": "SAML attribute name for team membership." + }, + "attr-site-admin": { + "type": "string", + "nullable": true, + "description": "SAML attribute name that designates a site admin." + }, + "site-admin-role": { + "type": "string", + "nullable": true, + "description": "Role value that grants site admin permissions." + }, + "attr-site-auditor": { + "type": "string", + "nullable": true, + "x-vis": [ + "tfe" + ], + "x-tfe-min-version": "2.1.0", + "description": "SAML attribute name that designates a site auditor.\n\nThis attribute is only available in Terraform Enterprise version 2.1.0 or later." + }, + "site-auditor-role": { + "type": "string", + "nullable": true, + "x-vis": [ + "tfe" + ], + "x-tfe-min-version": "2.1.0", + "description": "Role value that grants site auditor permissions.\n\nThis attribute is only available in Terraform Enterprise version 2.1.0 or later." + }, + "sso-api-token-session-timeout": { + "type": "integer", + "nullable": true, + "description": "Session timeout, in seconds, for API tokens issued via SSO." + }, + "team-management-enabled": { + "type": "boolean", + "nullable": true, + "description": "Whether team membership is managed by the identity provider." + }, + "acs-consumer-url": { + "type": "string", + "readOnly": true, + "description": "Assertion Consumer Service URL to configure in the identity provider." + }, + "metadata-url": { + "type": "string", + "readOnly": true, + "description": "Service provider metadata URL." + }, + "certificate": { + "type": "string", + "nullable": true, + "description": "PEM encoded X.509 certificate used to sign SAML requests." + }, + "private-key": { + "type": "string", + "nullable": true, + "writeOnly": true, + "description": "PEM encoded private key paired with `certificate`. Write-only: it is never returned in a response. Omit it on update to leave the stored key unchanged.\n" + }, + "authn-requests-signed": { + "type": "boolean", + "nullable": true, + "description": "Whether authentication requests are signed." + }, + "want-assertions-signed": { + "type": "boolean", + "nullable": true, + "description": "Whether signed assertions are required from the identity provider." + }, + "signature-signing-method": { + "type": "string", + "nullable": true, + "enum": [ + "SHA1", + "SHA256" + ], + "description": "Signature signing method." + }, + "signature-digest-method": { + "type": "string", + "nullable": true, + "enum": [ + "SHA1", + "SHA256" + ], + "description": "Signature digest method." + }, + "max-message-size-in-bytes": { + "type": "integer", + "description": "Maximum accepted size of a SAML message, in bytes." + }, + "provider-type": { + "type": "string", + "enum": [ + "entra", + "okta", + "saml", + "unknown" + ], + "description": "Identity provider family. `unknown` predates this setting." + }, + "permissions": { + "type": "object", + "readOnly": true, + "properties": { + "can-read": { + "type": "boolean" + }, + "can-update": { + "type": "boolean" + } + } + } + } + } + } + }, + "admin-saml-settings-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/admin-saml-settings" + } + } + }, + "related": { + "type": "object", + "properties": { + "related": { + "type": "string" + } + } + }, + "links_related": { + "type": "object", + "properties": { + "links": { + "$ref": "#/components/schemas/related" + } + } + }, + "admin-scim-settings": { + "type": "object", + "required": [ + "type" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true, + "example": "scim", + "description": "Always the literal string `scim`; SCIM settings are a singleton resource." + }, + "type": { + "type": "string", + "enum": [ + "scim-settings" + ] + }, + "attributes": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether SCIM provisioning is enabled. Enabling requires SAML to be enabled with a SCIM-compatible provider type.\n" + }, + "paused": { + "type": "boolean", + "description": "Whether SCIM provisioning is temporarily paused. Cannot be true while disabled." + }, + "site-admin-group-scim-id": { + "type": "string", + "nullable": true, + "description": "SCIM id of the group whose members are granted site admin permissions." + }, + "site-admin-group-display-name": { + "type": "string", + "nullable": true, + "readOnly": true, + "description": "Display name of the site admin group." + }, + "site-auditor-group-scim-id": { + "type": "string", + "nullable": true, + "x-vis": [ + "tfe" + ], + "x-tfe-min-version": "2.1.0", + "description": "SCIM id of the group whose members are granted site auditor permissions.\n\nThis attribute is only available in Terraform Enterprise version 2.1.0 or later." + }, + "site-auditor-group-display-name": { + "type": "string", + "nullable": true, + "readOnly": true, + "x-vis": [ + "tfe" + ], + "x-tfe-min-version": "2.1.0", + "description": "Display name of the site auditor group.\n\nThis attribute is only available in Terraform Enterprise version 2.1.0 or later." + }, + "permissions": { + "type": "object", + "readOnly": true, + "properties": { + "can-read": { + "type": "boolean" + }, + "can-update": { + "type": "boolean" + }, + "can-destroy": { + "type": "boolean" + } + } + } + } + }, + "relationships": { + "type": "object", + "properties": { + "authentication-tokens": { + "$ref": "#/components/schemas/links_related" + } + } + } + } + }, + "admin-scim-settings-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/admin-scim-settings" + } + } + }, + "saml-idp-certificates": { + "type": "object", + "required": [ + "type" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true, + "description": "The external ID of the IdP certificate (e.g. idpc-xxxxxxxxxxxxxxxx).", + "example": "idpc-xxxxxxxxxxxxxxxx" + }, + "type": { + "type": "string", + "enum": [ + "saml-idp-certificates" + ] + }, + "attributes": { + "type": "object", + "properties": { + "display-name": { + "type": "string", + "description": "A human-readable label for this certificate.", + "example": "Primary IdP Cert" + }, + "cert": { + "type": "string", + "description": "PEM-encoded X.509 certificate body." + }, + "fingerprint": { + "type": "string", + "readOnly": true, + "description": "Colon-separated uppercase SHA-256 fingerprint of the certificate.", + "example": "AB:CD:EF:..." + }, + "expires-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true, + "description": "ISO 8601 datetime (UTC) when the certificate expires." + }, + "created-at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "ISO 8601 datetime (UTC) when this record was created." + }, + "cert-role": { + "type": "string", + "readOnly": true, + "description": "Internal role of this certificate. `managed` certificates are created and deleted through the idp-certificates API. `legacy_primary` and `legacy_old` certificates are managed via the deprecated `idp-cert` / `old-idp-cert` attributes on the SAML settings resource and cannot have their cert body replaced through this API.\n", + "enum": [ + "managed", + "legacy_primary", + "legacy_old" + ] + }, + "issuer": { + "type": "string", + "nullable": true, + "readOnly": true, + "description": "Human-readable issuer string derived from the O and CN fields of the certificate." + } + } + } + } + }, + "saml-idp-certificates-collection-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/saml-idp-certificates" + } + } + } + }, + "saml-idp-certificates-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/saml-idp-certificates" + } + } + }, + "admin-customization-settings": { + "type": "object", + "required": [ + "type", + "id", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true, + "description": "Always \"customization\"." + }, + "type": { + "type": "string", + "enum": [ + "customization-settings" + ] + }, + "attributes": { + "type": "object", + "properties": { + "support-email-address": { + "type": "string", + "nullable": true, + "description": "The support email address shown in help text on the site. When set, it is rendered as a mailto: link in the support link chain.\n" + }, + "support-url-address": { + "type": "string", + "description": "The support URL shown in help text on the site. Used as the fallback when support-email-address is not set.\n" + }, + "login-help": { + "type": "string", + "nullable": true, + "x-vis": [ + "tfe" + ], + "description": "HTML that overrides the default help text below the login form.\n\nThis attribute is only available in Terraform Enterprise." + }, + "footer": { + "type": "string", + "nullable": true, + "x-vis": [ + "tfe" + ], + "description": "HTML rendered just above the copyright/release in the application footer.\n\n\nThis attribute is only available in Terraform Enterprise." + }, + "error": { + "type": "string", + "nullable": true, + "x-vis": [ + "tfe" + ], + "description": "HTML that overrides the default error instructions.\n\nThis attribute is only available in Terraform Enterprise." + }, + "new-user": { + "type": "string", + "nullable": true, + "x-vis": [ + "tfe" + ], + "description": "HTML shown to users when they first create an account.\n\nThis attribute is only available in Terraform Enterprise." + }, + "internal-support-url": { + "type": "string", + "nullable": true, + "maxLength": 2048, + "x-vis": [ + "tfe" + ], + "description": "Overrides the default support links in the TFE UI (Help menu, error pages, welcome page). Accepts https://, http://, or mailto: schemes. Leave blank to restore the default HashiCorp support link resolution chain.\n\n\nThis attribute is only available in Terraform Enterprise." + }, + "internal-documentation-url": { + "type": "string", + "nullable": true, + "maxLength": 2048, + "x-vis": [ + "tfe" + ], + "description": "Overrides documentation links in the TFE UI (Help menu). Accepts https:// or http:// only. Leave blank to use the default HashiCorp documentation URL.\n\n\nThis attribute is only available in Terraform Enterprise." + }, + "internal-tutorials-url": { + "type": "string", + "nullable": true, + "maxLength": 2048, + "x-vis": [ + "tfe" + ], + "description": "Overrides tutorial links in the TFE UI (Help > Tutorials). Accepts https:// or http:// only. Leave blank to use the default HashiCorp tutorials URL.\n\n\nThis attribute is only available in Terraform Enterprise." + }, + "avatar-sources": { + "type": "array", + "nullable": true, + "x-vis": [ + "tfe" + ], + "description": "Ordered catalog of configurable avatar sources with enabled/disabled flags. Initials is the implicit terminal fallback and is not included. PATCH accepts the same array format and performs a full replacement.\n\n\nThis attribute is only available in Terraform Enterprise.", + "items": { + "type": "object", + "required": [ + "source", + "enabled" + ], + "properties": { + "source": { + "type": "string", + "enum": [ + "gravatar" + ], + "description": "The name of the avatar source." + }, + "enabled": { + "type": "boolean", + "description": "Whether the source is active." + } + } + } + } + } + } + } + }, + "admin-customization-settings-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/admin-customization-settings" + } + } + }, + "authenticated-resource-identifier": { + "type": "object", + "required": [ + "id", + "type" + ], + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "organizations", + "runs", + "users", + "teams" + ] + } + } + }, + "authenticated-resource-has-one": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/authenticated-resource-identifier" + }, + "links": { + "$ref": "#/components/schemas/related" + } + } + }, + "self": { + "type": "object", + "properties": { + "self": { + "type": "string" + } + } + }, + "users": { + "type": "object", + "required": [ + "id", + "type", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "enum": [ + "users" + ] + }, + "attributes": { + "type": "object", + "properties": { + "username": { + "type": "string", + "nullable": true + }, + "display-name": { + "description": "Human-readable display name for the user.", + "type": "string", + "readOnly": true, + "nullable": true + }, + "is-service-account": { + "description": "Indicates whether this user is a synthetic user representing a team or organization.", + "type": "boolean" + }, + "avatar-url": { + "type": "string", + "nullable": true, + "description": "Gravatar URL for the user. Null in TFE when an admin has disabled Gravatar via the avatar_sources setting." + }, + "initials": { + "type": "string", + "readOnly": true, + "description": "TFE only. Backend-computed initials derived from the user's username, or email local part as a fallback. At most two characters. Returns \"?\" when neither is available." + }, + "avatar-color-index": { + "type": "integer", + "readOnly": true, + "description": "TFE only. Stable index into the frontend avatar fallback colour palette, derived from the user's external ID. Colour uniqueness across users is not guaranteed." + }, + "auth-method": { + "type": "string" + }, + "v2-only": { + "type": "boolean" + }, + "is-admin": { + "type": "boolean" + }, + "is-site-admin": { + "description": "Deprecated. Use is-admin.", + "type": "boolean" + }, + "is-sso-login": { + "type": "boolean" + }, + "is-confirmed": { + "type": "boolean" + }, + "is-unified": { + "type": "boolean" + }, + "is-sudo": { + "type": "boolean" + }, + "email": { + "type": "string" + }, + "unconfirmed-email": { + "type": "string", + "nullable": true + }, + "password": { + "type": "string", + "nullable": true + }, + "enterprise-support": { + "type": "boolean" + }, + "has-linked-hcp": { + "type": "boolean" + }, + "has-git-hub-app-token": { + "type": "boolean" + }, + "two-factor": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "verified": { + "type": "boolean" + } + } + }, + "permissions": { + "type": "object", + "properties": { + "can-create-organization": { + "type": "boolean" + }, + "can-view-organizations": { + "type": "boolean" + }, + "can-view-settings": { + "type": "boolean" + }, + "can-view-smtp-settings": { + "type": "boolean" + }, + "can-view-twilio-settings": { + "type": "boolean" + }, + "can-view-saml-settings": { + "type": "boolean" + }, + "can-view-admin-workspaces": { + "type": "boolean" + }, + "can-view-admin-runs": { + "type": "boolean" + }, + "can-view-customization-settings": { + "type": "boolean" + }, + "can-view-cost-estimation-settings": { + "type": "boolean" + }, + "can-view-tool-versions": { + "type": "boolean" + }, + "can-create-tool-versions": { + "type": "boolean" + }, + "can-view-general-settings": { + "type": "boolean" + }, + "can-use-sql-runner": { + "type": "boolean" + }, + "can-view-profile": { + "type": "boolean" + }, + "can-change-email": { + "type": "boolean" + }, + "can-change-username": { + "type": "boolean" + }, + "can-change-password": { + "type": "boolean" + }, + "can-manage-sessions": { + "type": "boolean" + }, + "can-manage-user-tokens": { + "type": "boolean" + }, + "can-update-user": { + "type": "boolean" + }, + "can-reenable-2fa-by-unlinking": { + "type": "boolean", + "x-vis": [ + "hcpt" + ], + "description": "This attribute is only available in HCP Terraform." + }, + "can-manage-hcp-accounts": { + "type": "boolean", + "x-vis": [ + "hcpt" + ], + "description": "This attribute is only available in HCP Terraform." + } + } + } + } + }, + "relationships": { + "type": "object", + "properties": { + "authentication-tokens": { + "$ref": "#/components/schemas/links_related" + }, + "github-app-oauth-tokens": { + "$ref": "#/components/schemas/links_related" + }, + "authenticated-resource": { + "$ref": "#/components/schemas/authenticated-resource-has-one" + } + } + }, + "links": { + "$ref": "#/components/schemas/self" + } + } + }, + "users-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/users" + } + } + }, + "feature-sets-identifier": { + "type": "object", + "required": [ + "id", + "type" + ], + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "feature-sets" + ] + } + } + }, + "feature-sets-has-many": { + "type": "object", + "nullable": true, + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/feature-sets-identifier" + } + } + } + }, + "hcp-organization": { + "type": "object", + "required": [ + "id", + "type", + "attributes", + "relationships" + ], + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "hcp-organization" + ] + }, + "attributes": { + "type": "object", + "required": [ + "name", + "is-hcp-admin" + ], + "properties": { + "name": { + "type": "string" + }, + "hcp-owner-email": { + "type": "string", + "nullable": true + }, + "is-hcp-admin": { + "type": "boolean" + } + } + }, + "relationships": { + "type": "object", + "required": [ + "connected-plans" + ], + "properties": { + "connected-plans": { + "$ref": "#/components/schemas/feature-sets-has-many" + } + } + } + } + }, + "hcp-organization-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/hcp-organization" + } + } + }, + "feature-sets": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the feature set" + }, + "type": { + "type": "string", + "enum": [ + "feature-sets" + ] + }, + "attributes": { + "type": "object", + "properties": { + "assessments": { + "type": "boolean", + "description": "Whether the feature set includes assessments" + }, + "audit-logging": { + "type": "boolean", + "description": "Whether the feature set includes audit logging" + }, + "can-self-service-downgrade": { + "type": "boolean", + "description": "Whether the organization can self-service downgrade from this feature set" + }, + "change-requests": { + "type": "boolean", + "description": "Whether the feature set includes change requests" + }, + "cost": { + "type": "number", + "description": "The cost of the feature set in cents" + }, + "cost-estimation": { + "type": "boolean", + "description": "Whether the feature set includes cost estimation" + }, + "default-agents-ceiling": { + "type": "number", + "description": "Default maximum number of concurrent agents" + }, + "default-runs-ceiling": { + "type": "number", + "description": "Default maximum number of concurrent runs" + }, + "description": { + "type": "string", + "description": "Description of the feature set" + }, + "global-run-tasks": { + "type": "boolean", + "description": "Whether the feature set includes global run tasks" + }, + "hyok": { + "type": "boolean", + "description": "Whether the feature set includes Hold Your Own Key encryption" + }, + "identifier": { + "type": "string", + "description": "Unique identifier for the feature set" + }, + "terraform-actions": { + "type": "boolean", + "description": "Whether the feature set includes Terraform Actions features" + }, + "is-current": { + "type": "boolean", + "description": "Whether this is a current/active feature set" + }, + "is-free-tier": { + "type": "boolean", + "description": "Whether this is a free tier feature set" + }, + "is-managed-resource-plan": { + "type": "boolean", + "description": "Whether this is a managed resource plan" + }, + "module-deprecations": { + "type": "boolean", + "description": "Whether this feature set includes module deprecations" + }, + "module-revocations": { + "type": "boolean", + "description": "Whether this feature set includes module revocations" + }, + "module-tests-agent-support": { + "type": "boolean" + }, + "module-tests-generation": { + "type": "boolean", + "description": "Whether the feature set includes module test generation" + }, + "name": { + "type": "string", + "description": "Name of the feature set" + }, + "native-tasks": { + "type": "boolean", + "description": "Whether the feature set includes native tasks" + }, + "no-code-modules": { + "type": "boolean", + "description": "Whether the feature set includes no-code modules" + }, + "plan": { + "type": "string", + "nullable": true, + "description": "Associated plan ID" + }, + "policy-enforcement": { + "type": "boolean", + "description": "Whether the feature set includes policy enforcement" + }, + "policy-limit": { + "type": "number", + "nullable": true, + "description": "Maximum number of policies (null means unlimited)" + }, + "policy-mandatory-enforcement-limit": { + "type": "number", + "nullable": true, + "description": "Maximum number of mandatory enforcement policies (null means unlimited)" + }, + "policy-set-limit": { + "type": "number", + "nullable": true, + "description": "Maximum number of policy sets (null means unlimited)" + }, + "private-networking": { + "type": "boolean", + "description": "Whether the feature set includes private networking" + }, + "private-policy-agents": { + "type": "boolean", + "description": "Whether the feature set includes private policy agents" + }, + "private-run-tasks": { + "type": "boolean", + "description": "Whether the feature set includes private run tasks" + }, + "private-vcs": { + "type": "boolean", + "description": "Whether the feature set includes private VCS" + }, + "run-task-limit": { + "type": "number", + "nullable": true, + "description": "Maximum number of run tasks (null means unlimited)" + }, + "recoverable-items": { + "type": "boolean", + "description": "Whether the feature set allows enabling of recoverable items\n\nThis attribute is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "x-vis": [ + "public-beta" + ] + }, + "run-task-mandatory-enforcement-limit": { + "type": "number", + "nullable": true, + "description": "Maximum number of mandatory enforcement run tasks (null means unlimited)" + }, + "run-task-workspace-limit": { + "type": "number", + "nullable": true, + "description": "Maximum number of workspaces per run task (null means unlimited)" + }, + "run-tasks": { + "type": "boolean", + "description": "Whether the feature set includes run tasks" + }, + "self-serve-billing": { + "type": "boolean", + "description": "Whether the feature set supports self-serve billing" + }, + "sentinel": { + "type": "boolean", + "description": "Whether the feature set includes Sentinel (alias for policy-enforcement)" + }, + "sso": { + "type": "boolean", + "description": "Whether the feature set includes SSO" + }, + "stacks": { + "type": "boolean", + "description": "Whether the feature set includes stacks" + }, + "task-project-scoping": { + "type": "boolean", + "description": "Whether the feature set includes the ability to scope tasks to projects" + }, + "teams": { + "type": "boolean", + "description": "Whether the feature set includes teams" + }, + "tf-policy-init-enforcement": { + "type": "boolean", + "description": "Whether the feature set includes init-stage Terraform policy enforcement" + }, + "user-limit": { + "type": "number", + "nullable": true, + "description": "Maximum number of users (null means unlimited)" + }, + "uses-hcp-rum-billing-resource": { + "type": "boolean", + "description": "Whether the feature set uses HCP RUM billing resource" + }, + "versioned-policy-set-limit": { + "type": "number", + "nullable": true, + "description": "Maximum number of versioned policy sets (null means unlimited)" + }, + "waypoint-actions": { + "type": "boolean" + }, + "waypoint-templates-and-addons": { + "type": "boolean" + } + } + } + }, + "required": [ + "id", + "type", + "attributes" + ] + }, + "self-with-pagination": { + "type": "object", + "properties": { + "self": { + "type": "string" + }, + "first": { + "type": "string" + }, + "prev": { + "type": "string", + "nullable": true + }, + "next": { + "type": "string", + "nullable": true + }, + "last": { + "type": "string" + } + } + }, + "pagination": { + "type": "object", + "properties": { + "current-page": { + "type": "integer" + }, + "page-size": { + "type": "integer" + }, + "prev-page": { + "type": "integer", + "nullable": true + }, + "next-page": { + "type": "integer", + "nullable": true + }, + "total-pages": { + "type": "integer" + }, + "total-count": { + "type": "integer" + } + } + }, + "organizations-identifier": { + "type": "object", + "required": [ + "id", + "type" + ], + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "organizations" + ] + } + } + }, + "organizations-has-one": { + "type": "object", + "properties": { + "data": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/organizations-identifier" + } + ], + "nullable": true + }, + "links": { + "$ref": "#/components/schemas/related" + } + } + }, + "feature-sets-has-one": { + "type": "object", + "nullable": true, + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/feature-sets-identifier" + } + } + }, + "subscriptions-identifier": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "subscriptions" + ] + } + } + }, + "subscriptions-has-one": { + "type": "object", + "properties": { + "data": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/subscriptions-identifier" + } + ], + "nullable": true + }, + "links": { + "$ref": "#/components/schemas/related" + } + } + }, + "subscriptions": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "enum": [ + "subscriptions" + ] + }, + "attributes": { + "type": "object", + "properties": { + "end-at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "is-active": { + "type": "boolean" + }, + "start-at": { "type": "string", - "maxLength": 255, - "description": "Body text of the banner. Limited HTML is allowed: strong, em, b, i, and anchor tags with href. All other tags and attributes are stripped. Maximum 255 characters after sanitization.\n" + "format": "date-time", + "nullable": true + }, + "runs-ceiling": { + "type": "integer", + "nullable": true + }, + "agents-ceiling": { + "type": "integer", + "nullable": true + }, + "contract-start-at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "contract-user-limit": { + "type": "integer", + "nullable": true + }, + "contract-apply-limit": { + "type": "integer", + "nullable": true + }, + "contract-managed-resources-limit": { + "type": "integer", + "nullable": true + }, + "hcp-organization-id": { + "type": "string", + "nullable": true + }, + "hcp-project-id": { + "type": "string", + "nullable": true + }, + "run-task-limit": { + "type": "integer", + "nullable": true + }, + "run-task-workspace-limit": { + "type": "integer", + "nullable": true + }, + "run-task-mandatory-enforcement-limit": { + "type": "integer", + "nullable": true + }, + "versioned-policy-set-limit": { + "type": "integer", + "nullable": true + }, + "policy-set-limit": { + "type": "integer", + "nullable": true + }, + "policy-limit": { + "type": "integer", + "nullable": true + }, + "policy-mandatory-enforcement-limit": { + "type": "integer", + "nullable": true + }, + "is-public-free-tier": { + "type": "boolean" + }, + "is-self-serve-trial": { + "type": "boolean" + }, + "is-change-approved": { + "type": "boolean" + }, + "free-apply-monthly-limit-starts-at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "free-apply-monthly-limit": { + "type": "integer", + "nullable": true + }, + "free-apply-monthly-limit-remaining": { + "type": "integer", + "nullable": true + }, + "free-resource-under-management-monthly-limit": { + "type": "integer", + "nullable": true + }, + "rum-alert-threshold": { + "type": "integer", + "nullable": true, + "description": "The custom RUM usage alert threshold for the organization. When the organization's billable resource count meets or exceeds this value, an alert email is sent to org owners. Set to null to disable alerting. Only available on paid RUM plans.\n" + }, + "rum-threshold-alert-sent-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "description": "Timestamp of the last time a RUM usage threshold alert was sent for the current rum-alert-threshold. Null when no alert has been sent for the current threshold.\n" + } + } + }, + "relationships": { + "type": "object", + "required": [ + "organization", + "feature-set" + ], + "properties": { + "organization": { + "$ref": "#/components/schemas/organizations-has-one" + }, + "feature-set": { + "$ref": "#/components/schemas/feature-sets-has-one" + }, + "next-subscription": { + "$ref": "#/components/schemas/subscriptions-has-one" + } + } + } + } + }, + "subscriptions-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/subscriptions" + } + } + }, + "workspaces-identifier": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "workspaces" + ] + } + } + }, + "workspaces-has-many": { + "type": "object", + "nullable": true, + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/workspaces-identifier" + } + } + } + }, + "projects-identifier": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "projects" + ] + } + } + }, + "projects-has-many": { + "type": "object", + "nullable": true, + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/projects-identifier" + } + } + } + }, + "agent-pools": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "enum": [ + "agent-pools" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "created-at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "organization-scoped": { + "type": "boolean" + }, + "agent-count": { + "type": "integer", + "readOnly": true + } + } + }, + "links": { + "$ref": "#/components/schemas/self" + }, + "relationships": { + "type": "object", + "properties": { + "agents": { + "$ref": "#/components/schemas/links_related" + }, + "authentication-tokens": { + "$ref": "#/components/schemas/links_related" + }, + "workspaces": { + "$ref": "#/components/schemas/workspaces-has-many" + }, + "allowed-workspaces": { + "$ref": "#/components/schemas/workspaces-has-many" + }, + "allowed-projects": { + "$ref": "#/components/schemas/projects-has-many" + }, + "excluded-workspaces": { + "$ref": "#/components/schemas/workspaces-has-many" + }, + "organization": { + "$ref": "#/components/schemas/organizations-has-one" + } + } + } + } + }, + "agent-pools-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/agent-pools" + } + } + }, + "agents": { + "type": "object", + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "enum": [ + "agents" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "status": { + "type": "string" + }, + "ip-address": { + "type": "string", + "nullable": true + }, + "last-ping-at": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "created-at": { + "type": "string", + "format": "date-time", + "readOnly": true + } + } + } + } + }, + "agents-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/agents" + } + } + }, + "agent-pools-identifier": { + "type": "object", + "required": [ + "id", + "type" + ], + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "agent-pools" + ] + } + } + }, + "agent-pools-has-many": { + "type": "object", + "nullable": true, + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/agent-pools-identifier" + } + } + } + }, + "cidr-range-lists-identifier": { + "type": "object", + "required": [ + "id", + "type" + ], + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "cidr-range-lists" + ] + } + } + }, + "cidr-range-lists-has-one": { + "type": "object", + "nullable": true, + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/cidr-range-lists-identifier" + } + ], + "nullable": true + } + } + }, + "cidr-ranges": { + "type": "object", + "required": [ + "type" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "enum": [ + "cidr-ranges" + ] + }, + "attributes": { + "type": "object", + "required": [ + "range", + "enabled" + ], + "properties": { + "range": { + "type": "string" }, - "style": { + "description": { "type": "string", - "enum": [ - "info", - "warning", - "critical" - ], - "description": "Visual style controlling how the banner is rendered." + "nullable": true }, - "audience": { - "type": "string", - "enum": [ - "all_users", - "authenticated_only" - ], - "description": "Which users see the banner." + "enabled": { + "type": "boolean" }, - "scheduled-publish-at": { + "updated-at": { "type": "string", "format": "date-time", - "nullable": true, - "description": "ISO 8601 datetime (UTC) when the banner should become active. scheduled-publish-at, scheduled-expire-at, and timezone must all be provided together or all omitted. Providing only a subset is a validation error.\n" + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "$ref": "#/components/schemas/organizations-has-one" }, - "scheduled-expire-at": { - "type": "string", - "format": "date-time", - "nullable": true, - "description": "ISO 8601 datetime (UTC) when the banner should be automatically deactivated. Must be provided together with scheduled-publish-at and timezone.\n" + "cidr-range-list": { + "$ref": "#/components/schemas/cidr-range-lists-has-one" + } + } + } + } + }, + "cidr-ranges-envelope-many": { + "type": "object", + "nullable": true, + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/cidr-ranges" + } + } + } + }, + "cidr-range-lists": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "enum": [ + "cidr-range-lists" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string" }, - "timezone": { - "type": "string", - "nullable": true, - "description": "IANA timezone identifier for the scheduled times (e.g. \"America/New_York\", \"UTC\"). Required when scheduled-publish-at and scheduled-expire-at are provided. Used by the UI to display the schedule in the administrator's local timezone; stored and returned as-is.\n" + "description": { + "type": "string" }, - "published-at": { + "enforcement-scope": { "type": "string", - "format": "date-time", - "nullable": true, - "readOnly": true, - "description": "Set automatically when the banner is created without a schedule, or when the scheduled publish time is reached.\n" + "enum": [ + "organization", + "all_agent_pools", + "selected_agent_pools" + ] }, - "deactivated-at": { + "updated-at": { "type": "string", "format": "date-time", - "nullable": true, - "readOnly": true, - "description": "Set when the banner is deactivated, either because a newer banner was created or because the scheduled expiry time was reached.\n" + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "$ref": "#/components/schemas/organizations-has-one" + }, + "agent-pools": { + "$ref": "#/components/schemas/agent-pools-has-many" + }, + "cidr-ranges": { + "$ref": "#/components/schemas/cidr-ranges-envelope-many" } } } } }, - "admin-banners-envelope": { + "cidr-range-list-envelope": { "type": "object", "required": [ "data" ], "properties": { "data": { - "$ref": "#/components/schemas/admin-banners" + "$ref": "#/components/schemas/cidr-range-lists" } } }, - "errors": { + "cidr-ranges-envelope": { "type": "object", + "required": [ + "data" + ], "properties": { - "errors": { + "data": { + "$ref": "#/components/schemas/cidr-ranges" + } + } + }, + "agent-pool-ids": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { "type": "array", "items": { "type": "object", + "required": [ + "id", + "type" + ], "properties": { - "status": { - "type": "string" - }, - "title": { + "id": { "type": "string" }, - "detail": { - "type": "string" + "type": { + "type": "string", + "enum": [ + "agent-pools" + ] } } } } } }, - "related": { + "metrics-token": { "type": "object", + "required": [ + "type", + "attributes" + ], "properties": { - "related": { - "type": "string" + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "enum": [ + "metrics-tokens" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the token." + }, + "token-id": { + "type": "string", + "readOnly": true, + "description": "The ID of the token." + }, + "created-at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "The time when the token was created." + }, + "expires-at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "nullable": true, + "description": "The time when the token expires." + }, + "token": { + "type": "string", + "readOnly": true, + "nullable": true, + "description": "The secret text of the new authentication token. Only returned when the token is created." + } + } } } }, - "links_related": { + "projects-has-one": { "type": "object", "properties": { + "data": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/projects-identifier" + } + ], + "nullable": true + }, "links": { "$ref": "#/components/schemas/related" } } }, - "authenticated-resource-identifier": { + "agent-pools-has-one": { + "type": "object", + "nullable": true, + "required": [ + "data" + ], + "properties": { + "data": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/agent-pools-identifier" + } + ], + "nullable": true + } + } + }, + "stack-configurations-identifier": { "type": "object", "required": [ "id", @@ -23173,37 +32402,28 @@ "type": { "type": "string", "enum": [ - "organizations", - "runs", - "users", - "teams" + "stack-configurations" ] } } }, - "authenticated-resource-has-one": { + "stack-configurations-has-one": { "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/authenticated-resource-identifier" - }, - "links": { - "$ref": "#/components/schemas/related" - } - } - }, - "self": { - "type": "object", - "properties": { - "self": { - "type": "string" + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/stack-configurations-identifier" + } + ], + "nullable": true } } }, - "users": { + "stacks": { "type": "object", "required": [ - "id", "type", "attributes" ], @@ -23214,160 +32434,249 @@ }, "type": { "type": "string", + "readOnly": true, "enum": [ - "users" + "stacks" ] }, "attributes": { "type": "object", "properties": { - "username": { + "name": { + "type": "string" + }, + "description": { "type": "string", "nullable": true }, - "is-service-account": { - "description": "Indicates whether this user is a synthetic user representing a team or organization.", - "type": "boolean" - }, - "avatar-url": { + "working-directory": { "type": "string", + "maxLength": 100, "nullable": true }, - "auth-method": { - "type": "string" - }, - "v2-only": { - "type": "boolean" - }, - "is-admin": { - "type": "boolean" - }, - "is-site-admin": { - "description": "Deprecated. Use is-admin.", - "type": "boolean" - }, - "is-sso-login": { - "type": "boolean" + "deleteable": { + "type": "boolean", + "readOnly": true }, - "is-confirmed": { - "type": "boolean" + "speculative-enabled": { + "type": "boolean", + "default": false }, - "is-unified": { - "type": "boolean" + "upstream-count": { + "type": "integer", + "readOnly": true }, - "is-sudo": { - "type": "boolean" + "downstream-count": { + "type": "integer", + "readOnly": true }, - "email": { - "type": "string" + "inputs-count": { + "type": "integer", + "readOnly": true }, - "unconfirmed-email": { - "type": "string", - "nullable": true + "outputs-count": { + "type": "integer", + "readOnly": true }, - "password": { + "execution-mode": { "type": "string", - "nullable": true - }, - "enterprise-support": { - "type": "boolean" - }, - "has-linked-hcp": { - "type": "boolean" - }, - "has-git-hub-app-token": { - "type": "boolean" + "enum": [ + "remote", + "agent" + ] }, - "two-factor": { + "setting-overwrites": { "type": "object", "properties": { - "enabled": { + "execution-mode": { "type": "boolean" }, - "verified": { + "agent-pool": { "type": "boolean" } } }, - "permissions": { + "vcs-repo": { "type": "object", + "nullable": true, "properties": { - "can-create-organization": { - "type": "boolean" - }, - "can-view-organizations": { - "type": "boolean" - }, - "can-view-settings": { - "type": "boolean" + "branch": { + "type": "string", + "nullable": true }, - "can-view-smtp-settings": { - "type": "boolean" + "tags-regex": { + "type": "string", + "nullable": true }, - "can-view-twilio-settings": { - "type": "boolean" + "identifier": { + "type": "string" }, - "can-view-saml-settings": { - "type": "boolean" + "display-identifier": { + "type": "string" }, - "can-view-admin-workspaces": { - "type": "boolean" + "oauth-token-id": { + "type": "string", + "nullable": true }, - "can-view-admin-runs": { - "type": "boolean" + "repository-http-url": { + "type": "string", + "nullable": true }, - "can-view-customization-settings": { - "type": "boolean" + "service-provider": { + "type": "string", + "nullable": true }, - "can-view-cost-estimation-settings": { + "trigger-disabled": { "type": "boolean" + } + } + }, + "created-at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated-at": { + "type": "string", + "format": "date-time", + "readOnly": true + } + } + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string" + }, + "latest-output-summary": { + "type": "string" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "stack-configurations": { + "$ref": "#/components/schemas/links_related" + }, + "project": { + "$ref": "#/components/schemas/projects-has-one" + }, + "agent-pool": { + "$ref": "#/components/schemas/agent-pools-has-one" + }, + "latest-stack-configuration": { + "$ref": "#/components/schemas/stack-configurations-has-one" + } + } + } + } + }, + "stacks-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/stacks" + } + } + }, + "stack-configuration-summaries": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "readOnly": true, + "enum": [ + "stack-configuration-summaries" + ] + }, + "attributes": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "pending", + "queued", + "preparing", + "completed", + "failed" + ], + "readOnly": true + }, + "sequence-number": { + "type": "integer", + "readOnly": true + }, + "stack-deployment-group-status-summary": { + "type": "object", + "description": "Contains a count of the number of deployment groups in each state.", + "properties": { + "pending": { + "type": "integer" }, - "can-view-tool-versions": { - "type": "boolean" + "pre-deploying": { + "type": "integer" }, - "can-create-tool-versions": { - "type": "boolean" + "deploying": { + "type": "integer" }, - "can-view-general-settings": { - "type": "boolean" + "succeeded": { + "type": "integer" }, - "can-use-sql-runner": { - "type": "boolean" + "failed": { + "type": "integer" }, - "can-view-profile": { - "type": "boolean" + "abandoned": { + "type": "integer" + } + } + }, + "stack-deployment-run-status-summary": { + "type": "object", + "description": "Contains a count of the number of deployment runs in each state.", + "properties": { + "pending": { + "type": "integer" }, - "can-change-email": { - "type": "boolean" + "pending-capacity": { + "type": "integer" }, - "can-change-username": { - "type": "boolean" + "pre-deploying": { + "type": "integer" }, - "can-change-password": { - "type": "boolean" + "pre-deploying-pending-operator": { + "type": "integer" }, - "can-manage-sessions": { - "type": "boolean" + "acquiring-lock": { + "type": "integer" }, - "can-manage-user-tokens": { - "type": "boolean" + "deploying": { + "type": "integer" }, - "can-update-user": { - "type": "boolean" + "deploying-pending-operator": { + "type": "integer" }, - "can-reenable-2fa-by-unlinking": { - "type": "boolean", - "x-vis": [ - "hcpt" - ], - "description": "This attribute is only available in HCP Terraform." + "succeeded": { + "type": "integer" }, - "can-manage-hcp-accounts": { - "type": "boolean", - "x-vis": [ - "hcpt" - ], - "description": "This attribute is only available in HCP Terraform." + "failed": { + "type": "integer" + }, + "abandoned": { + "type": "integer" } } } @@ -23376,39 +32685,46 @@ "relationships": { "type": "object", "properties": { - "authentication-tokens": { - "$ref": "#/components/schemas/links_related" - }, - "github-app-oauth-tokens": { - "$ref": "#/components/schemas/links_related" - }, - "authenticated-resource": { - "$ref": "#/components/schemas/authenticated-resource-has-one" + "stack-configuration": { + "$ref": "#/components/schemas/stack-configurations-has-one" } } + } + } + }, + "stacks-identifier": { + "type": "object", + "properties": { + "id": { + "type": "string" }, - "links": { - "$ref": "#/components/schemas/self" + "type": { + "type": "string", + "enum": [ + "stacks" + ] } } }, - "users-envelope": { + "stacks-has-one": { "type": "object", - "required": [ - "data" - ], "properties": { "data": { - "$ref": "#/components/schemas/users" + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/stacks-identifier" + } + ], + "nullable": true + }, + "links": { + "$ref": "#/components/schemas/related" } } }, - "hcp-billing-accounts-identifier": { + "ingress-attributes-identifier": { "type": "object", - "required": [ - "id", - "type" - ], "properties": { "id": { "type": "string" @@ -23416,23 +32732,29 @@ "type": { "type": "string", "enum": [ - "hcp-billing-account" + "ingress-attributes" ] } } }, - "hcp-billing-accounts-has-one": { + "ingress-attributes-has-one": { "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/hcp-billing-accounts-identifier" + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/ingress-attributes-identifier" + } + ], + "nullable": true }, "links": { "$ref": "#/components/schemas/related" } } }, - "feature-sets-identifier": { + "stack-configuration-summaries-identifier": { "type": "object", "required": [ "id", @@ -23445,435 +32767,255 @@ "type": { "type": "string", "enum": [ - "feature-sets" + "stack-configuration-summaries" ] } } }, - "feature-sets-has-many": { + "stack-configuration-summaries-has-one": { "type": "object", - "nullable": true, "properties": { "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/feature-sets-identifier" - } + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/stack-configuration-summaries-identifier" + } + ], + "nullable": true } } }, - "hcp-organization": { + "stack-aggregate-outputs-identifier": { "type": "object", "required": [ "id", - "type", - "attributes", - "relationships" + "type" ], "properties": { "id": { "type": "string" }, "type": { - "type": "string" - }, - "attributes": { - "type": "object", - "required": [ - "name", - "is-hcp-admin" - ], - "properties": { - "name": { - "type": "string" - }, - "hcp-owner-email": { - "type": "string", - "nullable": true - }, - "is-hcp-admin": { - "type": "boolean" - } - } - }, - "relationships": { - "type": "object", - "required": [ - "default-account", - "connected-plans" - ], - "properties": { - "default-account": { - "$ref": "#/components/schemas/hcp-billing-accounts-has-one" - }, - "connected-plans": { - "$ref": "#/components/schemas/feature-sets-has-many" - } - } + "type": "string", + "enum": [ + "stack-aggregate-outputs" + ] } } }, - "hcp-organization-envelope": { + "stack-aggregate-outputs-has-one": { "type": "object", - "required": [ - "data" - ], "properties": { "data": { - "$ref": "#/components/schemas/hcp-organization" + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/stack-aggregate-outputs-identifier" + } + ], + "nullable": true } } }, - "hcp-billing-account": { + "stack-configurations": { "type": "object", "required": [ - "id", "type", "attributes" ], "properties": { "id": { - "type": "string" + "type": "string", + "readOnly": true }, "type": { - "type": "string" + "type": "string", + "readOnly": true, + "enum": [ + "stack-configurations" + ] }, "attributes": { "type": "object", - "required": [ - "project-id", - "hcp-organization-name", - "hcp-organization-id", - "balance", - "card-brand", - "card-last4", - "card-exp-month", - "card-exp-year", - "account-type", - "status", - "payment-provider" - ], "properties": { - "project-id": { - "type": "string" + "status": { + "type": "string", + "enum": [ + "pending", + "queued", + "preparing", + "completed", + "failed" + ], + "readOnly": true }, - "hcp-organization-name": { - "type": "string" + "sequence-number": { + "type": "integer", + "nullable": true, + "readOnly": true }, - "hcp-organization-id": { - "type": "string" + "speculative": { + "type": "boolean", + "nullable": false, + "default": false, + "description": "Specifies if this is a speculative configuration that HCP Terraform cannot converge past the plan step." + }, + "destroy-all": { + "type": "boolean", + "nullable": false, + "default": false, + "description": "If true, the created configuration will behave as though every deployment in the configuration was declared with `destroy = true`." }, - "balance": { - "type": "number" + "preparing-event-stream-url": { + "type": "string", + "readOnly": true }, - "card-brand": { + "created-at": { "type": "string", - "nullable": true + "format": "date-time", + "readOnly": true }, - "card-last4": { + "updated-at": { "type": "string", - "nullable": true + "format": "date-time", + "readOnly": true + } + } + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "stack-deployment-groups": { + "$ref": "#/components/schemas/links_related" }, - "card-exp-month": { - "type": "integer", - "nullable": true + "stack-diagnostics": { + "$ref": "#/components/schemas/links_related" }, - "card-exp-year": { - "type": "integer", - "nullable": true + "stack-published-outputs": { + "$ref": "#/components/schemas/links_related" }, - "account-type": { - "type": "string" + "stack": { + "$ref": "#/components/schemas/stacks-has-one" }, - "status": { - "type": "string" + "ingress-attributes": { + "$ref": "#/components/schemas/ingress-attributes-has-one" }, - "payment-provider": { - "type": "string", - "nullable": true + "stack-configuration-summary": { + "description": "Contains summed status counts for the deployment groups and deployment runs in this configuration.", + "$ref": "#/components/schemas/stack-configuration-summaries-has-one" }, - "is-payment-method-configured": { - "type": "boolean" + "group-status-summaries": { + "description": "Deprecated alias for stack-configuration-summary.", + "$ref": "#/components/schemas/stack-configuration-summaries-has-one" }, - "flex-version": { - "type": "string", - "nullable": true + "stack-aggregate-outputs": { + "$ref": "#/components/schemas/stack-aggregate-outputs-has-one" } } } } }, - "feature-sets": { + "stack-configurations-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/stack-configurations" + } + } + }, + "stack-deployments": { "type": "object", + "required": [ + "type", + "attributes" + ], "properties": { "id": { "type": "string", - "description": "The ID of the feature set" + "readOnly": true }, "type": { "type": "string", + "readOnly": true, "enum": [ - "feature-sets" + "stack-deployments" ] }, "attributes": { "type": "object", "properties": { - "assessments": { - "type": "boolean", - "description": "Whether the feature set includes assessments" - }, - "audit-logging": { - "type": "boolean", - "description": "Whether the feature set includes audit logging" - }, - "can-self-service-downgrade": { - "type": "boolean", - "description": "Whether the organization can self-service downgrade from this feature set" - }, - "change-requests": { - "type": "boolean", - "description": "Whether the feature set includes change requests" - }, - "cost": { - "type": "number", - "description": "The cost of the feature set in cents" - }, - "cost-estimation": { - "type": "boolean", - "description": "Whether the feature set includes cost estimation" - }, - "default-agents-ceiling": { - "type": "number", - "description": "Default maximum number of concurrent agents" - }, - "default-runs-ceiling": { - "type": "number", - "description": "Default maximum number of concurrent runs" - }, - "description": { - "type": "string", - "description": "Description of the feature set" - }, - "global-run-tasks": { - "type": "boolean", - "description": "Whether the feature set includes global run tasks" - }, - "hyok": { - "type": "boolean", - "description": "Whether the feature set includes Hold Your Own Key encryption" - }, - "identifier": { - "type": "string", - "description": "Unique identifier for the feature set" - }, - "terraform-actions": { - "type": "boolean", - "description": "Whether the feature set includes Terraform Actions features" - }, - "is-current": { - "type": "boolean", - "description": "Whether this is a current/active feature set" - }, - "is-free-tier": { - "type": "boolean", - "description": "Whether this is a free tier feature set" - }, - "is-managed-resource-plan": { - "type": "boolean", - "description": "Whether this is a managed resource plan" - }, - "module-deprecations": { - "type": "boolean", - "description": "Whether this feature set includes module deprecations" - }, - "module-revocations": { - "type": "boolean", - "description": "Whether this feature set includes module revocations" - }, - "module-tests-agent-support": { - "type": "boolean" - }, - "module-tests-generation": { - "type": "boolean", - "description": "Whether the feature set includes module test generation" - }, "name": { - "type": "string", - "description": "Name of the feature set" - }, - "no-code-modules": { - "type": "boolean", - "description": "Whether the feature set includes no-code modules" - }, - "plan": { - "type": "string", - "nullable": true, - "description": "Associated plan ID" - }, - "policy-enforcement": { - "type": "boolean", - "description": "Whether the feature set includes policy enforcement" - }, - "policy-limit": { - "type": "number", - "nullable": true, - "description": "Maximum number of policies (null means unlimited)" - }, - "policy-mandatory-enforcement-limit": { - "type": "number", - "nullable": true, - "description": "Maximum number of mandatory enforcement policies (null means unlimited)" - }, - "policy-set-limit": { - "type": "number", - "nullable": true, - "description": "Maximum number of policy sets (null means unlimited)" - }, - "private-networking": { - "type": "boolean", - "description": "Whether the feature set includes private networking" - }, - "private-policy-agents": { - "type": "boolean", - "description": "Whether the feature set includes private policy agents" - }, - "private-run-tasks": { - "type": "boolean", - "description": "Whether the feature set includes private run tasks" - }, - "private-vcs": { - "type": "boolean", - "description": "Whether the feature set includes private VCS" - }, - "run-task-limit": { - "type": "number", - "nullable": true, - "description": "Maximum number of run tasks (null means unlimited)" - }, - "recoverable-items": { - "type": "boolean", - "description": "Whether the feature set allows enabling of recoverable items\n\nThis attribute is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", - "x-vis": [ - "public-beta" - ] - }, - "run-task-mandatory-enforcement-limit": { - "type": "number", - "nullable": true, - "description": "Maximum number of mandatory enforcement run tasks (null means unlimited)" - }, - "run-task-workspace-limit": { - "type": "number", - "nullable": true, - "description": "Maximum number of workspaces per run task (null means unlimited)" - }, - "run-tasks": { - "type": "boolean", - "description": "Whether the feature set includes run tasks" - }, - "self-serve-billing": { - "type": "boolean", - "description": "Whether the feature set supports self-serve billing" - }, - "sentinel": { - "type": "boolean", - "description": "Whether the feature set includes Sentinel (alias for policy-enforcement)" - }, - "sso": { - "type": "boolean", - "description": "Whether the feature set includes SSO" - }, - "stacks": { - "type": "boolean", - "description": "Whether the feature set includes stacks" - }, - "teams": { - "type": "boolean", - "description": "Whether the feature set includes teams" - }, - "user-limit": { - "type": "number", - "nullable": true, - "description": "Maximum number of users (null means unlimited)" - }, - "uses-hcp-rum-billing-resource": { - "type": "boolean", - "description": "Whether the feature set uses HCP RUM billing resource" - }, - "versioned-policy-set-limit": { - "type": "number", - "nullable": true, - "description": "Maximum number of versioned policy sets (null means unlimited)" - }, - "waypoint-actions": { - "type": "boolean" + "type": "string" + } + } + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string" }, - "waypoint-templates-and-addons": { - "type": "boolean" + "stack-deployment-runs": { + "type": "string" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "stack": { + "$ref": "#/components/schemas/stacks-has-one" } } } - }, - "required": [ - "id", - "type", - "attributes" - ] + } }, - "self-with-pagination": { + "stack-deployment-groups-identifier": { "type": "object", + "required": [ + "id", + "type" + ], "properties": { - "self": { - "type": "string" - }, - "first": { + "id": { "type": "string" }, - "prev": { - "type": "string", - "nullable": true - }, - "next": { + "type": { "type": "string", - "nullable": true - }, - "last": { - "type": "string" + "enum": [ + "stack-deployment-groups" + ] } } }, - "pagination": { + "stack-deployment-groups-has-one": { "type": "object", "properties": { - "current-page": { - "type": "integer" - }, - "page-size": { - "type": "integer" - }, - "prev-page": { - "type": "integer", - "nullable": true - }, - "next-page": { - "type": "integer", - "nullable": true - }, - "total-pages": { - "type": "integer" - }, - "total-count": { - "type": "integer" + "data": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/stack-deployment-groups-identifier" + } + ], + "nullable": true } } }, - "organizations-identifier": { + "stack-approvals-identifier": { "type": "object", - "required": [ - "id", - "type" - ], "properties": { "id": { "type": "string" @@ -23881,42 +33023,63 @@ "type": { "type": "string", "enum": [ - "organizations" + "stack-approvals" ] } } }, - "organizations-has-one": { + "stack-approvals-has-one": { "type": "object", "properties": { "data": { "type": "object", "allOf": [ { - "$ref": "#/components/schemas/organizations-identifier" + "$ref": "#/components/schemas/stack-approvals-identifier" } ], "nullable": true - }, - "links": { - "$ref": "#/components/schemas/related" } } }, - "feature-sets-has-one": { + "stack-deployment-steps-identifier": { "type": "object", - "nullable": true, "required": [ - "data" + "id", + "type" ], + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "stack-deployment-steps" + ] + } + } + }, + "stack-deployment-steps-has-one": { + "type": "object", "properties": { "data": { - "$ref": "#/components/schemas/feature-sets-identifier" + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/stack-deployment-steps-identifier" + } + ], + "nullable": true } } }, - "subscriptions-identifier": { + "stack-deployment-runs-identifier": { "type": "object", + "required": [ + "id", + "type" + ], "properties": { "id": { "type": "string" @@ -23924,29 +33087,27 @@ "type": { "type": "string", "enum": [ - "subscriptions" + "stack-deployment-runs", + "stack-states" ] } } }, - "subscriptions-has-one": { + "stack-deployment-runs-has-one": { "type": "object", "properties": { "data": { "type": "object", "allOf": [ { - "$ref": "#/components/schemas/subscriptions-identifier" + "$ref": "#/components/schemas/stack-deployment-runs-identifier" } ], "nullable": true - }, - "links": { - "$ref": "#/components/schemas/related" } } }, - "subscriptions": { + "stack-deployment-runs": { "type": "object", "required": [ "type", @@ -23959,233 +33120,621 @@ }, "type": { "type": "string", + "readOnly": true, "enum": [ - "subscriptions" + "stack-deployment-runs" ] }, "attributes": { "type": "object", "properties": { - "end-at": { + "plan-mode": { + "type": "string", + "enum": [ + "normal", + "destroy", + "import" + ], + "readOnly": true + }, + "deployment": { + "type": "string", + "readOnly": true + }, + "status": { + "type": "string", + "enum": [ + "pending", + "pending-capacity", + "pre-deploying", + "pre-deploying-pending-operator", + "acquiring-lock", + "deploying", + "deploying-pending-operator", + "succeeded", + "failed", + "abandoned" + ], + "readOnly": true + }, + "created-at": { "type": "string", "format": "date-time", - "nullable": true + "readOnly": true }, - "is-active": { - "type": "boolean" + "updated-at": { + "type": "string", + "format": "date-time", + "readOnly": true }, - "start-at": { + "pre-deploying-at": { "type": "string", "format": "date-time", - "nullable": true + "nullable": true, + "readOnly": true }, - "runs-ceiling": { - "type": "integer", - "nullable": true + "pre-deploying-pending-operator-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true }, - "agents-ceiling": { - "type": "integer", - "nullable": true + "pending-capacity-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true }, - "contract-start-at": { + "acquiring-lock-at": { "type": "string", "format": "date-time", - "nullable": true + "nullable": true, + "readOnly": true }, - "contract-user-limit": { - "type": "integer", - "nullable": true + "deploying-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true }, - "contract-apply-limit": { - "type": "integer", - "nullable": true + "deploying-pending-operator-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true }, - "contract-managed-resources-limit": { - "type": "integer", - "nullable": true + "succeeded-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true }, - "hcp-organization-id": { + "failed-at": { "type": "string", - "nullable": true + "format": "date-time", + "nullable": true, + "readOnly": true }, - "hcp-project-id": { + "abandoned-at": { "type": "string", - "nullable": true + "format": "date-time", + "nullable": true, + "readOnly": true }, - "run-task-limit": { - "type": "integer", - "nullable": true + "eligible-for-rerun": { + "type": "boolean", + "readOnly": true + } + } + }, + "links": { + "$ref": "#/components/schemas/self" + }, + "relationships": { + "type": "object", + "properties": { + "stack-deployment-steps": { + "$ref": "#/components/schemas/links_related" }, - "run-task-workspace-limit": { - "type": "integer", - "nullable": true + "stack-deployment-group": { + "$ref": "#/components/schemas/stack-deployment-groups-has-one" }, - "run-task-mandatory-enforcement-limit": { - "type": "integer", - "nullable": true + "stack-configuration": { + "$ref": "#/components/schemas/stack-configurations-has-one" }, - "versioned-policy-set-limit": { - "type": "integer", - "nullable": true + "destroy-stack-configuration": { + "$ref": "#/components/schemas/stack-configurations-has-one" }, - "policy-set-limit": { - "type": "integer", - "nullable": true + "stack-approval": { + "$ref": "#/components/schemas/stack-approvals-has-one" }, - "policy-limit": { - "type": "integer", - "nullable": true + "current-step": { + "$ref": "#/components/schemas/stack-deployment-steps-has-one" }, - "policy-mandatory-enforcement-limit": { - "type": "integer", - "nullable": true + "blocked-by-deployment-group": { + "$ref": "#/components/schemas/stack-deployment-groups-has-one" }, - "is-public-free-tier": { - "type": "boolean" + "latest-deployment-run-for-deployment": { + "$ref": "#/components/schemas/stack-deployment-runs-has-one" }, - "is-self-serve-trial": { - "type": "boolean" + "rollbacked-state": { + "$ref": "#/components/schemas/stack-deployment-runs-has-one" + } + } + } + } + }, + "stack-states": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "readOnly": true, + "enum": [ + "stack-states" + ] + }, + "attributes": { + "type": "object", + "required": [ + "deployment" + ], + "properties": { + "generation": { + "type": "integer", + "nullable": true, + "readOnly": true }, - "is-change-approved": { - "type": "boolean" + "deployment": { + "type": "string" }, - "free-apply-monthly-limit-starts-at": { + "status": { "type": "string", - "format": "date-time", - "nullable": true - }, - "free-apply-monthly-limit": { - "type": "integer", - "nullable": true + "readOnly": true, + "enum": [ + "created", + "stored", + "completed", + "discarded" + ] }, - "free-apply-monthly-limit-remaining": { - "type": "integer", - "nullable": true + "components": { + "type": "array", + "nullable": true, + "readOnly": true, + "items": { + "type": "object", + "properties": { + "address": { + "type": "string" + }, + "component-address": { + "type": "string" + }, + "instance-correlator": { + "type": "string" + }, + "component-correlator": { + "type": "string" + }, + "resource-instance-count": { + "type": "integer" + } + } + } }, - "free-resource-under-management-monthly-limit": { - "type": "integer", - "nullable": true + "is-current": { + "type": "boolean", + "readOnly": true }, - "rum-alert-threshold": { + "resource-instance-count": { "type": "integer", "nullable": true, - "description": "The custom RUM usage alert threshold for the organization. When the organization's billable resource count meets or exceeds this value, an alert email is sent to org owners. Set to null to disable alerting. Only available on paid RUM plans.\n" + "readOnly": true + } + } + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string" }, - "rum-threshold-alert-sent-at": { - "type": "string", - "format": "date-time", - "nullable": true, - "description": "Timestamp of the last time a RUM usage threshold alert was sent for the current rum-alert-threshold. Null when no alert has been sent for the current threshold.\n" + "description": { + "type": "string" } } }, "relationships": { "type": "object", - "required": [ - "organization", - "feature-set" - ], "properties": { - "organization": { - "$ref": "#/components/schemas/organizations-has-one" + "stack": { + "$ref": "#/components/schemas/stacks-has-one" }, - "feature-set": { - "$ref": "#/components/schemas/feature-sets-has-one" + "stack-deployment-run": { + "$ref": "#/components/schemas/stack-deployment-runs-has-one" + } + } + } + } + }, + "stack-output-consumers": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "readOnly": true, + "enum": [ + "stack-output-consumers" + ] + }, + "attributes": { + "type": "object", + "properties": { + "deployment": { + "type": "string", + "readOnly": true }, - "hcp-billing-account": { - "$ref": "#/components/schemas/links_related" + "upstream-publish-output-address": { + "type": "string", + "readOnly": true }, - "next-subscription": { - "$ref": "#/components/schemas/subscriptions-has-one" + "stack-name": { + "type": "string", + "readOnly": true + }, + "upstream-name": { + "type": "string", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "stack": { + "$ref": "#/components/schemas/stacks-has-one" + }, + "upstream-stack": { + "$ref": "#/components/schemas/stacks-has-one" } } } } }, - "subscriptions-envelope": { + "stack-states-envelope": { "type": "object", "required": [ "data" ], "properties": { "data": { - "$ref": "#/components/schemas/subscriptions" + "$ref": "#/components/schemas/stack-states" } } }, - "billing-invoices": { + "stack-deployment-group-summaries": { "type": "object", + "required": [ + "type", + "attributes" + ], "properties": { "id": { "type": "string", - "description": "The Stripe invoice ID." + "readOnly": true }, "type": { "type": "string", + "readOnly": true, "enum": [ - "billing-invoices" - ], - "description": "The resource type identifier." + "stack-deployment-group-summaries" + ] }, "attributes": { "type": "object", "properties": { - "created-at": { + "name": { "type": "string", - "format": "date-time", - "description": "The date the invoice was created." + "nullable": true, + "readOnly": true + }, + "status": { + "type": "string", + "enum": [ + "pending", + "pre-deploying", + "deploying", + "abandoned", + "succeeded", + "failed" + ], + "readOnly": true + }, + "stack-deployment-run-status-summary": { + "type": "object", + "description": "Contains a count of the number of deployment runs in each state.", + "properties": { + "pending": { + "type": "integer" + }, + "pending-capacity": { + "type": "integer" + }, + "pre-deploying": { + "type": "integer" + }, + "pre-deploying-pending-operator": { + "type": "integer" + }, + "acquiring-lock": { + "type": "integer" + }, + "deploying": { + "type": "integer" + }, + "deploying-pending-operator": { + "type": "integer" + }, + "succeeded": { + "type": "integer" + }, + "failed": { + "type": "integer" + }, + "abandoned": { + "type": "integer" + } + } + }, + "status-counts": { + "type": "object", + "description": "Deprecated alias for stack-deployment-run-status-summary.", + "properties": { + "pending": { + "type": "integer" + }, + "pending-capacity": { + "type": "integer" + }, + "pre-deploying": { + "type": "integer" + }, + "pre-deploying-pending-operator": { + "type": "integer" + }, + "acquiring-lock": { + "type": "integer" + }, + "deploying": { + "type": "integer" + }, + "deploying-pending-operator": { + "type": "integer" + }, + "succeeded": { + "type": "integer" + }, + "failed": { + "type": "integer" + }, + "abandoned": { + "type": "integer" + } + } + } + } + }, + "relationships": { + "type": "object", + "properties": { + "stack-deployment-group": { + "$ref": "#/components/schemas/stack-deployment-groups-has-one" + } + } + } + } + }, + "stack-diagnostics": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "readOnly": true, + "enum": [ + "stack-diagnostics" + ] + }, + "attributes": { + "type": "object", + "properties": { + "severity": { + "type": "string", + "enum": [ + "warning", + "error" + ], + "readOnly": true }, - "external-link": { + "summary": { "type": "string", - "description": "A link to the Stripe-hosted invoice PDF." + "readOnly": true }, - "number": { + "detail": { "type": "string", - "description": "The invoice number." + "readOnly": true + }, + "diags": { + "type": "array", + "readOnly": true, + "nullable": true }, - "paid": { + "acknowledged": { "type": "boolean", - "description": "Whether the invoice has been paid." + "readOnly": true }, - "status": { + "acknowledged-at": { "type": "string", - "description": "The invoice status (e.g., \"paid\", \"draft\")." + "format": "date-time", + "readOnly": true, + "nullable": true }, - "total": { - "type": "integer", - "description": "The total invoice amount in cents." + "created-at": { + "type": "string", + "format": "date-time", + "readOnly": true + } + } + }, + "links": { + "$ref": "#/components/schemas/self" + }, + "relationships": { + "type": "object", + "properties": { + "stack-configuration": { + "$ref": "#/components/schemas/stack-configurations-has-one" + }, + "stack-deployment-step": { + "$ref": "#/components/schemas/stack-deployment-steps-has-one" } } } } }, - "workspaces-identifier": { + "stack-published-outputs": { "type": "object", + "required": [ + "type", + "attributes" + ], "properties": { "id": { - "type": "string" + "type": "string", + "readOnly": true }, "type": { "type": "string", + "readOnly": true, "enum": [ - "workspaces" + "stack-published-outputs" ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string", + "readOnly": true + }, + "action": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "current-value": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "previous-value": { + "type": "string", + "nullable": true, + "readOnly": true + }, + "source-range": { + "type": "string", + "readOnly": true + } + } + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "stack-aggregate-output": { + "$ref": "#/components/schemas/stack-aggregate-outputs-has-one" + }, + "stack-configuration": { + "$ref": "#/components/schemas/stack-configurations-has-one" + } + } } } }, - "workspaces-has-many": { + "stack-approvals-has-many": { "type": "object", "nullable": true, "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/workspaces-identifier" + "$ref": "#/components/schemas/stack-approvals-identifier" } } } }, - "agent-pools": { + "stack-deployment-group-summaries-identifier": { + "type": "object", + "required": [ + "id", + "type" + ], + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "stack-deployment-group-summaries" + ] + } + } + }, + "stack-deployment-group-summaries-has-one": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/stack-deployment-group-summaries-identifier" + }, + "links": { + "$ref": "#/components/schemas/related" + } + } + }, + "stack-deployment-groups": { "type": "object", "required": [ "type", @@ -24198,115 +33747,167 @@ }, "type": { "type": "string", + "readOnly": true, "enum": [ - "agent-pools" + "stack-deployment-groups" ] }, "attributes": { "type": "object", "properties": { "name": { - "type": "string" + "type": "string", + "nullable": true, + "readOnly": true + }, + "status": { + "type": "string", + "enum": [ + "pending", + "pre-deploying", + "deploying", + "succeeded", + "failed", + "abandoned" + ], + "readOnly": true + }, + "deployment-group-config": { + "type": "object", + "readOnly": true, + "properties": { + "auto-approve-checks": { + "type": "array", + "items": { + "type": "string" + } + }, + "eager-plan": { + "type": "string", + "readOnly": true + }, + "failure-tolerance": { + "type": "integer", + "nullable": true, + "readOnly": true + }, + "custom": { + "type": "boolean", + "nullable": true, + "readOnly": true + } + } }, "created-at": { "type": "string", "format": "date-time", "readOnly": true }, - "organization-scoped": { - "type": "boolean" + "updated-at": { + "type": "string", + "format": "date-time", + "readOnly": true }, - "agent-count": { - "type": "integer", + "pre-deploying-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true + }, + "deploying-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true + }, + "succeeded-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true + }, + "failed-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true + }, + "abandoned-at": { + "type": "string", + "format": "date-time", + "nullable": true, "readOnly": true } } }, "links": { - "$ref": "#/components/schemas/self" + "type": "object", + "properties": { + "self": { + "type": "string" + }, + "stack-deployment-group-summaries": { + "type": "string" + } + } }, "relationships": { "type": "object", "properties": { - "agents": { - "$ref": "#/components/schemas/links_related" + "stack-configuration": { + "$ref": "#/components/schemas/stack-configurations-has-one" }, - "authentication-tokens": { + "stack-approvals": { + "$ref": "#/components/schemas/stack-approvals-has-many" + }, + "stack-deployment-runs": { "$ref": "#/components/schemas/links_related" }, - "workspaces": { - "$ref": "#/components/schemas/workspaces-has-many" + "stack-deployment-group-summary": { + "description": "Contains summed status counts for the the deployment runs in this group.", + "$ref": "#/components/schemas/stack-deployment-group-summaries-has-one" }, - "allowed-workspaces": { - "$ref": "#/components/schemas/workspaces-has-many" + "run-status-summaries": { + "description": "Deprecated alias for stack-deployment-group-summary.", + "$ref": "#/components/schemas/stack-deployment-group-summaries-has-one" } } } } }, - "agent-pools-envelope": { + "stack-deployment-groups-envelope": { "type": "object", "required": [ "data" ], "properties": { "data": { - "$ref": "#/components/schemas/agent-pools" + "$ref": "#/components/schemas/stack-deployment-groups" } } }, - "agents": { + "action-reason": { "type": "object", "properties": { - "id": { - "type": "string", - "readOnly": true - }, - "type": { + "reason": { "type": "string", - "enum": [ - "agents" - ] - }, - "attributes": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "status": { - "type": "string" - }, - "ip-address": { - "type": "string", - "nullable": true - }, - "last-ping-at": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "created-at": { - "type": "string", - "format": "date-time", - "readOnly": true - } - } + "nullable": true, + "description": "An optional reason for locking the workspace." } } }, - "agents-envelope": { + "stack-deployment-runs-envelope": { "type": "object", "required": [ "data" ], "properties": { "data": { - "$ref": "#/components/schemas/agents" + "$ref": "#/components/schemas/stack-deployment-runs" } } }, - "agent-pools-identifier": { + "stack-states-identifier": { "type": "object", "required": [ "id", @@ -24319,54 +33920,23 @@ "type": { "type": "string", "enum": [ - "agent-pools" + "stack-states" ] } } }, - "agent-pools-has-many": { + "stack-states-has-one": { "type": "object", - "nullable": true, "properties": { "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/agent-pools-identifier" - } - } - } - }, - "cidr-ranges-identifier": { - "type": "object", - "required": [ - "type" - ], - "properties": { - "id": { - "type": "string", - "readOnly": true + "$ref": "#/components/schemas/stack-states-identifier" }, - "type": { - "type": "string", - "enum": [ - "cidr-ranges" - ] - } - } - }, - "cidr-ranges-has-many": { - "type": "object", - "nullable": true, - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/cidr-ranges-identifier" - } + "links": { + "$ref": "#/components/schemas/related" } } }, - "cidr-range-lists": { + "stack-deployment-steps": { "type": "object", "required": [ "type", @@ -24379,62 +33949,155 @@ }, "type": { "type": "string", + "readOnly": true, "enum": [ - "cidr-range-lists" + "stack-deployment-steps" ] }, "attributes": { "type": "object", "properties": { - "name": { - "type": "string" + "operation-type": { + "type": "string", + "enum": [ + "plan", + "apply", + "allow-import", + "import-state" + ], + "readOnly": true }, - "description": { - "type": "string" + "requires-state-lock": { + "type": "boolean", + "readOnly": true }, - "enforcement-scope": { + "status": { "type": "string", "enum": [ - "organization", - "all_agent_pools", - "selected_agent_pools" - ] + "blocked", + "abandoned", + "queued", + "running", + "pending-operator", + "completed", + "failed" + ], + "readOnly": true + }, + "created-at": { + "type": "string", + "format": "date-time", + "readOnly": true }, "updated-at": { "type": "string", "format": "date-time", "readOnly": true + }, + "abandoned-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true + }, + "queued-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true + }, + "running-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true + }, + "pending-operator-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true + }, + "completed-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true + }, + "failed-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true + } + } + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string" + }, + "plan-description": { + "type": "string" + }, + "apply-description": { + "type": "string" + }, + "structured-log": { + "type": "string" } } }, "relationships": { "type": "object", "properties": { - "organization": { - "$ref": "#/components/schemas/organizations-has-one" + "stack-diagnostics": { + "type": "object", + "properties": { + "links": { + "type": "object", + "properties": { + "related": { + "type": "string" + } + } + }, + "meta": { + "type": "object", + "properties": { + "count": { + "type": "integer" + } + } + } + } }, - "agent-pools": { - "$ref": "#/components/schemas/agent-pools-has-many" + "stack-state": { + "$ref": "#/components/schemas/stack-states-has-one" }, - "cidr-ranges": { - "$ref": "#/components/schemas/cidr-ranges-has-many" + "stack-deployment-run": { + "$ref": "#/components/schemas/stack-deployment-runs-has-one" + }, + "stack-approval": { + "$ref": "#/components/schemas/stack-approvals-has-one" } } } } }, - "cidr-range-list-envelope": { + "stack-deployment-steps-envelope": { "type": "object", "required": [ "data" ], "properties": { "data": { - "$ref": "#/components/schemas/cidr-range-lists" + "$ref": "#/components/schemas/stack-deployment-steps" } } }, - "cidr-range-lists-identifier": { + "approved-by-identifier": { "type": "object", "required": [ "id", @@ -24447,124 +34110,56 @@ "type": { "type": "string", "enum": [ - "cidr-range-lists" + "users", + "teams", + "organizations" ] } } }, - "cidr-range-lists-has-one": { + "approved-by-has-one": { "type": "object", - "nullable": true, - "required": [ - "data" - ], "properties": { "data": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/cidr-range-lists-identifier" - } - ], - "nullable": true + "$ref": "#/components/schemas/approved-by-identifier" + }, + "links": { + "$ref": "#/components/schemas/related" } } }, - "cidr-ranges": { + "approval-on-identifier": { "type": "object", "required": [ - "type", - "attributes" + "id", + "type" ], "properties": { "id": { - "type": "string", - "readOnly": true + "type": "string" }, "type": { "type": "string", "enum": [ - "cidr-ranges" + "stack-deployment-steps", + "stack-deployment-runs", + "stack-deployment-groups" ] - }, - "attributes": { - "type": "object", - "required": [ - "range", - "enabled" - ], - "properties": { - "range": { - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, - "enabled": { - "type": "boolean" - }, - "updated-at": { - "type": "string", - "format": "date-time", - "readOnly": true - } - } - }, - "relationships": { - "type": "object", - "properties": { - "organization": { - "$ref": "#/components/schemas/organizations-has-one" - }, - "cidr-range-list": { - "$ref": "#/components/schemas/cidr-range-lists-has-one" - } - } - } - } - }, - "cidr-ranges-envelope": { - "type": "object", - "required": [ - "data" - ], - "properties": { - "data": { - "$ref": "#/components/schemas/cidr-ranges" } } }, - "agent-pool-ids": { + "approval-on-has-one": { "type": "object", - "required": [ - "data" - ], "properties": { "data": { - "type": "array", - "items": { - "type": "object", - "required": [ - "id", - "type" - ], - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "agent-pools" - ] - } - } - } + "$ref": "#/components/schemas/approval-on-identifier" + }, + "links": { + "$ref": "#/components/schemas/related" } } }, - "metrics-token": { + "stack-approvals": { "type": "object", "required": [ "type", @@ -24577,60 +34172,48 @@ }, "type": { "type": "string", + "readOnly": true, "enum": [ - "metrics-tokens" + "stack-approvals" ] }, "attributes": { "type": "object", "properties": { - "name": { - "type": "string", - "description": "The name of the token." - }, - "token-id": { - "type": "string", - "readOnly": true, - "description": "The ID of the token." + "reason": { + "type": "string" }, "created-at": { "type": "string", "format": "date-time", - "readOnly": true, - "description": "The time when the token was created." - }, - "expires-at": { - "type": "string", - "format": "date-time", - "readOnly": true, - "nullable": true, - "description": "The time when the token expires." + "readOnly": true + } + } + }, + "links": { + "$ref": "#/components/schemas/self" + }, + "relationships": { + "type": "object", + "properties": { + "approved-by": { + "$ref": "#/components/schemas/approved-by-has-one" }, - "token": { - "type": "string", - "readOnly": true, - "nullable": true, - "description": "The secret text of the new authentication token. Only returned when the token is created." + "approval-on": { + "$ref": "#/components/schemas/approval-on-has-one" } } } } }, - "agent-pools-has-one": { + "stack-approvals-envelope": { "type": "object", - "nullable": true, "required": [ "data" ], "properties": { "data": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/agent-pools-identifier" - } - ], - "nullable": true + "$ref": "#/components/schemas/stack-approvals" } } }, @@ -24701,37 +34284,6 @@ } } }, - "projects-identifier": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "projects" - ] - } - } - }, - "projects-has-one": { - "type": "object", - "properties": { - "data": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/projects-identifier" - } - ], - "nullable": true - }, - "links": { - "$ref": "#/components/schemas/related" - } - } - }, "hyok-configurations-identifier": { "type": "object", "properties": { @@ -25690,7 +35242,7 @@ "description": { "type": "string", "nullable": true, - "description": "Team description. Only available when effective permissions are enabled for unified organizations." + "description": "Team description. Can be manually entered for all teams." }, "sso-team-id": { "type": "string", @@ -25940,6 +35492,11 @@ ], "readOnly": true, "description": "The provisioning status of the user.\n- \"provisioned\": User was created via SCIM provisioning\n- \"claimed\": User claimed their account or existed before SCIM\n" + }, + "username": { + "type": "string", + "readOnly": true, + "description": "The username/identity string from the SCIM provider." } } } @@ -26111,39 +35668,39 @@ "attributes": { "type": "object", "properties": { - "deleteOlderThanNDays": { + "delete-older-than-n-days": { "type": "integer" }, - "deleteStateVersions": { + "delete-state-versions": { "type": "boolean" }, - "deleteConfigurationVersions": { + "delete-configuration-versions": { "type": "boolean" }, - "deleteRunDataAndLogs": { + "delete-run-data-and-logs": { "type": "boolean" }, - "stateVersionsDeleteAfterNDays": { + "state-versions-delete-after-n-days": { "type": "integer", "nullable": true }, - "configurationVersionsDeleteAfterNDays": { + "configuration-versions-delete-after-n-days": { "type": "integer", "nullable": true }, - "runDataAndLogsDeleteAfterNDays": { + "run-data-and-logs-delete-after-n-days": { "type": "integer", "nullable": true }, - "stateVersionsKeepLatestCount": { + "state-versions-keep-latest-count": { "type": "integer", "nullable": true }, - "configurationVersionsKeepLatestCount": { + "configuration-versions-keep-latest-count": { "type": "integer", "nullable": true }, - "runDataKeepLatestCount": { + "run-data-keep-latest-count": { "type": "integer", "nullable": true } @@ -26382,6 +35939,84 @@ } } }, + "inherited-from-has-one": { + "type": "object", + "nullable": true, + "properties": { + "data": { + "type": "object", + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/projects-identifier" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "projects": "#/components/schemas/projects-identifier" + } + } + } + } + }, + "effective-tag-bindings": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true, + "example": "3JAnx3G4puQcjHu3" + }, + "type": { + "type": "string", + "enum": [ + "effective-tag-bindings" + ] + }, + "attributes": { + "type": "object", + "required": [ + "key" + ], + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "relationships": { + "type": "object", + "description": "Optional relationship indicating the project this binding was inherited from, if applicable.", + "properties": { + "inherited-from": { + "$ref": "#/components/schemas/inherited-from-has-one" + } + } + } + } + }, + "effective-tag-bindings-envelope-many": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/effective-tag-bindings" + } + } + } + }, "ssh-keys-identifier": { "type": "object", "required": [ @@ -26629,6 +36264,38 @@ } } }, + "no-code-module-versions-identifier": { + "type": "object", + "required": [ + "id", + "type" + ], + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "no-code-module-versions" + ] + } + } + }, + "no-code-module-versions-has-one": { + "type": "object", + "properties": { + "data": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/no-code-module-versions-identifier" + } + ], + "nullable": true + } + } + }, "vars-identifier": { "type": "object", "properties": { @@ -26655,6 +36322,53 @@ } } }, + "tags-has-many": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "tags" + ] + }, + "id": { + "type": "string" + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + } + } + }, + "workspace-links": { + "type": "object", + "properties": { + "self": { + "type": "string" + }, + "self-html": { + "type": "string" + } + } + }, "workspaces": { "type": "object", "required": [ @@ -26949,6 +36663,18 @@ "type": "string", "nullable": true }, + "source-module-id": { + "type": "string", + "nullable": true, + "readOnly": true, + "description": "Identifier of the no-code module and version this workspace was created from\n(for example, private////). Present only for\nno-code workspaces; omitted otherwise. Prefer the no-code-module-version\nrelationship for a typed link to the current no-code module version.\n" + }, + "no-code-upgrade-available": { + "type": "boolean", + "nullable": true, + "readOnly": true, + "description": "Whether a newer no-code module version is available for this workspace.\nPresent only for no-code workspaces; omitted otherwise.\n" + }, "tag-names": { "type": "array", "items": { @@ -26963,20 +36689,265 @@ ], "description": "A human-readable description of the effective state-version\nretention window for this workspace. Returns null when no state-version retention policy is in effect for the\nworkspace, or when the policy does not delete state versions.\n\n\nThis attribute is only available in Terraform Enterprise." }, - "effective-run-data-retention-desc": { + "effective-run-data-retention-desc": { + "type": "string", + "nullable": true, + "x-vis": [ + "tfe" + ], + "description": "A human-readable description of the effective run data and logs\nretention window for this workspace. Returns null when no run data retention policy is in effect for the\nworkspace, or when the policy does not delete run data and logs.\n\n\nThis attribute is only available in Terraform Enterprise." + }, + "hyok-enabled": { + "type": "boolean", + "x-vis": [ + "hcpt" + ], + "description": "HCP Terraform Premium Tier only. Enabled Hold Your Own Key for the workspace. Once this has been set to true,\nit can no longer be disabled.\n\n\nThis attribute is only available in HCP Terraform." + } + } + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "$ref": "#/components/schemas/organizations-has-one" + }, + "ssh-key": { + "$ref": "#/components/schemas/ssh-keys-has-one" + }, + "locked-by": { + "$ref": "#/components/schemas/locked-by-has-one" + }, + "current-run": { + "$ref": "#/components/schemas/runs-has-one" + }, + "latest-run": { + "$ref": "#/components/schemas/runs-has-one" + }, + "outputs": { + "$ref": "#/components/schemas/workspace-outputs-has-many" + }, + "remote-state-consumers": { + "type": "object", + "properties": { + "links": { + "$ref": "#/components/schemas/related" + } + } + }, + "current-state-version": { + "$ref": "#/components/schemas/state-versions-has-one" + }, + "current-configuration-version": { + "$ref": "#/components/schemas/configuration-versions-has-one" + }, + "agent-pool": { + "$ref": "#/components/schemas/agent-pools-has-one" + }, + "readme": { + "$ref": "#/components/schemas/workspace-readme-has-one" + }, + "project": { + "$ref": "#/components/schemas/projects-has-one" + }, + "current-assessment-result": { + "$ref": "#/components/schemas/assessment-results-has-one" + }, + "no-code-module-version": { + "description": "The no-code module version this workspace was created from. Present\nonly for no-code workspaces; data is null or omitted otherwise.\n", + "$ref": "#/components/schemas/no-code-module-versions-has-one" + }, + "vars": { + "$ref": "#/components/schemas/vars-has-many" + }, + "tags": { + "$ref": "#/components/schemas/tags-has-many" + } + } + }, + "links": { + "$ref": "#/components/schemas/workspace-links" + } + } + }, + "no-code-modules-identifier": { + "type": "object", + "required": [ + "id", + "type" + ], + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "no-code-modules" + ] + } + } + }, + "no-code-modules-has-one": { + "type": "object", + "properties": { + "data": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/no-code-modules-identifier" + } + ], + "nullable": true + }, + "links": { + "$ref": "#/components/schemas/related" + } + } + }, + "variable-options-identifier": { + "type": "object", + "required": [ + "id", + "type" + ], + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "variable-options" + ] + } + } + }, + "variable-options-has-many": { + "type": "object", + "nullable": true, + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/variable-options-identifier" + } + } + } + }, + "no-code-module-versions": { + "type": "object", + "required": [ + "id", + "type", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "enum": [ + "no-code-module-versions" + ] + }, + "attributes": { + "type": "object", + "properties": { + "module-version": { + "type": "string", + "readOnly": true, + "description": "Registry module version string this no-code module version pins\n(for example, 1.0.0).\n" + }, + "version-number": { + "type": "integer", + "readOnly": true, + "description": "Monotonic version number for this no-code module version record.\n" + } + } + }, + "relationships": { + "type": "object", + "properties": { + "organization": { + "$ref": "#/components/schemas/organizations-has-one" + }, + "no-code-module": { + "$ref": "#/components/schemas/no-code-modules-has-one" + }, + "variable-options": { + "$ref": "#/components/schemas/variable-options-has-many" + } + } + } + } + }, + "registry-modules-identifier": { + "type": "object", + "required": [ + "id", + "type" + ], + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "registry-modules" + ] + } + } + }, + "registry-modules-has-one": { + "type": "object", + "properties": { + "data": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/registry-modules-identifier" + } + ], + "nullable": true + }, + "links": { + "$ref": "#/components/schemas/related" + } + } + }, + "no-code-modules": { + "type": "object", + "required": [ + "id", + "type", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "enum": [ + "no-code-modules" + ] + }, + "attributes": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether this no-code module is enabled for deployment." + }, + "version-pin": { "type": "string", "nullable": true, - "x-vis": [ - "tfe" - ], - "description": "A human-readable description of the effective run data and logs\nretention window for this workspace. Returns null when no run data retention policy is in effect for the\nworkspace, or when the policy does not delete run data and logs.\n\n\nThis attribute is only available in Terraform Enterprise." - }, - "hyok-enabled": { - "type": "boolean", - "x-vis": [ - "hcpt" - ], - "description": "HCP Terraform Premium Tier only. Enabled Hold Your Own Key for the workspace. Once this has been set to true,\nit can no longer be disabled.\n\n\nThis attribute is only available in HCP Terraform." + "description": "Optional pinned module version for no-code deployments." } } }, @@ -26986,54 +36957,110 @@ "organization": { "$ref": "#/components/schemas/organizations-has-one" }, - "ssh-key": { - "$ref": "#/components/schemas/ssh-keys-has-one" + "registry-module": { + "$ref": "#/components/schemas/registry-modules-has-one" }, - "locked-by": { - "$ref": "#/components/schemas/locked-by-has-one" + "variable-options": { + "$ref": "#/components/schemas/variable-options-has-many" }, - "current-run": { - "$ref": "#/components/schemas/runs-has-one" + "latest-version": { + "$ref": "#/components/schemas/no-code-module-versions-has-one" + } + } + }, + "links": { + "$ref": "#/components/schemas/self" + } + } + }, + "workspace-readme": { + "type": "object", + "required": [ + "id", + "type", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "enum": [ + "workspace-readme" + ] + }, + "attributes": { + "type": "object", + "properties": { + "raw-markdown": { + "type": "string", + "readOnly": true, + "description": "Raw markdown contents of the workspace README." + } + } + } + } + }, + "workspace-outputs": { + "type": "object", + "description": "Workspace outputs are Terraform output values associated with a workspace.\nThey include the name of the output and a sensitive boolean. There is an\nadditional attribute, \"value\", that can be any JSON type, including null when\nthe output is sensitive; it is intentionally omitted from this schema (same\npattern as state-version-outputs) because OpenAPI cannot express a nullable\nany-type under the project's nullable-type-sibling lint rule.\n", + "required": [ + "id", + "type", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "enum": [ + "workspace-outputs" + ] + }, + "attributes": { + "type": "object", + "properties": { + "name": { + "type": "string" }, - "latest-run": { - "$ref": "#/components/schemas/runs-has-one" + "sensitive": { + "type": "boolean" }, - "outputs": { - "$ref": "#/components/schemas/workspace-outputs-has-many" + "output-type": { + "type": "string", + "description": "The Terraform type of the output value (e.g. string, number, bool,\nlist, map, set, object, tuple).\n" }, - "remote-state-consumers": { + "detailed-type": { + "description": "A detailed representation of the output type. May be a string for\nsimple types or an array for complex types such as tuples and objects.\n" + }, + "workspace-attributes": { "type": "object", "properties": { - "links": { - "$ref": "#/components/schemas/related" + "id": { + "type": "string" + }, + "name": { + "type": "string" } } }, - "current-state-version": { - "$ref": "#/components/schemas/state-versions-has-one" - }, - "current-configuration-version": { - "$ref": "#/components/schemas/configuration-versions-has-one" - }, - "agent-pool": { - "$ref": "#/components/schemas/agent-pools-has-one" - }, - "readme": { - "$ref": "#/components/schemas/workspace-readme-has-one" - }, - "project": { - "$ref": "#/components/schemas/projects-has-one" - }, - "current-assessment-result": { - "$ref": "#/components/schemas/assessment-results-has-one" - }, - "vars": { - "$ref": "#/components/schemas/vars-has-many" + "organization-attributes": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } } } - }, - "links": { - "$ref": "#/components/schemas/self" } } }, @@ -27279,12 +37306,274 @@ } } }, - "configurable-identifier": { + "workspaces-has-one": { + "type": "object", + "properties": { + "data": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/workspaces-identifier" + } + ], + "nullable": true + }, + "links": { + "$ref": "#/components/schemas/related" + } + } + }, + "no-code-queries-identifier": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "no-code-queries" + ] + } + } + }, + "no-code-queries-has-one": { + "type": "object", + "properties": { + "data": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/no-code-queries-identifier" + } + ], + "nullable": true + }, + "links": { + "$ref": "#/components/schemas/related" + } + } + }, + "queries": { "type": "object", "required": [ - "id", - "type" + "type", + "attributes", + "relationships" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "enum": [ + "queries" + ] + }, + "attributes": { + "type": "object", + "properties": { + "actions": { + "type": "object", + "required": [ + "is-cancelable", + "is-force-cancelable" + ], + "properties": { + "is-cancelable": { + "type": "boolean" + }, + "is-force-cancelable": { + "type": "boolean" + } + } + }, + "canceled-at": { + "type": "string", + "format": "date-time", + "nullable": true, + "readOnly": true + }, + "updated-at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "created-at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "source": { + "type": "string", + "enum": [ + "tfe-api", + "tfe-ui", + "tfe-module", + "tfe-no-code-query", + "terraform", + "terraform-mcp" + ] + }, + "generate-config-out": { + "type": "boolean" + }, + "policy-evaluation-opt-in": { + "type": "boolean", + "writeOnly": true, + "description": "Opts this query into policy evaluation. When query-policy-opt-in is enabled, omitted input defaults to true only for tfe-ui queries with generate-config-out enabled (which defaults to true); otherwise it defaults to false. Explicit true requires a UI source and generated configuration. Explicit false opts out. Supplied input must be a non-null boolean when the feature is enabled. When the feature is disabled, this input is ignored and false is persisted." + }, + "resources-discovered": { + "type": "integer", + "readOnly": true, + "description": "The number of resources discovered by the query run." + }, + "status-timestamps": { + "type": "object", + "properties": { + "pending-at": { + "type": "string", + "format": "date-time" + }, + "queued-at": { + "type": "string", + "format": "date-time" + }, + "errored-at": { + "type": "string", + "format": "date-time" + }, + "canceled-at": { + "type": "string", + "format": "date-time" + }, + "running-at": { + "type": "string", + "format": "date-time" + }, + "finished-at": { + "type": "string", + "format": "date-time" + } + } + }, + "status": { + "type": "string", + "enum": [ + "pending", + "queued", + "running", + "finished", + "canceled", + "errored" + ] + }, + "log-read-url": { + "type": "string", + "readOnly": true + }, + "permissions": { + "type": "object", + "properties": { + "can-cancel": { + "type": "boolean" + }, + "can-force-cancel": { + "type": "boolean" + } + } + }, + "force-cancel-available-at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "policy-paths": { + "type": "array", + "items": { + "type": "string" + }, + "nullable": true + } + } + }, + "relationships": { + "type": "object", + "required": [ + "workspace", + "configuration-version" + ], + "properties": { + "workspace": { + "$ref": "#/components/schemas/workspaces-has-one" + }, + "canceled-by": { + "$ref": "#/components/schemas/users-has-one" + }, + "configuration-version": { + "$ref": "#/components/schemas/configuration-versions-has-one" + }, + "created-by": { + "$ref": "#/components/schemas/users-has-one" + }, + "no-code-query": { + "$ref": "#/components/schemas/no-code-queries-has-one", + "description": "The no-code query that triggered this query run, if any." + } + } + } + } + }, + "queries-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/queries" + } + } + }, + "query-completion-summary": { + "type": "object", + "required": [ + "address", + "resource-type", + "total" ], + "properties": { + "address": { + "type": "string", + "readOnly": true, + "description": "The resource address as it appeared in the query list completion." + }, + "resource-type": { + "type": "string", + "readOnly": true, + "description": "The Terraform resource type for this list completion." + }, + "total": { + "type": "integer", + "readOnly": true, + "description": "The total number of resources discovered for this address." + }, + "policies-passed": { + "type": "integer", + "readOnly": true, + "description": "The number of policies that passed for this resource address. Omitted when the query-policy feature is disabled for the organization.\n" + }, + "policies-failed": { + "type": "integer", + "readOnly": true, + "description": "The number of policies that failed for this resource address. Omitted when the query-policy feature is disabled for the organization.\n" + } + } + }, + "queries-identifier": { + "type": "object", "properties": { "id": { "type": "string" @@ -27292,28 +37581,124 @@ "type": { "type": "string", "enum": [ - "workspaces", - "policy-sets", - "varsets" + "queries" ] } } }, - "configurable-has-one": { + "queries-has-one": { "type": "object", "properties": { "data": { "type": "object", "allOf": [ { - "$ref": "#/components/schemas/configurable-identifier" + "$ref": "#/components/schemas/queries-identifier" } ], "nullable": true + }, + "links": { + "$ref": "#/components/schemas/related" } } }, - "varsets-identifier": { + "no-code-query": { + "type": "object", + "required": [ + "type", + "attributes", + "relationships" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "enum": [ + "no-code-queries" + ] + }, + "attributes": { + "type": "object", + "properties": { + "source": { + "type": "string", + "enum": [ + "terraform-mcp" + ], + "writeOnly": true, + "description": "The source assigned to the query run triggered on create. Only Terraform MCP may explicitly set this value. When omitted, the query run uses the default No-Code Query source." + }, + "generate-config-out": { + "type": "boolean", + "writeOnly": true, + "description": "Whether to generate config output for the query run triggered on create. This is a create-only input and is not returned by the GET endpoint. Defaults to false." + }, + "no-code-query-providers": { + "type": "array", + "items": { + "type": "object", + "required": [ + "namespace", + "name", + "version", + "no-code-query-resources" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "namespace": { + "type": "string" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "no-code-query-resources": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "body": { + "type": "object", + "additionalProperties": true + } + } + } + } + } + } + } + } + }, + "relationships": { + "type": "object", + "required": [ + "workspace" + ], + "properties": { + "workspace": { + "$ref": "#/components/schemas/workspaces-has-one" + }, + "latest-query-run": { + "$ref": "#/components/schemas/queries-has-one" + } + } + } + } + }, + "configurable-identifier": { "type": "object", "required": [ "id", @@ -27326,39 +37711,56 @@ "type": { "type": "string", "enum": [ + "workspaces", + "policy-sets", "varsets" ] } } }, - "varsets-has-one": { + "configurable-has-one": { "type": "object", "properties": { "data": { "type": "object", "allOf": [ { - "$ref": "#/components/schemas/varsets-identifier" + "$ref": "#/components/schemas/configurable-identifier" } ], "nullable": true } } }, - "workspaces-has-one": { + "varsets-identifier": { + "type": "object", + "required": [ + "id", + "type" + ], + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "varsets" + ] + } + } + }, + "varsets-has-one": { "type": "object", "properties": { "data": { "type": "object", "allOf": [ { - "$ref": "#/components/schemas/workspaces-identifier" + "$ref": "#/components/schemas/varsets-identifier" } ], "nullable": true - }, - "links": { - "$ref": "#/components/schemas/related" } } }, @@ -27473,18 +37875,6 @@ } } }, - "projects-has-many": { - "type": "object", - "nullable": true, - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/projects-identifier" - } - } - } - }, "provider-sets": { "type": "object", "properties": { @@ -27592,20 +37982,6 @@ } } }, - "stacks-identifier": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "stacks" - ] - } - } - }, "stacks-has-many": { "type": "object", "nullable": true, @@ -27889,16 +38265,6 @@ } } }, - "action-reason": { - "type": "object", - "properties": { - "reason": { - "type": "string", - "nullable": true, - "description": "An optional reason for locking the workspace." - } - } - }, "ssh-keys-nullable-identifier-document": { "type": "object", "required": [ @@ -29143,37 +39509,6 @@ } } }, - "ingress-attributes-identifier": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "ingress-attributes" - ] - } - } - }, - "ingress-attributes-has-one": { - "type": "object", - "properties": { - "data": { - "type": "object", - "allOf": [ - { - "$ref": "#/components/schemas/ingress-attributes-identifier" - } - ], - "nullable": true - }, - "links": { - "$ref": "#/components/schemas/related" - } - } - }, "configuration-versions": { "type": "object", "required": [ @@ -29648,6 +39983,20 @@ } } }, + "backing-data-state": { + "type": "string", + "readOnly": true, + "x-vis": [ + "tfe" + ], + "description": "Data retention lifecycle state of the plan's backing data.\n\nThis attribute is only available in Terraform Enterprise.", + "enum": [ + "backing_data_initialized", + "backing_data_available", + "backing_data_soft_deleted", + "backing_data_permanently_deleted" + ] + }, "permissions": { "type": "object", "description": "Permissions for the current user related to this plan", @@ -29784,7 +40133,8 @@ "type": "string", "enum": [ "sentinel", - "opa" + "opa", + "tfpolicy" ], "description": "The policy-as-code framework for the policy." }, @@ -29799,9 +40149,10 @@ "hard-mandatory", "soft-mandatory", "advisory", - "mandatory" + "mandatory", + "mandatory_overridable" ], - "description": "The enforcement level of the policy. For Sentinel, valid values are hard-mandatory, soft-mandatory, and advisory. For OPA, valid values are mandatory and advisory." + "description": "The enforcement level of the policy. Sentinel: hard-mandatory, soft-mandatory, advisory. OPA: mandatory, advisory. TFPolicy: mandatory, advisory, mandatory_overridable." }, "enforce": { "type": "array", @@ -29842,6 +40193,27 @@ "$ref": "#/components/schemas/policy-sets-has-many" } } + }, + "links": { + "type": "object", + "properties": { + "self": { + "type": "string", + "readOnly": true, + "description": "The canonical URL of this policy." + }, + "upload": { + "type": "string", + "readOnly": true, + "description": "URL to upload new policy source content." + }, + "download": { + "type": "string", + "nullable": true, + "readOnly": true, + "description": "URL to download the current policy source content. Absent when no version has been uploaded yet." + } + } } } }, @@ -30166,23 +40538,27 @@ "properties": { "advisory-failed": { "type": "integer", - "description": "Total number of policies with advisory enforcement level that failed across all policy sets" + "description": "Policies with advisory enforcement level that failed" }, "mandatory-failed": { "type": "integer", - "description": "Total number of policies with mandatory or mandatory-overridable enforcement level that failed across all policy sets" + "description": "Policies with mandatory enforcement level that failed" + }, + "mandatory-overridable-failed": { + "type": "integer", + "description": "Policies with mandatory-overridable enforcement level that failed" }, "passed": { "type": "integer", - "description": "Total number of policies that passed across all policy sets" + "description": "Policies that passed" }, "errored": { "type": "integer", - "description": "Total number of policies that encountered errors during evaluation across all policy sets" + "description": "Policies that errored during evaluation" }, "unknown": { "type": "integer", - "description": "Total number of policies with unknown evaluation results across all policy sets" + "description": "Policies with an unknown evaluation result" } } }, @@ -30209,10 +40585,10 @@ } } }, - "organized-log": { + "archivist-supported": { "type": "boolean", - "deprecated": true, - "description": "Deprecated. Always `true`." + "readOnly": true, + "description": "Whether this evaluation supports archivist-backed outcome storage. When `true`,\nfull policy results are available via `policy-set-result-url` on each\n`tf-policy-set-outcome`. When `false`, use the `outcomes` array instead.\n" }, "permissions": { "type": "object", @@ -30305,7 +40681,8 @@ "outcomes": { "type": "array", "nullable": true, - "description": "List of policy outcomes, each representing the evaluation result of a single policy within the policy set", + "deprecated": true, + "description": "Deprecated. Populated for runs that did not support archivist-backed storage.\nUse `policy-set-result-url` to retrieve full policy results for new runs.\n", "items": { "type": "object", "properties": { @@ -30473,25 +40850,35 @@ "properties": { "advisory-failed": { "type": "integer", - "description": "Number of policies with advisory enforcement level that failed" + "description": "Policies with advisory enforcement level that failed" }, "mandatory-failed": { "type": "integer", - "description": "Number of policies with mandatory or mandatory-overridable enforcement level that failed" + "description": "Policies with mandatory enforcement level that failed" + }, + "mandatory-overridable-failed": { + "type": "integer", + "description": "Policies with mandatory-overridable enforcement level that failed" }, "passed": { "type": "integer", - "description": "Number of policies that passed" + "description": "Policies that passed" }, "errored": { "type": "integer", - "description": "Number of policies that encountered errors during evaluation" + "description": "Policies that errored during evaluation" }, "unknown": { "type": "integer", - "description": "Number of policies with unknown evaluation results (e.g., due to unknown Terraform values)" + "description": "Policies with an unknown evaluation result" } } + }, + "policy-set-result-url": { + "type": "string", + "nullable": true, + "readOnly": true, + "description": "URL to download the full policy result blob from Archivist.\nPresent only when `archivist-supported` is `true` on the parent `tf-policy-evaluation`.\nWhen `null`, fall back to the `outcomes` array.\n" } } }, @@ -30563,12 +40950,33 @@ }, "policies-has-many": { "type": "object", - "nullable": true, "properties": { "data": { "type": "array", "items": { - "$ref": "#/components/schemas/policies-identifier" + "oneOf": [ + { + "description": "Existing local policy reference (response shape and update requests).", + "allOf": [ + { + "$ref": "#/components/schemas/policies-identifier" + }, + { + "not": { + "type": "object", + "properties": { + "attributes": { + "type": "object" + } + }, + "required": [ + "attributes" + ] + } + } + ] + } + ] } } } @@ -30715,6 +41123,18 @@ }, "description": "This attribute is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users." }, + "tag-selector-matching-logic": { + "type": "string", + "x-vis": [ + "public-beta" + ], + "nullable": true, + "description": "Matching logic for tag selectors. `any` means any selector may match (OR). `all` means every selector must match (AND). `null` means the policy set is explicitly scoped, so tag matching does not apply. Under `all`, exclusion selectors must also fully match.\n\n\nThis attribute is considered BETA, is SUBJECT TO CHANGE, and may be unavailable to some users.", + "enum": [ + "any", + "all" + ] + }, "scoping-type": { "type": "string", "x-vis": [ @@ -30785,6 +41205,14 @@ "properties": { "data": { "$ref": "#/components/schemas/policy-sets" + }, + "included": { + "type": "array", + "description": "Sideloaded resources. `?include=policies` sideloads the full policy resources.", + "items": { + "type": "object", + "description": "A sideloaded resource. May be a `policies` resource (type \"policies\"), a `workspaces` resource (type \"workspaces\"), or another allowlisted type." + } } } }, @@ -30797,22 +41225,27 @@ "data": { "type": "array", "items": { - "type": "object", - "required": [ - "type", - "id" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "policies" - ] - }, - "id": { - "type": "string" + "oneOf": [ + { + "description": "Existing local policy reference, by id. Valid for both adding and removing policies from a policy set.", + "type": "object", + "required": [ + "type", + "id" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "policies" + ] + }, + "id": { + "type": "string" + } + } } - } + ] } } } @@ -31520,6 +41953,20 @@ "readOnly": true, "type": "integer", "nullable": true + }, + "backing-data-state": { + "type": "string", + "readOnly": true, + "x-vis": [ + "tfe" + ], + "description": "Data retention lifecycle state of the apply's backing data.\n\nThis attribute is only available in Terraform Enterprise.", + "enum": [ + "backing_data_initialized", + "backing_data_available", + "backing_data_soft_deleted", + "backing_data_permanently_deleted" + ] } } }, @@ -32076,7 +42523,7 @@ "auth-path": { "type": "string" }, - "encoded-ca-cert": { + "encoded-cacert": { "type": "string" } } @@ -32111,7 +42558,16 @@ { "$ref": "#/components/schemas/vault-oidc-configurations" } - ] + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "aws-oidc-configurations": "#/components/schemas/aws-oidc-configurations", + "gcp-oidc-configurations": "#/components/schemas/gcp-oidc-configurations", + "azure-oidc-configurations": "#/components/schemas/azure-oidc-configurations", + "vault-oidc-configurations": "#/components/schemas/vault-oidc-configurations" + } + } } } }, @@ -32977,6 +43433,17 @@ } } }, + "ingress-attributes-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/ingress-attributes" + } + } + }, "oauth-clients-identifier": { "type": "object", "properties": { @@ -33723,6 +44190,11 @@ "type": "string", "nullable": true }, + "ado-org-name": { + "type": "string", + "nullable": true, + "description": "The Azure DevOps organization name for connections using an org-scoped Personal Access Token (PAT). Must start and end with a letter or number and may contain only letters, numbers, and hyphens (e.g. \"my-company\"). Required when using an org-scoped PAT; omit or set to null when using a globally-scoped PAT.\n" + }, "secret": { "type": "string", "nullable": true @@ -33957,6 +44429,14 @@ "installation-url": { "type": "string", "nullable": true + }, + "disconnected": { + "type": "boolean", + "description": "True when GitHub no longer reports this installation." + }, + "suspended": { + "type": "boolean", + "description": "True when the installation is suspended on GitHub." } } } @@ -34272,6 +44752,108 @@ } } }, + "task-config-owner-has-one": { + "type": "object", + "properties": { + "data": { + "oneOf": [ + { + "$ref": "#/components/schemas/organizations-identifier" + } + ] + } + } + }, + "task-configs": { + "type": "object", + "required": [ + "type", + "attributes" + ], + "properties": { + "id": { + "type": "string", + "readOnly": true + }, + "type": { + "type": "string", + "enum": [ + "task-configs" + ] + }, + "attributes": { + "type": "object", + "properties": { + "allowed-stages": { + "type": "array", + "description": "The run stages during which the task is evaluated.", + "items": { + "type": "string", + "enum": [ + "pre_plan", + "post_plan", + "pre_apply", + "post_apply" + ] + } + }, + "enforcement-level": { + "type": "string", + "description": "The enforcement level applied to the task's stages.", + "enum": [ + "advisory", + "mandatory" + ] + }, + "global": { + "type": "boolean", + "description": "Whether the task configuration applies to all child resources owned for the owner. When `false`, the configuration only applies to the associated projects.\n" + }, + "created-at": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "updated-at": { + "type": "string", + "format": "date-time", + "readOnly": true + } + } + }, + "relationships": { + "type": "object", + "properties": { + "task": { + "$ref": "#/components/schemas/tasks-has-one" + }, + "owner": { + "$ref": "#/components/schemas/task-config-owner-has-one" + }, + "organization": { + "$ref": "#/components/schemas/organizations-has-one" + }, + "projects": { + "$ref": "#/components/schemas/projects-has-many" + } + } + }, + "links": { + "$ref": "#/components/schemas/self" + } + } + }, + "task-configs-envelope": { + "type": "object", + "required": [ + "data" + ], + "properties": { + "data": { + "$ref": "#/components/schemas/task-configs" + } + } + }, "workspace-tasks-envelope": { "type": "object", "required": [ diff --git a/skills/tfctl/known_release_hashes b/skills/tfctl/known_release_hashes index d51424e..38fc4c5 100644 --- a/skills/tfctl/known_release_hashes +++ b/skills/tfctl/known_release_hashes @@ -4,3 +4,4 @@ 4a3a72856d49a4de32b7b1f6a379918a956d3931f8a7ff71c06a1e3e4bd3e34f v0.3.0 01386dc8dbf4d2cf1b3ea027cd0b2ad3c4dfbbdb3701b75e19937352ddc35b96 v0.4.0-beta 5bdee5f7f47d9e77ffa8f1835f936235b4fa9dac5c864d01feb2b59613c5c05f v0.4.0 +88a4857f7cf920af88f652f5dca553256677f939369c87e4368691bc8763e87a v0.5.0-e2e1 diff --git a/version/VERSION b/version/VERSION index 4259c64..68a35f6 100644 --- a/version/VERSION +++ b/version/VERSION @@ -1 +1 @@ -0.5.0-dev +0.5.0-e2e1