Terraform
Stack configurations API reference
A Stack configuration version is a snapshot of all of the pieces that make up your Stack. To learn more about what makes up a Stack configuration version, refer to Configuration versions.
Overview
The scope of the API includes the following endpoints:
| Method | Path | Action |
|---|---|---|
POST | /stacks/:stack_id/stack-configurations | Call this endpoint to create a Stack configuration. |
POST | /stacks/:stack_id/fetch-latest-from-vcs | Call this endpoint to fetch the latest Stack configuration. |
GET | /stacks/:stack_id/stack-configurations | Call this endpoint to list Stack configurations. |
GET | /stack-configurations/:stack_configuration_id | Call this endpoint to show a Stack configuration. |
GET | /stack-configurations/:stack_configuration_id/stack-deployment-group-summaries | Call this endpoint to list Deployment Group Summaries. |
GET | /stack-configurations/:stack_configuration_id/stack-diagnostics | Call this endpoint to list Stack configuration diagnostics. |
GET | /stack-configurations/:stack_configuration_id/upload-url | Call this endpoint to fetch Stack configuration upload url. |
GET | /stack-configurations/:stack_configuration_id/source-bundle | Call this endpoint to fetch Stack configuration source bundle. |
Create a Stack configuration
This endpoint creates a new Stack configuration for the specified Stack. It can create several kinds of configurations, controlled by the source query parameter:
manual(default) - Creates an empty Stack configuration. You will have to retrieve theupload-urlafter creation (see the upload-url endpoint documentation below) and upload a configuration archive to enable the Stack to prepare and plan the configuration. If the Stack is connected to a VCS repository, this mode can only be used if thespeculativeattribute is also set totrue.fetch- Fetches new Stack configuration content from the connected VCS repository. This mode is not valid for stacks that are not connected to a VCS repository.reuse- Creates a new configuration that reuses the content from the latest Stack configuration, without requiring another upload or fetch. This can be useful to fix drift, apply changed values from variable set stores, or destroy the Stack infrastructure (when combined with thedestroy-allattribute). This mode is not valid for stacks that don't have a latest configuration, or whose latest configuration is still being prepared.
POST /stacks/:stack_id/stack-configurations?source=:source
| Parameter | Description |
|---|---|
:stack_id | The target Stack ID to create a configuration |
Query Parameters
This POST endpoint accepts an optional query parameter to affect the type of configuration created.
| Parameter | Default | Description |
| source | manual | The content source mode to use for this configuration. Valid values are manual, fetch, and reuse. See above for descriptions of these modes.
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.attributes.speculative | boolean | false | Specifies if this is a speculative configuration that HCP Terraform cannot converge past the plan step. |
data.attributes.destroy-all | boolean | false | If true, the created configuration will behave as though every deployment in the configuration was declared with destroy = true. This enables tearing down the entire Stack's infrastructure without pushing a new configuration. |
| Status | Response | Reason |
|---|---|---|
| 200 | JSON API document | Successfully created a Stack configuration. |
| 404 | JSON API error object | Not found, or the user is unauthorized to perform this action. |
| 422 | JSON API error object | Malformed request body (e.g., missing attributes, wrong types, etc.). |
| 500 | JSON API error object | Internal system failure. |
Sample Payload
{
"data": {
"attributes": {
"speculative": true
}
}
}
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/stacks/st-YwBzgFeeW6Mq4wkH/stack-configurations
Sample Response
{
"data": {
"id": "stc-4EWffseuNa1FpfDH",
"type": "stack-configurations",
"attributes": {
"status": "pending",
"sequence-number": 2,
"preparing-event-stream-url": "https://archivist.terraform.io/v1/object/dmF1bHQ6djE6WTVtSkdnbE01anBlK3A2dEhWd3ZKYlB0M2hUSzFkNm9PdWhrcWo4QzdMMURIUnFNSTlOSFZGdkt6ZloxWjZlUUlYaEd2cnlVV3NoNnlweHNzNnZNQkRVSk9JS2R2NE80Q2ZWTHhsbGxwRzgyMnQrVWlEd3o2c2VueEs1ZGducmtmNG0rdmIzR1hxeGtmZThsTk1hUTJLNHJrSkZiUk5saEpad1lEelF1aEZ3MG8zTks2VlNldHRHV0YzUG0rUmdneUpsOXU2QlFaYk9EUjlEUWlTZUpQeUE4UEVwejczZmxxRFgrTGIwaDVzQmxwUHNuUWZycEtKZm9VQmZpemZCbSs0RWJxdC9BbFlpM216VXE3dk1GcnplbkxIQ2FyM3Q3Y0o5WGc1QjFLUElGRHRweXI4VE1JOWFHUm9iQ1NwSXJpR2pVdng4OHh1U0FLWXpYVUwvZTJuUSs2WURSd1FoMDNVUm5jYmhmWStGK3VVL3p3QmtYcG1laA",
"created-at": "2025-09-16T16:29:22.855Z",
"updated-at": "2025-09-16T16:29:22.855Z",
"speculative": false,
"components": []
},
"relationships": {
"stack": {
"data": {
"id": "st-YwBzgFeeW6Mq4wkH",
"type": "stacks"
}
},
"stack-diagnostics": {
"links": {
"related": "/api/v2/stack-configurations/stc-4EWffseuNa1FpfDH/stack-diagnostics"
}
},
"stack-deployment-groups": {
"links": {
"related": "/api/v2/stack-configurations/stc-4EWffseuNa1FpfDH/stack-deployment-groups"
}
}
},
"links": {
"self": "/api/v2/stack-configurations/stc-4EWffseuNa1FpfDH",
"json-schemas": "/api/v2/stack-configurations/stc-4EWffseuNa1FpfDH/json-schemas"
},
"meta": {
"beta": false
}
}
}
Fetch a Stack configuration
This endpoint creates a Stack configuration for a VCS-backed Stack by pulling it from the head of the Stack's branch.
POST /stacks/:stack_id/fetch-latest-from-vcs
| Parameter | Description |
|---|---|
:stack_id | The target Stack ID to fetch a configuration for. |
| Status | Response | Reason |
|---|---|---|
| 204 | No Content | Successfully started the process of retrieving the latest configuration from VCS. |
| 404 | JSON API error object | Stack not found, or user unauthorized to perform action |
Sample Request
$ curl\
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/vnd.api+json" \
https://app.terraform.io/api/v2/stack/st-SihZTyXKfNXUWuUa/fetch-latest-from-vcs
List Stack configurations
This endpoint lists configurations for the specified Stack.
GET /stacks/:stack_id/stack-configurations
| Parameter | Description |
|---|---|
:stack_id | The Stack id to list configurations for. |
Query Parameters
This endpoint supports pagination with standard URL query parameters; 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 will return the first page. |
page[size] | Optional. If omitted, the endpoint will return 20 Stack configurations per page. |
Available Related Resources
This GET endpoint can optionally return related resources, if requested with the include query parameter. The following resource types are available:
| Resource Name | Description |
|---|---|
ingress_attributes | The vcs information associated with the Stack configurations. |
Sample Request
$ curl\
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/vnd.api+json" \
https://app.terraform.io/api/v2/stacks/st-YwBzgFeeW6Mq4wkH/stack-configurations
Sample Response
{
"data": [
{
"id": "stc-4EWffseuNa1FpfDH",
"type": "stack-configurations",
"attributes": {
"status": "pending",
"sequence-number": 2,
"preparing-event-stream-url": "https://archivist.terraform.io/v1/object/dmF1bHQ6djE6N2JTaDVOcEVwbFZVR21vZTBkaEl4S1dOY0VRREMrdnB1L0hGUTFmWnNvdUZVaVpYWDdLZWJPMUhjRmdkdkJVY0gzc245VG9KMVpjTXFTbE9JWlJwQ2FzbTh0c3pUNFRzWW1OV1pIbjhTMVVEa0V3MVlCYVNLYXdsaUNLYU1QellZVzZDdFQ1ZStIczhnd1o4cnprd1hjZEJTaUZnMXJsRzF4aXFidXdaNHBXM0VLeFR6N3JiYkZpVEE5OU9jRTU2SVpaa29kSXJuWlowYW1La0FKL1VjT095eCtNUTRXMUJ0S3VydytWZ0Z3dWZtdHYrNkFwVDg0RmdVb1FGOTBIRS9JZjgvWk81QXgyOWl3U1pRa0pzVnByUWdIMFE4UTBNQzk5N2lkaWNzZmpVdVRwTWR3ZUJUNlFEN0JVSENjVU94Yi82ZUkwV1NVS21vZnNKMjk2QTNxSS91OGNOUUZjRVpmNE1Cb3pYa1hpd2pIaVJPVEdRNEhKZw",
"created-at": "2025-09-16T16:29:22.855Z",
"updated-at": "2025-09-16T16:29:22.855Z",
"speculative": false,
"components": []
},
"relationships": {
"stack": {
"data": {
"id": "st-YwBzgFeeW6Mq4wkH",
"type": "stacks"
}
},
"stack-diagnostics": {
"links": {
"related": "/api/v2/stack-configurations/stc-4EWffseuNa1FpfDH/stack-diagnostics"
}
},
"stack-deployment-groups": {
"links": {
"related": "/api/v2/stack-configurations/stc-4EWffseuNa1FpfDH/stack-deployment-groups"
}
}
},
"links": {
"self": "/api/v2/stack-configurations/stc-4EWffseuNa1FpfDH",
"json-schemas": "/api/v2/stack-configurations/stc-4EWffseuNa1FpfDH/json-schemas"
},
"meta": {
"beta": false
}
}
],
"links": {
"self": "https://app.terraform.io/api/v2/stacks/st-YwBzgFeeW6Mq4wkH/stack-configurations?page%5Bnumber%5D=1&page%5Bsize%5D=1",
"first": "https://app.terraform.io/api/v2/stacks/st-YwBzgFeeW6Mq4wkH/stack-configurations?page%5Bnumber%5D=1&page%5Bsize%5D=1",
"prev": null,
"next": "https://app.terraform.io/api/v2/stacks/st-YwBzgFeeW6Mq4wkH/stack-configurations?page%5Bnumber%5D=2&page%5Bsize%5D=1",
"last": "https://app.terraform.io/api/v2/stacks/st-YwBzgFeeW6Mq4wkH/stack-configurations?page%5Bnumber%5D=2&page%5Bsize%5D=1"
},
"meta": {
"pagination": {
"current-page": 1,
"page-size": 1,
"prev-page": null,
"next-page": 2,
"total-pages": 2,
"total-count": 2
}
}
}
Show Stack configuration
GET /stack-configurations/:stack_configuration_id
This endpoint returns details of the specified Stack configuration.
| Parameter | Description |
|---|---|
:stack_configuration_id | The Stack configuration id. |
Available Related Resources
This GET endpoint can optionally return related resources, if requested with the include query parameter. The following resource types are available:
| Resource Name | Description |
|---|---|
ingress_attributes | The vcs information associated with the Stack configuration. |
stack_diagnostics | The Stack diagnostics associated with the Stack configuration. |
Sample Request
$ curl\
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/vnd.api+json" \
https://app.terraform.io/api/v2/stack-configurations/stc-4EWffseuNa1FpfDH
Sample Response
{
"data": {
"id": "stc-4EWffseuNa1FpfDH",
"type": "stack-configurations",
"attributes": {
"status": "pending",
"sequence-number": 2,
"preparing-event-stream-url": "https://archivist.terraform.io/v1/object/dmF1bHQ6djE6Umh4WE9sTUlGb0F3Q0NFTUQ4a2ZIOUlvZ1ZWNmlEOERFRVgyUVBJY2ZZMGgwbUJpS0tQd2FYdjYvOUpMLzAyTUdlM2hLYWt5RGdlRmZUZm84b0trajZpenNodDcrVzB4Y3ZDanhWYUZ0YXFGRWx4aG5GMFVwQ2VmbUtVSzU0L2dKYjJGdE5rekoydG9mTEF6bnR1L2hDcjEvYkxtNUNyOE90UUxlVEQ3cTl3emtqTU9IQlFOeDhIcnk3Tk8yNVZRcm9JQ2swUjdsYmZ6OTJBS0FuOWpJSmF3Y0ZDK2NEU3hoRmFoL0VUWVhIR25QVUxJSmFvK2RqcytlQ2JMc1ROZVphNDFBcEVoUjJZeGJSYyttSEwydnhCTjhnUnFyVXlCUEJOUlVyR0g1aW1pMHFuZ1EybTIxOGpjNWJlMnYrRHY5L0swV3RodGIvZk1DejN5SFBGSnJtVndyS2NGMmpUekd6ajByd2RyeXZqdHVLcFRIUnFobWdTeQ",
"created-at": "2025-09-16T16:29:22.855Z",
"updated-at": "2025-09-16T16:29:22.855Z",
"speculative": false,
"components": []
},
"relationships": {
"stack": {
"data": {
"id": "st-YwBzgFeeW6Mq4wkH",
"type": "stacks"
}
},
"stack-diagnostics": {
"links": {
"related": "/api/v2/stack-configurations/stc-4EWffseuNa1FpfDH/stack-diagnostics"
}
},
"stack-deployment-groups": {
"links": {
"related": "/api/v2/stack-configurations/stc-4EWffseuNa1FpfDH/stack-deployment-groups"
}
}
},
"links": {
"self": "/api/v2/stack-configurations/stc-4EWffseuNa1FpfDH",
"json-schemas": "/api/v2/stack-configurations/stc-4EWffseuNa1FpfDH/json-schemas"
},
"meta": {
"beta": false
}
}
}
List Deployment Group Summaries
This endpoint lists deployment group summaries for the specified Stack configuration.
GET /stack-configurations/:stack_configuration_id/stack-deployment-group-summaries
| Parameter | Description |
|---|---|
:stack_configuration_id | The Stack configuration id to list the deployment group summaries for. |
Query Parameters
This endpoint supports pagination with standard URL query parameters; 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 will return the first page. |
page[size] | Optional. If omitted, the endpoint will return 20 Stack configuration summaries per page. |
Sample Request
$ curl\
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/vnd.api+json" \
https://app.terraform.io/api/v2/stack-configurations/stc-yyu5ajbMU45nea3L/stack-deployment-group-summaries
Sample Response
{
"data": [
{
"id": "sdg-wPG9EBFcz7LvYSJ9",
"type": "stack-deployment-group-summaries",
"attributes": {
"name": "simple_default",
"status": "succeeded",
"status-counts": {
"pending": 0,
"pre-deploying": 0,
"pre-deploying-pending-operator": 0,
"acquiring-lock": 0,
"deploying": 0,
"deploying-pending-operator": 0,
"succeeded": 1,
"failed": 0,
"abandoned": 0
}
},
"relationships": {
"stack-deployment-group": {
"data": {
"id": "sdg-wPG9EBFcz7LvYSJ9",
"type": "stack-deployment-groups"
}
}
}
}
],
"links": {
"self": "https://app.terraform.io/api/v2/stack-configurations/stc-yyu5ajbMU45nea3L/stack-deployment-group-summaries?page%5Bnumber%5D=1&page%5Bsize%5D=20",
"first": "https://app.terraform.io/api/v2/stack-configurations/stc-yyu5ajbMU45nea3L/stack-deployment-group-summaries?page%5Bnumber%5D=1&page%5Bsize%5D=20",
"prev": null,
"next": null,
"last": "https://app.terraform.io/api/v2/stack-configurations/stc-yyu5ajbMU45nea3L/stack-deployment-group-summaries?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
}
}
}
List Stack configuration diagnostics
This endpoint lists the diagnostics related to the preparation process for the specified Stack configuration.
GET /stack-configurations/:stack_configuration_id/stack-diagnostics
| Parameter | Description |
|---|---|
:stack_configuration_id | The Stack configuration id to list the diagnostics for. |
Query Parameters
This endpoint supports pagination with standard URL query parameters; 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 will return the first page. |
page[size] | Optional. If omitted, the endpoint will return 20 Stack configuration diagnostics per page. |
Sample Request
$ curl\
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/vnd.api+json" \
https://app.terraform.io/api/v2/stack-configurations/stc-vHvM8dY1cYCVsfuT/stack-diagnostics
Sample Response
{
"data": [
{
"id": "std-fU7vZ3RS1TRYnrUs",
"type": "stack-diagnostics",
"attributes": {
"severity": "error",
"summary": "Diagnostics reported",
"detail": "While preparing the configuration, HCP Terraform reported 1 error.",
"diags": [
{
"range": {
"end": {
"byte": 213,
"line": 10,
"column": 4
},
"start": {
"byte": 212,
"line": 10,
"column": 3
},
"source": "git::https://github.com/aaabdelgany/pet-nulls-stack.git//deployments.tfdeploy.hcl?ref=41607dab260dcd108a81ce1fa935bf72c93abbf6",
"filename": "deployments.tfdeploy.hcl"
},
"detail": "The argument \"deployment_group\" was already set at git::https://github.com/aaabdelgany/pet-nulls-stack.git//deployments.tfdeploy.hcl?ref=41607dab260dcd108a81ce1fa935bf72c93abbf6:9,3-19. Each argument may be set only once.",
"snippet": {
"code": " deployment_group = deployment_group.custom2",
"values": [],
"context": "deployment \"simple\"",
"start_line": 10,
"highlight_end_offset": 3,
"highlight_start_offset": 2
},
"summary": "Attribute redefined",
"severity": "error"
}
],
"acknowledged": true,
"acknowledged-at": "2025-08-27T18:29:33.605Z",
"created-at": "2025-08-27T18:16:37.380Z"
},
"relationships": {
"stack-configuration": {
"data": {
"id": "stc-vHvM8dY1cYCVsfuT",
"type": "stack-configurations"
}
}
},
"links": {
"self": "/api/v2/stack-diagnostics/std-fU7vZ3RS1TRYnrUs"
}
}
],
"links": {
"self": "https://app.terraform.io/api/v2/stack-configurations/stc-vHvM8dY1cYCVsfuT/stack-diagnostics?page%5Bnumber%5D=1&page%5Bsize%5D=20",
"first": "https://app.terraform.io/api/v2/stack-configurations/stc-vHvM8dY1cYCVsfuT/stack-diagnostics?page%5Bnumber%5D=1&page%5Bsize%5D=20",
"prev": null,
"next": null,
"last": "https://app.terraform.io/api/v2/stack-configurations/stc-vHvM8dY1cYCVsfuT/stack-diagnostics?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
}
}
}
Fetch Stack configuration upload URL
GET /stack-configurations/:stack_configuration_id/upload-url
This endpoint fetches the Stack configuration upload url. Use this URL to upload a raw configuration file for a manually created Stack configuration.
| Parameter | Description |
|---|---|
:stack_configuration_id | The Stack configuration id to fetch the upload URL for. |
Sample Request
$ curl\
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/vnd.api+json" \
https://app.terraform.io/api/v2/stack-configurations/stc-SihZTyXKfNXUWuUa/upload-url
Sample Response
{
"data": {
"source-upload-url": "https://github.com/stack-config-uploads"
},
"links": {
"self": "/api/v2/stack-configurations/stc-SihZTyXKfNXUWuUa/upload-url"
}
}
Fetch Stack configuration source bundle
GET /stack-configurations/:stack_configuration_id/source-bundle
This endpoint redirects to the download URL for a Stack configuration source bundle.
| Parameter | Description |
|---|---|
:stack_configuration_id | The Stack configuration id to fetch the source bundle for. |
| Status | Response | Reason |
|---|---|---|
| 302 | HTTP Redirect | Successfully redirect client to temporary source bundle download URL |
| 404 | JSON API error object | Stack configuration not found, or user unauthorized to perform action |