Terraform
- Terraform Enterprise
- 1.0.x (latest)
- v202507-1
- v202506-1
- v202505-1
- v202504-1
- v202503-1
- v202502-2
- v202502-1
- v202501-1
- v202411-2
- v202411-1
- v202410-1
- v202409-2
- v202409-1
- v202408-1
- No versions of this document exist before v202408-1. Click below to redirect to the version homepage.
- v202407-1
- v202406-1
- v202405-1
- v202404-2
- v202404-1
- v202402-2
- v202402-1
- v202401-2
- v202401-1
- v202312-1
- v202311-1
- v202310-1
- v202309-1
- v202308-1
- v202307-1
- v202306-1
- v202305-2
- v202305-1
- v202304-1
- v202303-1
- v202302-1
- v202301-2
- v202301-1
- v202212-2
- v202212-1
- v202211-1
- v202210-1
- v202209-2
- v202209-1
- v202208-3
- v202208-2
- v202208-1
- v202207-2
- v202207-1
- v202206-1
Variable Sets API
A variable set is a resource that allows you to reuse the same variables across multiple workspaces and projects. For example, you could define a variable set of provider credentials and automatically apply it to a selection of workspaces, all workspaces in a project, or all workspaces in an organization.
You need read variables permission to view the variables for a particular workspace and to view the variable sets in the owning organization. To create or edit variable sets, your team must have Manage Workspace organization access.
Create a Variable Set
POST organizations/:organization_name/varsets
| Parameter | Description | 
|---|---|
| :organization_name | The name of the organization the workspace belongs to. | 
Request Body
Properties without a default value are required.
| Key path | Type | Default | Description | 
|---|---|---|---|
| data.attributes.name | string | The name of the variable set. | |
| data.attributes.description | string | "" | Text displayed in the UI to contextualize the variable set and its purpose. | 
| data.attributes.global | boolean | false | When true, HCP Terraform automatically applies the variable set to all current and future workspaces in the organization. | 
| data.attributes.priority | boolean | false | When true, the variables in the set override any other variable values with a more specific scope, including values set on the command line. | 
| data.relationships.workspaces | array | `[]` | Array of references to workspaces that the variable set should be assigned to. | 
| data.relationships.projects | array | `[]` | Array of references to projects that the variable set should be assigned to. | 
| data.relationships.vars | array | `[]` | Array of complete variable definitions that comprise the variable set. | 
HCP Terraform does not allow different global variable sets to contain conflicting variables with the same name and type. You will receive a 422 response if you try to create a global variable set that contains conflicting variables.
| Status | Response | Reason(s) | 
|---|---|---|
| 200 | JSON API document | Successfully added variable set | 
| 404 | JSON API error object | Organization not found, or user unauthorized to perform action | 
| 422 | JSON API error object | Problem with payload or request; details provided in the error object | 
Sample Payload
{
  "data": {
    "type": "varsets",
    "attributes": {
      "name": "MyVarset",
      "description": "Full of vars and such for mass reuse",
      "global": false,
      "priority": false,
    },
    "relationships": {
      "workspaces": {
        "data": [
          {
            "id": "ws-z6YvbWEYoE168kpq",
            "type": "workspaces"
          }
        ]
      },
      "vars": {
        "data": [
          {
            "type": "vars",
            "attributes": {
              "key": "c2e4612d993c18e42ef30405ea7d0e9ae",
              "value": "8676328808c5bf56ac5c8c0def3b7071",
              "category": "terraform"
            }
          }
        ]
      }
    }
  }
}
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request POST \
  --data @payload.json \
  https://app.terraform.io/api/v2/organizations/my-organization/varsets
