Terraform
- Terraform Enterprise
- 1.0.x (latest)
- v202506-1
- v202505-1
- v202504-1
- v202503-1
- v202502-2
- v202502-1
- v202501-1
- v202411-2
- v202411-1
- v202410-1
- v202409-3
- 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
Agents and agent pools API reference
An Agent Pool represents a group of Agents, often related to one another by sharing a common network segment or purpose. A workspace may be configured to use one of the organization's agent pools to run remote operations with isolated, private, or on-premises infrastructure.
List Agent Pools
GET /organizations/:organization_name/agent-pools
| Parameter | Description | 
|---|---|
| :organization_name | The name of the organization. | 
This endpoint allows you to list agent pools, their agents, and their tokens for an organization.
| Status | Response | Reason | 
|---|---|---|
| 200 | JSON API document ( type: "agent-pools") | Success | 
| 404 | JSON API error object | Organization not found | 
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 | |
|---|---|---|
| q | Optional. A search query string. Agent pools are searchable by name. | |
| sort | Optional. 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"). | |
| page[number] | Optional. If omitted, the endpoint will return the first page. | |
| page[size] | Optional. If omitted, the endpoint will return 20 agent pools per page. | |
| filter[allowed_workspaces][name] | Optional. Filters agent pools to those associated with the given workspace. The workspace must have permission to use the agent pool. Refer to Scoping Agent Pools to Specific Workspaces. | 
Response fields
Responses for this endpoint can contain an attributes object with the following fields:
| Field name | Type | Description | 
|---|---|---|
| data.attributes.agent-count | number | The number of agents in Idle,BusyorUnknownstates. Agents that areExitedorErroredare excluded. | 
| data.attributes.meta.status-counts.total | number | The total number of resources the filter was applied to. | 
| data.attributes.meta.status-counts.matching | number | The total number of resources returned, which match the filter you applied. | 
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request GET \
  https://app.terraform.io/api/v2/organizations/my-organization/agent-pools
Sample Response
{
  "data": [
    {
      "id": "apool-yoGUFz5zcRMMz53i",
      "type": "agent-pools",
      "attributes": {
        "name": "example-pool",
        "created-at": "2020-08-05T18:10:26.964Z",
        "organization-scoped": false,
        "agent-count": 3
      },
      "relationships": {
        "agents": {
          "links": {
            "related": "/api/v2/agent-pools/apool-yoGUFz5zcRMMz53i/agents"
          }
        },
        "authentication-tokens": {
          "links": {
            "related": "/api/v2/agent-pools/apool-yoGUFz5zcRMMz53i/authentication-tokens"
          }
        },
        "workspaces": {
          "data": [
            {
              "id": "ws-9EEkcEQSA3XgWyGe",
              "type": "workspaces"
            }
          ]
        },
        "allowed-workspaces": {
          "data": [
            {
              "id": "ws-x9taqV23mxrGcDrn",
              "type": "workspaces"
            }
          ]
        }
      },
      "links": {
        "self": "/api/v2/agent-pools/apool-yoGUFz5zcRMMz53i"
      }
    }
  ],
  "links": {
    "self": "https://app.terraform.io/api/v2/organizations/my-organization/agent-pools?page%5Bnumber%5D=1&page%5Bsize%5D=20",
    "first": "https://app.terraform.io/api/v2/organizations/my-organization/agent-pools?page%5Bnumber%5D=1&page%5Bsize%5D=20",
    "prev": null,
    "next": null,
    "last": "https://app.terraform.io/api/v2/organizations/my-organization/agent-pools?page%5Bnumber%5D=1&page%5Bsize%5D=20"
  },
  "meta": {
    "pagination": {
      "current-page": 1,
      "prev-page": null,
      "next-page": null,
      "total-pages": 1,
      "total-count": 1
    },
    "status-counts": {
      "total": 1,
      "matching": 1
    }
  }
}
List Agents
GET /agent-pools/:agent_pool_id/agents
| Parameter | Description | 
|---|---|
| :agent_pool_id | The ID of the Agent Pool to list. | 
| Status | Response | Reason | 
|---|---|---|
| 200 | JSON API document ( type: "agents") | Success | 
| 404 | JSON API error object | Agent Pool not found, or user unauthorized to perform action | 
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 | 
|---|---|
| filter[last-ping-since] | Optional. Accepts a date in ISO8601 format (ex. 2020-08-11T10:41:23Z). | 
| page[number] | Optional. If omitted, the endpoint will return the first page. | 
| page[size] | Optional. If omitted, the endpoint will return 20 agents per page. | 
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request GET \
  https://app.terraform.io/api/v2/agent-pools/apool-xkuMi7x4LsEnBUdY/agents
