The no-code provisioning API allows you to create, configure, and deploy Terraform modules in the no-code provisioning workflows within HCP Terraform. For more information on no-code modules, refer to Designing No-Code Ready Modules.
POST /organizations/:organization_name/no-code-modules
:organization_name
The name of the organization the module belongs to.
To deploy a module using the no-code provisioning workflow, the module must meet the following requirement:
You can send a POST
request to the /no-code-modules
endpoint to enable no-code provisioning for a specific module. You can also call this endpoint to set options for the allowed values of a variable for a no-code module in your organization.
Note: This endpoint can not be accessed with organization tokens. You must access it with a user token or team token.
Request BodyThis 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 Descriptiondata.type
string Must be "no-code-modules"
. data.attributes.version-pin
string Latest version of the module The module version to use in no-code provisioning workflows. data.attributes.enabled
boolean false
Set to true
to enable no-code provisioning workflows. data.relationships.registry-module.data.id
string The ID of a module in the organization's private registry. data.relationships.registry-module.data.type
string Must be "registry-module"
. data.relationships.variable-options.data[].type
string Must be "variable-options"
. data.relationships.variable-options.data[].attributes.variable-name
string The name of a variable within the module. data.relationships.variable-options.data[].attributes.variable-type
string The data type for the variable. Can be any type supported by Terraform. data.relationships.variable-options.data[].attributes.options
Any[] A list of allowed values for the variable. Sample Payload
{
"data": {
"type": "no-code-modules",
"attributes": {
"version-pin": "1.0.1",
"enabled": true
},
"relationships": {
"registry-module": {
"data": {
"id": "mod-2aaFrmRPZs2N9epr",
"type": "registry-module"
}
},
"variable-options": {
"data": [
{
"type": "variable-options",
"attributes": {
"variable-name": "amis",
"variable-type": "string",
"options": [
"ami-1",
"ami-2",
"ami-3"
]
}
},
{
"type": "variable-options",
"attributes": {
"variable-name": "region",
"variable-type": "string",
"options": [
"eu-north-1",
"us-east-2",
"us-west-1"
]
}
}
]
}
}
}
}
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/no-code-modules
Sample Response
{
"data": {
"id": "nocode-9HE91XDNY3faePn2",
"type": "no-code-modules",
"attributes": {
"enabled": true,
"version-pin": "1.0.1"
},
"relationships": {
"organization": {
"data": {
"id": "my-organization",
"type": "organizations"
},
"links": {
"related": "/api/v2/organizations/my-organization"
}
},
"registry-module": {
"data": {
"id": "mod-2aaFrmRPZs2N9epr",
"type": "registry-modules"
},
"links": {
"related": "/api/v2/registry-modules/mod-2aaFrmRPZs2N9epr"
}
},
"variable-options": {
"data": [
{
"id": "ncvaropt-fcHDfnZ1EGdRzFNC",
"type": "variable-options"
},
{
"id": "ncvaropt-dZMfdh9KBcwFjyv2",
"type": "variable-options"
}
]
}
},
"links": {
"self": "/api/v2/no-code-modules/nocode-9HE91XDNY3faePn2"
}
}
}
PATCH /no-code-modules/:id
:id
The unique identifier of the no-code module.
Send a PATCH
request to the /no-code-modules/:id
endpoint to update the settings for the no-code provisioning of a module. You can update the following settings:
The API call that enables no-code provisioning for a module returns that module's unique identifier.
Note: This endpoint cannot be accessed with organization tokens. You must access it with a user token or team token.
Request BodyThis PATCH endpoint requires a JSON object with the following properties as a request payload.
Properties without a default value are required.
Key path Type Default Descriptiondata.type
string Must be "no-code-modules"
. data.attributes.version-pin
string Existing value The module version to use in no-code provisioning workflows. data.attributes.enabled
boolean Existing value Set to true
to enable no-code provisioning workflows, or false
to disable them. data.relationships.registry-module.data.id
string Existing value The ID of a module in the organization's Private Registry. data.relationships.registry-module.data.type
string Existing value Must be "registry-module"
. data.relationships.variable-options.data[].id
string The ID of an existing variable-options set. If provided, a new variable-options set replaces the set with this ID. If not provided, this creates a new variable-option set. data.relationships.variable-options.data[].type
string Must be "variable-options"
. data.relationships.variable-options.data[].attributes.variable-name
string The name of a variable within the module. data.relationships.variable-options.data[].attributes.variable-type
string The data type for the variable. Can be any type supported by Terraform. data.relationships.variable-options.data[].attributes.options
Any[] A list of allowed values for the variable. Sample Payload
{
"data": {
"type": "no-code-modules",
"attributes": {
"enabled": false
},
"relationships": {
"registry-module": {
"data": {
"id": "mod-zyai9dwH4VPPaVuC",
"type": "registry-module"
}
},
"variable-options": {
"data": [
{
"id": "ncvaropt-fcHDfnZ1EGdRzFNC",
"type": "variable-options",
"attributes": {
"variable-name": "Linux AMIs",
"variable-type": "array",
"options": [
"Xenial Xerus",
"Trusty Tahr"
]
}
},
{
"id": "ncvaropt-dZMfdh9KBcwFjyv2",
"type": "variable-options",
"attributes": {
"variable-name": "region",
"variable-type": "array",
"options": [
"eu-north-1",
"us-east-2",
"us-west-1"
]
}
}
]
}
}
}
}
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/no-code-modules/nocode-9HE91XDNY3faePn2
Sample Response
{
"data": {
"id": "nocode-9HE91XDNY3faePn2",
"type": "no-code-modules",
"attributes": {
"enabled": true,
"version-pin": "1.0.1"
},
"relationships": {
"organization": {
"data": {
"id": "my-organization",
"type": "organizations"
},
"links": {
"related": "/api/v2/organizations/my-organization"
}
},
"registry-module": {
"data": {
"id": "mod-2aaFrmRPZs2N9epr",
"type": "registry-modules"
},
"links": {
"related": "/api/v2/registry-modules/mod-2aaFrmRPZs2N9epr"
}
},
"variable-options": {
"data": [
{
"id": "ncvaropt-fcHDfnZ1EGdRzFNC",
"type": "variable-options"
},
{
"id": "ncvaropt-dZMfdh9KBcwFjyv2",
"type": "variable-options"
}
]
}
},
"links": {
"self": "/api/v2/no-code-modules/nocode-9HE91XDNY3faePn2"
}
}
}
GET /no-code-modules/:id
:id
The unique identifier of the no-code module.
Use this API to read the details of an existing no-code module.
The API call that enables no-code provisioning for a module returns that module's unique identifier.
Query ParametersThis endpoint uses our standard URL query parameters. Use HTML URL encoding syntax, such as %5B
to represent [
and %5D
to represent ]
, if your tooling does not automatically encode URLs.
Terraform returns related resources when you add the include
query parameter to the request.
include
List related resource to include in the response.
The following resource types are available:
Resource Name Descriptionvariable_options
Module variables with a configured set of allowed values. Sample Request
curl \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/vnd.api+json" \
https://app.terraform.io/api/v2/no-code-modules/nocode-9HE91XDNY3faePn2?include=variable_options
Sample Response
{
"data": {
"id": "nocode-9HE91XDNY3faePn2",
"type": "no-code-modules",
"attributes": {
"enabled": true,
"version-pin": "1.0.1"
},
"relationships": {
"organization": {
"data": {
"id": "my-organization",
"type": "organizations"
},
"links": {
"related": "/api/v2/organizations/my-organization"
}
},
"registry-module": {
"data": {
"id": "mod-2aaFrmRPZs2N9epr",
"type": "registry-modules"
},
"links": {
"related": "/api/v2/registry-modules/mod-2aaFrmRPZs2N9epr"
}
},
"variable-options": {
"data": [
{
"id": "ncvaropt-fcHDfnZ1EGdRzFNC",
"type": "variable-options"
},
{
"id": "ncvaropt-dZMfdh9KBcwFjyv2",
"type": "variable-options"
}
]
}
},
"links": {
"self": "/api/v2/no-code-modules/nocode-9HE91XDNY3faePn2"
}
},
"included": [
{
"id": "ncvaropt-fcHDfnZ1EGdRzFNC",
"type": "variable-options",
"attributes": {
"variable-name": "Linux AMIs",
"variable-type": "array",
"options": [
"Xenial Xerus",
"Trusty Tahr"
]
},
"relationships": {
"no-code-allowed-module": {
"data": {
"id": "nocode-9HE91XDNY3faePn2",
"type": "no-code-allowed-modules"
}
}
}
},
{
"id": "ncvaropt-dZMfdh9KBcwFjyv2",
"type": "variable-options",
"attributes": {
"variable-name": "region",
"variable-type": "array",
"options": [
"eu-north-1",
"us-east-2",
"us-west-1"
]
},
"relationships": {
"no-code-allowed-module": {
"data": {
"id": "nocode-9HE91XDNY3faePn2",
"type": "no-code-allowed-modules"
}
}
}
}
]
}
This endpoint creates a workspace from a no-code module.
POST /no-code-modules/:id/workspaces
:id
The ID of the no-code module to provision.
Each HCP Terraform organization has a list of which modules you can use to create workspaces using no-code provisioning. You can use this API to create a workspace by selecting a no-code module to enable a no-code provisioning workflow.
Note: This endpoint can not be accessed with organization tokens. You must access it with a user token or team token.
Request BodyThis 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 Descriptiondata.type
string none Must be "workspaces"
. data.attributes.agent-pool-id
string none Required when execution-mode
is set to agent
. The ID of the agent pool belonging to the workspace's organization. This value must not be specified if execution-mode
is set to remote
. data.attributes.auto_apply
boolean false
If true
, Terraform automatically applies changes when a Terraform plan
is successful. data.attributes.description
string ""
A description for the workspace. data.attributes.execution-mode
string none Which execution mode to use. Valid values are remote
, and agent
. When not provided, defaults to remote
. data.attributes.name
string none The name of the workspace. You can only include letters, numbers, -
, and _
. Terraform uses this value to identify the workspace and must be unique in the organization. data.attributes.source-name
string none A friendly name for the application or client creating this workspace. If set, this will be displayed on the workspace as "Created via <SOURCE NAME>
". data.attributes.source-url
string (nothing) A URL for the application or client creating this workspace. This can be the URL of a related resource in another app, or a link to documentation or other info about the client. data.attributes.terraform-version
string latest release Specifies the version of Terraform to use for this workspace. You can specify an exact version or a version constraint such as ~> 1.0.0
. If you specify a constraint, the workspace always uses the newest release that meets that constraint. If omitted when creating a workspace, this defaults to the latest released version. data.relationships.project.data.id
string The ID of the project to create the workspace in. You must have permission to create workspaces in the project, either by organization-level permissions or team admin access to a specific project. data.relationships.project.data.type
string Must be "project"
. data.relationships.vars.data[].type
string Must be "vars"
. data.relationships.vars.data[].attributes.key
string The name of the variable. data.relationships.vars.data[].attributes.value
string ""
The value of the variable. data.relationships.vars.data[].attributes.description
string The description of the variable. data.relationships.vars.data[].attributes.category
string Whether this is a Terraform or environment variable. Valid values are "terraform"
or "env"
. data.relationships.vars.data[].attributes.hcl
boolean false
Whether to evaluate the value of the variable as a string of HCL code. Has no effect for environment variables. data.relationships.vars.data[].attributes.sensitive
boolean false
Whether the value is sensitive. If true
then the variable is written once and not visible thereafter. Sample Payload
{
"data": {
"type": "workspaces",
"attributes": {
"name": "no-code-workspace",
"description": "A workspace to enable the no-code provisioning workflow."
},
"relationships": {
"project": {
"data": {
"id": "prj-yuEN6sJVra5t6XVy",
"type": "project"
}
},
"vars": {
"data": [
{
"type": "vars",
"attributes": {
"key": "region",
"value": "eu-central-1",
"category": "terraform",
"hcl": true,
"sensitive": false,
}
},
{
"type": "vars",
"attributes": {
"key": "ami",
"value": "ami‑077062",
"category": "terraform",
"hcl": true,
"sensitive": 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/no-code-modules/nocode-WGckovT2RQxupyt1/workspaces
Sample Response
{
"data": {
"id": "ws-qACTToFUM5BvDKhC",
"type": "workspaces",
"attributes": {
"allow-destroy-plan": true,
"auto-apply": false,
"auto-destroy-at": null,
"auto-destroy-status": null,
"created-at": "2023-09-08T10:36:04.391Z",
"environment": "default",
"locked": false,
"name": "no-code-workspace",
"queue-all-runs": false,
"speculative-enabled": true,
"structured-run-output-enabled": true,
"terraform-version": "1.5.6",
"working-directory": null,
"global-remote-state": true,
"updated-at": "2023-09-08T10:36:04.427Z",
"resource-count": 0,
"apply-duration-average": null,
"plan-duration-average": null,
"policy-check-failures": null,
"run-failures": null,
"workspace-kpis-runs-count": null,
"latest-change-at": "2023-09-08T10:36:04.391Z",
"operations": true,
"execution-mode": "remote",
"vcs-repo": null,
"vcs-repo-identifier": null,
"permissions": {
"can-update": true,
"can-destroy": true,
"can-queue-run": true,
"can-read-variable": true,
"can-update-variable": true,
"can-read-state-versions": true,
"can-read-state-outputs": true,
"can-create-state-versions": true,
"can-queue-apply": true,
"can-lock": true,
"can-unlock": true,
"can-force-unlock": true,
"can-read-settings": true,
"can-manage-tags": true,
"can-manage-run-tasks": true,
"can-force-delete": true,
"can-manage-assessments": true,
"can-manage-ephemeral-workspaces": true,
"can-read-assessment-results": true,
"can-queue-destroy": true
},
"actions": {
"is-destroyable": true
},
"description": null,
"file-triggers-enabled": true,
"trigger-prefixes": [],
"trigger-patterns": [],
"assessments-enabled": false,
"last-assessment-result-at": null,
"source": "tfe-module",
"source-name": null,
"source-url": null,
"source-module-id": "private/my-organization/lambda/aws/1.0.9",
"no-code-upgrade-available": false,
"tag-names": [],
"setting-overwrites": {
"execution-mode": false,
"agent-pool": false
}
},
"relationships": {
"organization": {
"data": {
"id": "my-organization",
"type": "organizations"
}
},
"current-run": {
"data": null
},
"latest-run": {
"data": null
},
"outputs": {
"data": []
},
"remote-state-consumers": {
"links": {
"related": "/api/v2/workspaces/ws-qACTToFUM5BvDKhC/relationships/remote-state-consumers"
}
},
"current-state-version": {
"data": null
},
"current-configuration-version": {
"data": {
"id": "cv-vizi2p3mnrt3utgA",
"type": "configuration-versions"
},
"links": {
"related": "/api/v2/configuration-versions/cv-vizi2p3mnrt3utgA"
}
},
"agent-pool": {
"data": null
},
"readme": {
"data": null
},
"project": {
"data": {
"id": "prj-yuEN6sJVra5t6XVy",
"type": "projects"
}
},
"current-assessment-result": {
"data": null
},
"no-code-module-version": {
"data": {
"id": "nocodever-vFcQjZLs3ZHTe4TU",
"type": "no-code-module-versions"
}
},
"vars": {
"data": []
}
},
"links": {
"self": "/api/v2/organizations/my-organization/workspaces/no-code-workspace",
"self-html": "/app/my-organization/workspaces/no-code-workspace"
}
}
}
Upgrading a workspace's no-code provisioning settings is a multi-step process.
POST /no-code-modules/:no_code_module_id/workspaces/:id/upgrade
:no_code_module_id
The ID of the no-code module. :id
The ID of the workspace. 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 Descriptiondata.type
string Must be "workspaces"
. data.relationships.vars.data[].type
string Must be "vars"
. data.relationships.vars.data[].attributes.key
string The name of the variable. data.relationships.vars.data[].attributes.value
string ""
The value of the variable. data.relationships.vars.data[].attributes.description
string The description of the variable. data.relationships.vars.data[].attributes.category
string Whether this is a Terraform or environment variable. Valid values are "terraform"
or "env"
. data.relationships.vars.data[].attributes.hcl
boolean false
Whether to evaluate the value of the variable as a string of HCL code. Has no effect for environment variables. data.relationships.vars.data[].attributes.sensitive
boolean false
Whether the value is sensitive. If true
then the variable is written once and not visible thereafter. Sample Payload
{
"data": {
"type": "workspaces",
"relationships": {
"vars": {
"data": [
{
"type": "vars",
"attributes": {
"key": "region",
"value": "eu-central-1",
"category": "terraform",
"hcl": true,
"sensitive": false
}
},
{
"type": "vars",
"attributes": {
"key": "ami",
"value": "ami‑077062",
"category": "terraform",
"hcl": true,
"sensitive": 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/no-code-modules/nocode-WGckovT2RQxupyt1/workspaces/ws-qACTToFUM5BvDKhC/upgrade
Sample Response
{
"data": {
"id": "run-Cyij8ctBHM1g5xdX",
"type": "workspace-upgrade",
"attributes": {
"status": "planned",
"plan-url": "https://app.terraform.io/app/my-organization/no-code-workspace/runs/run-Cyij8ctBHM1g5xdX"
},
"relationships": {
"workspace": {
"data": {
"id": "ws-VvKtcfueHNkR6GqP",
"type": "workspaces"
}
}
}
}
}
This endpoint returns the plan details and status for updating a workspace to new no-code provisioning settings.
GET /no-code-modules/:no_code_module_id/workspaces/:workspace_id/upgrade/:id
:no_code_module_id
The ID of the no-code module. :workspace_id
The ID of workspace. :id
The ID of update.
Returns the details of a no-code workspace update run, including the run's current state, such as pending
, fetching
, planning
, planned
, or cost_estimated
. Refer to Run States and Stages for more information on the states a run can return.
curl \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/vnd.api+json" \
--request GET \
https://app.terraform.io/api/v2/no-code-modules/nocode-WGckovT2RQxupyt1/workspaces/ws-qACTToFUM5BvDKhC/upgrade/run-Cyij8ctBHM1g5xdX
Sample Response
{
"data": {
"id": "run-Cyij8ctBHM1g5xdX",
"type": "workspace-upgrade",
"attributes": {
"status": "planned_and_finished",
"plan-url": "https://app.terraform.io/app/my-organization/no-code-workspace/runs/run-Cyij8ctBHM1g5xdX"
},
"relationships": {
"workspace": {
"data": {
"id": "ws-VvKtcfueHNkR6GqP",
"type": "workspaces"
}
}
}
}
}
Use this endpoint to confirm an update and finalize the update for a workspace to use new no-code provisioning settings.
POST /no-code-modules/:no_code_module_id/workspaces/:workspace_id/upgrade/:id
:no_code_module_id
The ID of the no-code module. :workspace_id
The ID of workspace. :id
The ID of update. Sample Request
curl \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/vnd.api+json" \
--request POST \
https://app.terraform.io/api/v2/no-code-modules/nocode-WGckovT2RQxupyt1/workspaces/ws-qACTToFUM5BvDKhC/upgrade/run-Cyij8ctBHM1g5xdX
Sample Response
{ "Workspace update completed" }
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4