Sample Response
{
  "data": {
    "id": "varset-kjkN545LH2Sfercv",
    "type": "varsets",
    "attributes": {
      "name": "MyVarset",
      "description": "Full of vars and such for mass reuse",
      "global": false,
      "priority": false,
    },
    "relationships": {
      "workspaces": {
        "data": [
          {
            "id": "ws-z6YvbWEYoE168kpq",
            "type": "workspaces"
          }
        ]
      },
      "projects": {
        "data": [
          {
            "id": "prj-lkjasdlkfjs",
            "type": "projects"
          }
        ]
      },
      "vars": {
        "data": [
          {
            "id": "var-Nh0doz0hzj9hrm34qq",
            "type": "vars",
            "attributes": {
              "key": "c2e4612d993c18e42ef30405ea7d0e9ae",
              "value": "8676328808c5bf56ac5c8c0def3b7071",
              "category": "terraform"
            }
          }
        ]
      }
    }
  }
}
Update a Variable Set
PUT/PATCH varsets/:varset_id
| Parameter | Description | 
|---|---|
| :varset_id | The variable set ID | 
HCP Terraform does not allow global variable sets to contain conflicting variables with the same name and type. You will receive a 422 response if you try to create a global variable set that contains conflicting variables.
Request Body
| Key path | Type | Default | Description | 
|---|---|---|---|
| data.attributes.name | string | The name of the variable set. | |
| data.attributes.description | string | Text displayed in the UI to contextualize the variable set and its purpose. | |
| data.attributes.global | boolean | When true, HCP Terraform automatically applies the variable set to all current and future workspaces in the organization. | |
| data.attributes.priority | boolean | false | When true, the variables in the set override any other variable values set with a more specific scope, including values set on the command line. | 
| data.relationships.workspaces | array | Optional Array of references to workspaces that the variable set should be assigned to. Sending an empty array clears all workspace assignments. | |
| data.relationships.projects | array | Optional Array of references to projects that the variable set should be assigned to. Sending an empty array clears all project assignments. | |
| data.relationships.vars | array | Optional Array of complete variable definitions to add to the variable set. | 
| Status | Response | Reason(s) | 
|---|---|---|
| 200 | JSON API document | Successfully updated variable set | 
| 404 | JSON API error object | Organization or variable set not found, or user unauthorized to perform action | 
| 422 | JSON API error object | Problem with payload or request; details provided in the error object | 
Sample Payload
{
  "data": {
    "type": "varsets",
    "attributes": {
      "name": "MyVarset",
      "description": "Full of vars and such for mass reuse. Now global!",
      "global": true,
      "priority": true,
    },
    "relationships": {
      "workspaces": {
        "data": [
          {
            "id": "ws-FRFwkYoUoGn1e34b",
            "type": "workspaces"
          }
        ]
      },
      "projects": {
        "data": [
          {
            "id": "prj-kFjgSzcZSr5c3imE",
            "type": "projects"
          }
        ]
      },
      "vars": {
        "data": [
          {
            "type": "vars",
            "attributes": {
              "key": "c2e4612d993c18e42ef30405ea7d0e9ae",
              "value": "8676328808c5bf56ac5c8c0def3b7071",
              "category": "terraform"
            }
          }
        ]
      }
    }
  }
}
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request PATCH \
  --data @payload.json \
  https://app.terraform.io/api/v2/varsets/varset-kjkN545LH2Sfercv
Sample Response
{
  "data": {
    "id": "varset-kjkN545LH2Sfercv",
    "type": "varsets",
    "attributes": {
      "name": "MyVarset",
      "description": "Full of vars and such for mass reuse. Now global!",
      "global": true,
      "priority": true
    },
    "relationships": {
      "vars": {
        "data": [
          {
            "id": "var-Nh0doz0hzj9hrm34qq",
            "type": "vars",
            "attributes": {
              "key": "c2e4612d993c18e42ef30405ea7d0e9ae",
              "value": "8676328808c5bf56ac5c8c0def3b7071",
              "category": "terraform"
            }
          }
        ]
      }
    }
  }
}
Delete a Variable Set
DELETE varsets/:varset_id
| Parameter | Description | 
|---|---|
| :varset_id | The variable set ID | 
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request DELETE \
  https://app.terraform.io/api/v2/varsets/varset-kjkN545LH2Sfercv