Sample Response
{
  "data": [
    {
      "id": "agent-A726QeosTCpCumAs",
      "type": "agents",
      "attributes": {
        "name": "my-cool-agent",
        "status": "idle",
        "ip-address": "123.123.123.123",
        "last-ping-at": "2020-10-09T18:52:25.246Z"
      },
      "links": {
        "self": "/api/v2/agents/agent-A726QeosTCpCumAs"
      }
    },
    {
      "id": "agent-4cQzjbr1cnM6Pcxr",
      "type": "agents",
      "attributes": {
        "name": "my-other-cool-agent",
        "status": "exited",
        "ip-address": "123.123.123.123",
        "last-ping-at": "2020-08-12T15:25:09.726Z"
      },
      "links": {
        "self": "/api/v2/agents/agent-4cQzjbr1cnM6Pcxr"
      }
    },
    {
      "id": "agent-yEJjXQCucpNxtxd2",
      "type": "agents",
      "attributes": {
        "name": null,
        "status": "errored",
        "ip-address": "123.123.123.123",
        "last-ping-at": "2020-08-11T06:22:20.300Z"
      },
      "links": {
        "self": "/api/v2/agents/agent-yEJjXQCucpNxtxd2"
      }
    }
  ],
  "links": {
    "self": "https://app.terraform.io/api/v2/agent-pools/apool-yoGUFz5zcRMMz53i/agents?page%5Bnumber%5D=1&page%5Bsize%5D=20",
    "first": "https://app.terraform.io/api/v2/agent-pools/apool-yoGUFz5zcRMMz53i/agents?page%5Bnumber%5D=1&page%5Bsize%5D=20",
    "prev": null,
    "next": null,
    "last": "https://app.terraform.io/api/v2/agent-pools/apool-yoGUFz5zcRMMz53i/agents?page%5Bnumber%5D=1&page%5Bsize%5D=20"
  },
  "meta": {
    "pagination": {
      "current-page": 1,
      "prev-page": null,
      "next-page": null,
      "total-pages": 1,
      "total-count": 3
    }
  }
}
Show an Agent Pool
GET /agent-pools/:id
| Parameter | Description | 
|---|---|
| :id | The ID of the Agent Pool to show | 
| Status | Response | Reason | 
|---|---|---|
| 200 | JSON API document ( type: "agent-pools") | Success | 
| 404 | JSON API error object | Agent Pool not found, or user unauthorized to perform action | 
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request GET \
  https://app.terraform.io/api/v2/agent-pools/apool-MCf6kkxu5FyHbqhd
Sample Response
{
  "data": {
    "id": "apool-yoGUFz5zcRMMz53i",
    "type": "agent-pools",
    "attributes": {
      "name": "example-pool",
      "created-at": "2020-08-05T18:10:26.964Z",
      "organization-scoped": false
    },
    "relationships": {
      "agents": {
        "links": {
          "related": "/api/v2/agent-pools/apool-yoGUFz5zcRMMz53i/agents"
        }
      },
      "authentication-tokens": {
        "links": {
          "related": "/api/v2/agent-pools/apool-yoGUFz5zcRMMz53i/authentication-tokens"
        }
      },
      "workspaces": {
        "data": [
          {
            "id": "ws-9EEkcEQSA3XgWyGe",
            "type": "workspaces"
          }
        ]
      },
      "allowed-workspaces": {
        "data": [
          {
            "id": "ws-x9taqV23mxrGcDrn",
            "type": "workspaces"
          }
        ]
      }
    },
    "links": {
      "self": "/api/v2/agent-pools/apool-yoGUFz5zcRMMz53i"
    }
  }
}
Show an Agent
GET /agents/:id
| Parameter | Description | 
|---|---|
| :id | The ID of the agent to show | 
| Status | Response | Reason | 
|---|---|---|
| 200 | JSON API document ( type: "agents") | Success | 
| 404 | JSON API error object | Agent not found, or user unauthorized to perform action | 
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request GET \
  https://app.terraform.io/api/v2/agents/agent-73PJNzbZB5idR7AQ
Sample Response
{
  "data": {
    "id": "agent-Zz9PTEcUgBtYzht8",
    "type": "agents",
    "attributes": {
      "name": "my-agent",
      "status": "busy",
      "ip-address": "123.123.123.123",
      "last-ping-at": "2020-09-08T18:47:35.361Z"
    },
    "links": {
      "self": "/api/v2/agents/agent-Zz9PTEcUgBtYzht8"
    }
  }
}
This endpoint lists details about an agent along with that agent's status. Learn more about agents statuses.
Delete an Agent
DELETE /agents/:id
| Parameter | Description | 
|---|---|
| :id | The ID of the agent to delete | 
| Status | Response | Reason | 
|---|---|---|
| 204 | No Content | Success | 
| 412 | JSON API error object | Agent is not deletable. Agents must have a status of unknown,errored, orexitedbefore being deleted. | 
| 404 | JSON API error object | Agent not found, or user unauthorized to perform action | 
Sample Request
curl \
  --header "Authorization: Bearer $TOKEN" \
  --request DELETE \
  https://app.terraform.io/api/v2/agents/agent-73PJNzbZB5idR7AQ
