Plan Exports API
Plan exports allow users to download data exported from the plan of a Run in a Terraform workspace. Currently, the only supported format for exporting plan data is to generate mock data for Sentinel.
Create a plan export
POST /plan-exports
This endpoint exports data from a plan in the specified format. The export process is asynchronous, and the resulting data becomes downloadable when its status is "finished"
. The data is then available for one hour before expiring. After the hour is up, a new export can be created.
Status | Response | Reason |
---|---|---|
201 | JSON API document (type: "plan-exports" ) | Successfully created a plan export |
404 | JSON API error object | Plan not found, or user unauthorized to perform action |
422 | JSON API error object | Malformed request body (missing attributes, wrong types, etc.), or a plan export of the provided data-type is already pending or downloadable for this plan |
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 "plan-exports" . | |
data.attributes.data-type | string | The format for the export. Currently, the only supported format is "sentinel-mock-bundle-v0" . | |
data.relationships.plan.data | object | A JSON API relationship object that represents the plan being exported. This object must have a type of plans , and the id of a finished Terraform plan that does not already have a downloadable export of the specified data-type (e.g: {"type": "plans", "id": "plan-8F5JFydVYAmtTjET"} ) |
Sample Payload
{ "data": { "type": "plan-exports", "attributes": { "data-type": "sentinel-mock-bundle-v0" }, "relationships": { "plan": { "data": { "id": "plan-8F5JFydVYAmtTjET", "type": "plans" } } } }}
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/plan-exports
Sample Response
{ "data": { "id": "pe-3yVQZvHzf5j3WRJ1", "type": "plan-exports", "attributes": { "data-type": "sentinel-mock-bundle-v0", "status": "queued", "status-timestamps": { "queued-at": "2019-03-04T22:29:53+00:00", }, }, "relationships": { "plan": { "data": { "id": "plan-8F5JFydVYAmtTjET", "type": "plans" } } }, "links": { "self": "/api/v2/plan-exports/pe-3yVQZvHzf5j3WRJ1", } }}
Show a plan export
GET /plan-exports/:id
Parameter | Description |
---|---|
id | The ID of the plan export to show. |
There is no endpoint to list plan exports. You can find IDs for plan exports in the
relationships.exports
property of a plan object.
Status | Response | Reason |
---|---|---|
200 | JSON API document (type: "plan-exports" ) | The request was successful |
404 | JSON API error object | Plan export 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/plan-exports/pe-3yVQZvHzf5j3WRJ1
Sample Response
{ "data": { "id": "pe-3yVQZvHzf5j3WRJ1", "type": "plan-exports", "attributes": { "data-type": "sentinel-mock-bundle-v0", "status": "finished", "status-timestamps": { "queued-at": "2019-03-04T22:29:53+00:00", "finished-at": "2019-03-04T22:29:58+00:00", "expired-at": "2019-03-04T23:29:58+00:00" }, }, "relationships": { "plan": { "data": { "id": "plan-8F5JFydVYAmtTjET", "type": "plans" } } }, "links": { "self": "/api/v2/plan-exports/pe-3yVQZvHzf5j3WRJ1", "download": "/api/v2/plan-exports/pe-3yVQZvHzf5j3WRJ1/download" } }}
Download exported plan data
GET /plan-exports/:id/download
This endpoint generates a temporary URL to the location of the exported plan data in a .tar.gz
archive, and then redirects to that link. If using a client that can follow redirects, you can use this endpoint to save the .tar.gz
archive locally without needing to save the temporary URL.
Status | Response | Reason |
---|---|---|
302 | HTTP Redirect | Plan export found and temporary download URL generated |
404 | JSON API error object | Plan export not found, or user unauthorized to perform action |
Sample Request
curl \ --header "Authorization: Bearer $TOKEN" \ --header "Content-Type: application/vnd.api+json" \ --location \ https://app.terraform.io/api/v2/plan-exports/pe-3yVQZvHzf5j3WRJ1/download \ > export.tar.gz
Delete exported plan data
DELETE /plan-exports/:id
Plan exports expire after being available for one hour, but they can be deleted manually as well.
Status | Response | Reason |
---|---|---|
204 | No content | Plan export deleted successfully |
404 | JSON API error object | Plan export not found, or user unauthorized to perform action |
Sample Request
curl \ --header "Authorization: Bearer $TOKEN" \ --header "Content-Type: application/vnd.api+json" \ -X DELETE \ https://app.terraform.io/api/v2/plan-exports/pe-3yVQZvHzf5j3WRJ1