On success, this endpoint responds with no content.
Show Variable Set
Fetch details about the specified variable set.
GET varsets/:varset_id
| Parameter | Description | 
|---|---|
| :varset_id | The variable set ID | 
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request GET \
  https://app.terraform.io/api/v2/varsets/varset-kjkN545LH2Sfercv
Sample Response
{
  "data": {
    "id": "varset-kjkN545LH2Sfercv",
    "type": "varsets",
    "attributes": {
      "name": "MyVarset",
      "description": "Full of vars and such for mass reuse",
      "global": false,
      "priority": false,
      "updated-at": "2023-03-06T21:48:33.588Z",
      "var-count": 5,
      "workspace-count": 2,
      "project-count": 2
    },
    "relationships": {
      "organization": {
        "data": {
          "id": "hashicorp",
          "type": "organizations"
        }
      },
      "vars": {
        "data": [
          {
            "id": "var-mMqadSCxZtrQJAv8",
            "type": "vars"
          },
          {
            "id": "var-hFxUUKSk35QMsRVH",
            "type": "vars"
          },
          {
            "id": "var-fkd6N48tXRmoaPxH",
            "type": "vars"
          },
          {
            "id": "var-abcbBMBMWcZw3WiV",
            "type": "vars"
          },
          {
            "id": "var-vqvRKK1ZoqQCiMwN",
            "type": "vars"
          }
        ]
      },
      "workspaces": {
        "data": [
          {
            "id": "ws-UohFdKAHUGsQ8Dtf",
            "type": "workspaces"
          },
          {
            "id": "ws-XhGhaaCrsx9ATson",
            "type": "workspaces"
          }
        ]
      },
      "projects": {
        "data": [
          {
            "id": "prj-1JMwvPHFsdpsPhnt",
            "type": "projects"
          },
          {
            "id": "prj-SLDGqbYqELXE1obp",
            "type": "projects"
          }
        ]
      }
    }
  }
}
List Variable Sets
List all variable sets for an organization.
GET organizations/:organization_name/varsets
| Parameter | Description | 
|---|---|
| :organization_name | The name of the organization the variable sets belong to | 
List all variable sets for a project. This includes global variable sets from the project's organization.
GET projects/:project_id/varsets
| Parameter | Description | 
|---|---|
| :project_id | The project ID | 
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.
GET workspaces/:workspace_id/varsets
| Parameter | Description | 
|---|---|
| :workspace_id | The workspace ID | 
Query Parameters
All list endpoints support pagination with standard URL query parameters and searching with the q parameter. Remember to percent-encode [ as %5B and ] as %5D if your tooling doesn't automatically encode URLs.
| Parameter | Description | 
|---|---|
| page[number] | Optional. If omitted, the endpoint returns the first page. | 
| page[size] | Optional. If omitted, the endpoint returns 20 varsets per page. | 
| q | Optional. A search query string. You can search for a variable set using its name. | 
Sample Response
{
  "data": [
    {
      "id": "varset-kjkN545LH2Sfercv",
      "type": "varsets",
      "attributes": {
        "name": "MyVarset",
        "description": "Full of vars and such for mass reuse",
        "global": false,
        "priority": false,
        "updated-at": "2023-03-06T21:48:33.588Z",
        "var-count": 5,
        "workspace-count": 2,
        "project-count": 2
      },
      "relationships": {
        "organization": {
          "data": {
            "id": "hashicorp",
            "type": "organizations"
          }
        },
        "vars": {
          "data": [
            {
              "id": "var-mMqadSCxZtrQJAv8",
              "type": "vars"
            },
            {
              "id": "var-hFxUUKSk35QMsRVH",
              "type": "vars"
            },
            {
              "id": "var-fkd6N48tXRmoaPxH",
              "type": "vars"
            },
            {
              "id": "var-abcbBMBMWcZw3WiV",
              "type": "vars"
            },
            {
              "id": "var-vqvRKK1ZoqQCiMwN",
              "type": "vars"
            }
          ]
        },
        "workspaces": {
          "data": [
            {
              "id": "ws-UohFdKAHUGsQ8Dtf",
              "type": "workspaces"
            },
            {
              "id": "ws-XhGhaaCrsx9ATson",
              "type": "workspaces"
            }
          ]
        },
        "projects": {
          "data": [
            {
              "id": "prj-1JMwvPHFsdpsPhnt",
              "type": "projects"
            },
            {
              "id": "prj-SLDGqbYqELXE1obp",
              "type": "projects"
            }
          ]
        }
      }
    }
  ],
  "links": {
    "self": "https://app.terraform.io/api/v2/organizations/hashicorp/varsets?page%5Bnumber%5D=1&page%5Bsize%5D=20",
    "first": "https://app.terraform.io/api/v2/organizations/hashicorp/varsets?page%5Bnumber%5D=1&page%5Bsize%5D=20",
    "prev": null,
    "next": null,
    "last": "https://app.terraform.io/api/v2/organizations/hashicorp/varsets?page%5Bnumber%5D=1&page%5Bsize%5D=20"
  },
  "meta": {
    "pagination": {
      "current-page": 1,
      "page-size": 20,
      "prev-page": null,
      "next-page": null,
      "total-pages": 1,
      "total-count": 1
    }
  }
}
Variable Relationships
Add Variable
POST varsets/:varset_external_id/relationships/vars
| Parameter | Description | 
|---|---|
| :varset_id | The variable set ID | 
Request Body
This POST endpoint requires a JSON object with the following properties as a request payload.
Properties without a default value are required.
| Key path | Type | Default | Description | 
|---|---|---|---|
| data.type | string | Must be "vars". | |
| data.attributes.key | string | The name of the variable. | |
| data.attributes.value | string | "" | The value of the variable. | 
| data.attributes.description | string | The description of the variable. | |
| data.attributes.category | string | Whether this is a Terraform or environment variable. Valid values are "terraform"or"env". | |
| data.attributes.hcl | bool | false | Whether to evaluate the value of the variable as a string of HCL code. Has no effect for environment variables. | 
| data.attributes.sensitive | bool | false | Whether the value is sensitive. If true, variable is not visible in the UI. | 
HCP Terraform does not allow different global variable sets to contain conflicting variables with the same name and type. You will receive a 422 response if you try to add a conflicting variable to a global variable set.
| Status | Response | Reason(s) | 
|---|---|---|
| 200 | JSON API document | Successfully added variable to variable set | 
| 404 | JSON API error object | Variable set not found, or user unauthorized to perform action | 
| 422 | JSON API error object | Problem with payload or request; details provided in the error object | 
Sample Payload
{
  "data": {
    "type": "vars",
    "attributes": {
      "key": "g6e45ae7564a17e81ef62fd1c7fa86138",
      "value": "61e400d5ccffb3782f215344481e6c82",
      "description": "cheeeese",
      "sensitive": false,
      "category": "terraform",
      "hcl": false
    }
  }
}
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request POST \
  --data @payload.json \
  https://app.terraform.io/api/v2/varsets/varset-4q8f7H0NHG733bBH/relationships/vars