Create an Agent Pool
POST /organizations/:organization_name/agent-pools
| Parameter | Description | 
|---|---|
| :organization_name | The name of the organization. | 
This endpoint allows you to create an Agent Pool for an organization. Only one Agent Pool may exist for an organization.
| Status | Response | Reason | 
|---|---|---|
| 201 | JSON API document ( type: "agent-pools") | Agent Pool successfully created | 
| 404 | JSON API error object | Organization not found or user unauthorized to perform action | 
| 422 | JSON API error object | Malformed request body (missing attributes, wrong types, etc.) | 
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 "agent-pools". | |
| data.attributes.name | string | The name of the agent pool, which can only include letters, numbers, -, and_. This will be used as an identifier and must be unique in the organization. | |
| data.attributes.organization-scoped | bool | true | The scope of the agent pool. If true, all workspaces in the organization can use the agent pool. | 
| data.relationships.allowed-workspaces.data.type | string | Must be "workspaces". | |
| data.relationships.allowed-workspaces.data.id | string | The ID of the workspace that has permission to use the agent pool. Refer to Scoping Agent Pools to Specific Workspaces. | 
Sample Payload
{
    "data": {
        "type": "agent-pools",
        "attributes": {
            "name": "my-pool",
            "organization-scoped": false
        },
        "relationships": {
          "allowed-workspaces": {
            "data": [
              {
                "id": "ws-x9taqV23mxrGcDrn",
                "type": "workspaces"
              }
            ]
          }
        }
    }
}
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/agent-pools
Sample Response
{
  "data": {
    "id": "apool-55jZekR57npjHHYQ",
    "type": "agent-pools",
    "attributes": {
      "name": "my-pool",
      "created-at": "2020-10-13T16:32:45.165Z",
      "organization-scoped": false,
    },
    "relationships": {
      "agents": {
        "links": {
          "related": "/api/v2/agent-pools/apool-55jZekR57npjHHYQ/agents"
        }
      },
      "authentication-tokens": {
        "links": {
          "related": "/api/v2/agent-pools/apool-55jZekR57npjHHYQ/authentication-tokens"
        }
      },
      "workspaces": {
        "data": []
      },
      "allowed-workspaces": {
        "data": [
          {
            "id": "ws-x9taqV23mxrGcDrn",
            "type": "workspaces"
          }
        ]
      }
    },
    "links": {
      "self": "/api/v2/agent-pools/apool-55jZekR57npjHHYQ"
    }
  }
}
Update an Agent Pool
PATCH /agent-pools/:id
| Parameter | Description | 
|---|---|
| :id | The ID of the Agent Pool to update | 
| Status | Response | Reason | 
|---|---|---|
| 200 | JSON API document ( type: "agent-pools") | Success | 
| 404 | JSON API error object | Agent Pool not found, or user unauthorized to perform action | 
| 422 | JSON error document | Malformed request body (missing attributes, wrong types, etc.) | 
Request Body
This 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 | Description | 
|---|---|---|---|
| data.type | string | Must be "agent-pools". | |
| data.attributes.name | string | (previous value) | The name of the agent pool, which can only include letters, numbers, -, and_. This will be used as an identifier and must be unique in the organization. | 
| data.attributes.organization-scoped | bool | true | The scope of the agent pool. If true, all workspaces in the organization can use the agent pool. | 
| data.relationships.allowed-workspaces.data.type | string | Must be "workspaces". | |
| data.relationships.allowed-workspaces.data.id | string | The ID of the workspace that has permission to use the agent pool. Refer to Scoping Agent Pools to Specific Workspaces. | 
Sample Payload
{
  "data": {
    "type": "agent-pools",
    "attributes": {
      "name": "example-pool",
      "organization-scoped": false
    },
    "relationships": {
      "allowed-workspaces": {
        "data": [
          {
            "id": "ws-x9taqV23mxrGcDrn",
            "type": "workspaces"
          }
        ]
      }
    }
  }
}
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/agent-pools/apool-MCf6kkxu5FyHbqhd
Sample Response
{
  "data": {
    "id": "apool-yoGUFz5zcRMMz53i",
    "type": "agent-pools",
    "attributes": {
      "name": "example-pool",
      "created-at": "2020-08-05T18:10:26.964Z"
    },
    "relationships": {
      "agents": {
        "links": {
          "related": "/api/v2/agent-pools/apool-yoGUFz5zcRMMz53i/agents"
        }
      },
      "authentication-tokens": {
        "links": {
          "related": "/api/v2/agent-pools/apool-yoGUFz5zcRMMz53i/authentication-tokens"
        }
      },
      "workspaces": {
        "data": [
          {
            "id": "ws-9EEkcEQSA3XgWyGe",
            "type": "workspaces"
          }
        ]
      },
      "allowed-workspaces": {
        "data": [
          {
            "id": "ws-x9taqV23mxrGcDrn",
            "type": "workspaces"
          }
        ]
      }
    },
    "links": {
      "self": "/api/v2/agent-pools/apool-yoGUFz5zcRMMz53i"
    }
  }
}
Delete an Agent Pool
DELETE /agent-pools/:agent_pool_id
| Parameter | Description | 
|---|---|
| :agent_pool_id | The ID of the agent pool ID to delete | 
Sample Request
$ curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request DELETE \
  https://app.terraform.io/api/v2/agent-pools/apool-MCf6kkxu5FyHbqhd
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 | 
|---|---|
| workspaces | The workspaces attached to this agent pool. |