Sample Respone
{
  "data": {
    "id":"var-EavQ1LztoRTQHSNT",
    "type": "vars",
    "attributes": {
      "key": "g6e45ae7564a17e81ef62fd1c7fa86138",
      "value": "61e400d5ccffb3782f215344481e6c82",
      "description": "cheeeese",
      "sensitive": false,
      "category": "terraform",
      "hcl": false
    }
  }
}
Update a Variable in a Variable Set
PATCH varsets/:varset_id/relationships/vars/:var_id
| Parameter | Description | 
|---|---|
| :varset_id | The variable set ID | 
| :var_id | The ID of the variable to delete | 
HCP Terraform does not allow different global variable sets to contain conflicting variables with the same name and type. You will receive a 422 response if you try to add a conflicting variable to a global variable set.
| Status | Response | Reason(s) | 
|---|---|---|
| 200 | JSON API document | Successfully updated variable for variable set | 
| 404 | JSON API error object | Variable set not found, or user unauthorized to perform action | 
| 422 | JSON API error object | Problem with payload or request; details provided in the error object | 
Sample Payload
{
  "data": {
    "type": "vars",
    "attributes": {
      "key": "g6e45ae7564a17e81ef62fd1c7fa86138",
      "value": "61e400d5ccffb3782f215344481e6c82",
      "description": "new cheeeese",
      "sensitive": false,
      "category": "terraform",
      "hcl": false
    }
  }
}
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request PATCH \
  --data @payload.json \
  https://app.terraform.io/api/v2/varsets/varset-4q8f7H0NHG733bBH/relationships/vars/var-EavQ1LztoRTQHSNT
Sample Response
{
  "data": {
    "id":"var-EavQ1LztoRTQHSNT",
    "type": "vars",
    "attributes": {
      "key": "g6e45ae7564a17e81ef62fd1c7fa86138",
      "value": "61e400d5ccffb3782f215344481e6c82",
      "description": "new cheeeese",
      "sensitive": false,
      "category": "terraform",
      "hcl": false
    }
  }
}
Delete a Variable in a Variable Set
DELETE varsets/:varset_id/relationships/vars/:var_id
| Parameter | Description | 
|---|---|
| :varset_id | The variable set ID | 
| :var_id | The ID of the variable to delete | 
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request DELETE \
  https://app.terraform.io/api/v2/varsets/varset-4q8f7H0NHG733bBH/relationships/vars/var-EavQ1LztoRTQHSNT
On success, this endpoint responds with no content.
List Variables in a Variable Set
GET varsets/:varset_id/relationships/vars
| Parameter | Description | 
|---|---|
| :varset_id | The variable set ID | 
Sample Response
{
  "data": [
    {
      "id": "var-134r1k34nj5kjn",
      "type": "vars",
      "attributes": {
        "key": "F115037558b045dd82da40b089e5db745",
        "value": "1754288480dfd3060e2c37890422905f",
        "sensitive": false,
        "category": "terraform",
        "hcl": false,
        "created-at": "2021-10-29T18:54:29.379Z",
        "description": ""
      },
      "relationships": {
        "varset": {
          "data": {
            "id": "varset-992UMULdeDuebi1x",
            "type": "varsets"
          },
          "links": { "related": "/api/v2/varsets/1" }
        }
      },
      "links": { "self": "/api/v2/vars/var-BEPU9NjPVCiCfrXj" }
    }
  ],
  "links": {
    "self": "app.terrafor.io/app/varsets/varset-992UMULdeDuebi1x/vars",
    "first": "app.terrafor.io/app/varsets/varset-992UMULdeDuebi1x/vars?page=1",
    "prev": null,
    "next": null,
    "last": "app.terrafor.io/app/varsets/varset-992UMULdeDuebi1x/vars?page=1"
  }
}
Apply Variable Set to Workspaces
Accepts a list of workspaces to add the variable set to.
POST varsets/:varset_id/relationships/workspaces
| Parameter | Description | 
|---|---|
| :varset_id | The variable set ID | 
Properties without a default value are required.
| Key path | Type | Default | Description | 
|---|---|---|---|
| data[].type | string | Must be "workspaces" | |
| data[].id | string | The id of the workspace to add the variable set to | 
| Status | Response | Reason(s) | 
|---|---|---|
| 204 | Successfully added variable set to the requested workspaces | |
| 404 | JSON API error object | Variable set not found or user unauthorized to perform action | 
| 422 | JSON API error object | Problem with payload or request; details provided in the error object | 
Sample Payload
{
  "data": [
    {
      "type": "workspaces",
      "id": "ws-YwfuBJZkdai4xj9w"
    }
  ]
}
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request POST \
  --data @payload.json \
  https://app.terraform.io/api/v2/varsets/varset-kjkN545LH2Sfercv/relationships/workspaces
Remove a Variable Set from Workspaces
Accepts a list of workspaces to remove the variable set from.
DELETE varsets/:varset_id/relationships/workspaces
| Parameter | Description | 
|---|---|
| :varset_id | The variable set ID | 
Properties without a default value are required.
| Key path | Type | Default | Description | 
|---|---|---|---|
| data[].type | string | Must be "workspaces" | |
| data[].id | string | The id of the workspace to delete the variable set from | 
| Status | Response | Reason(s) | 
|---|---|---|
| 204 | Successfully removed variable set from the requested workspaces | |
| 404 | JSON API error object | Variable set not found or user unauthorized to perform action | 
| 422 | JSON API error object | Problem with payload or request; details provided in the error object | 
Sample Payload
{
  "data": [
    {
      "type": "workspaces",
      "id": "ws-YwfuBJZkdai4xj9w"
    },
    {
      "type": "workspaces",
      "id": "ws-YwfuBJZkdai4xj9w"
    }
  ]
}
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request DELETE \
  --data @payload.json \
  https://app.terraform.io/api/v2/varsets/varset-kjkN545LH2Sfercv/relationships/workspaces
Apply Variable Set to Projects
Accepts a list of projects to add the variable set to. When you apply a variable set to a project, all the workspaces in that project will have the variable set applied to them.
POST varsets/:varset_id/relationships/projects
| Parameter | Description | 
|---|---|
| :varset_id | The variable set ID | 
Properties without a default value are required.
| Key path | Type | Default | Description | 
|---|---|---|---|
| data[].type | string | Must be "projects" | |
| data[].id | string | The id of the project to add the variable set to | 
| Status | Response | Reason(s) | 
|---|---|---|
| 204 | Successfully added variable set to the requested projects | |
| 404 | JSON API error object | Variable set not found or user unauthorized to perform action | 
| 422 | JSON API error object | Problem with payload or request; details provided in the error object | 
Sample Payload
{
  "data": [
    {
      "type": "projects",
      "id": "prj-YwfuBJZkdai4xj9w"
    }
  ]
}
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request POST \
  --data @payload.json \
  https://app.terraform.io/api/v2/varsets/varset-kjkN545LH2Sfercv/relationships/projects
Remove a Variable Set from Projects
Accepts a list of projects to remove the variable set from.
DELETE varsets/:varset_id/relationships/projects
| Parameter | Description | 
|---|---|
| :varset_id | The variable set ID | 
Properties without a default value are required.
| Key path | Type | Default | Description | 
|---|---|---|---|
| data[].type | string | Must be "projects" | |
| data[].id | string | The id of the project to delete the variable set from | 
| Status | Response | Reason(s) | 
|---|---|---|
| 204 | Successfully removed variable set from the requested projects | |
| 404 | JSON API error object | Variable set not found or user unauthorized to perform action | 
| 422 | JSON API error object | Problem with payload or request; details provided in the error object | 
Sample Payload
{
  "data": [
    {
      "type": "projects",
      "id": "prj-YwfuBJZkdai4xj9w"
    },
    {
      "type": "projects",
      "id": "prj-lkjasdfiojwerlkj"
    }
  ]
}
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request DELETE \
  --data @payload.json \
  https://app.terraform.io/api/v2/varsets/varset-kjkN545LH2Sfercv/relationships/projects
Available Related Resources
The GET endpoints above can optionally return related resources, if requested with the include query parameter. The following resource types are available:
| Resource Name | Description | 
|---|---|
| vars | Show each variable in a variable set and all of their attributes including id,key,value,sensitive,category,hcl,created_at,  anddescription. |