• Overview
    • Enforce Policy as Code
    • Infrastructure as Code
    • Inject Secrets into Terraform
    • Integrate with Existing Workflows
    • Manage Kubernetes
    • Manage Virtual Machine Images
    • Multi-Cloud Deployment
    • Network Infrastructure Automation
    • Terraform CLI
    • Terraform Cloud
    • Terraform Enterprise
  • Registry
  • Tutorials
    • About the Docs
    • Intro to Terraform
    • Configuration Language
    • Terraform CLI
    • Terraform Cloud
    • Terraform Enterprise
    • Provider Use
    • Plugin Development
    • Registry Publishing
    • Integration Program
    • Terraform Tools
    • CDK for Terraform
    • Glossary
  • Community
GitHubTerraform Cloud
Download

    Terraform Cloud and Enterprise

  • Overview
  • Plans and Features
  • Getting Started
    • API Docs template
    • Overview
    • Account
    • Agent Pools
    • Agent Tokens
    • Applies
    • Audit Trails
    • Comments
    • Configuration Versions
    • Cost Estimates
    • Feature Sets
    • Invoices
    • IP Ranges
    • Notification Configurations
    • OAuth Clients
    • OAuth Tokens
    • Organizations
    • Organization Memberships
    • Organization Tags
    • Organization Tokens
    • Plan Exports
    • Plans
    • Policies
    • Policy Checks
    • Policy Sets
    • Policy Set Parameters
      • Modules
      • Providers
      • Private Provider Versions and Platforms
      • GPG Keys
    • Runs
      • Run Tasks
      • Stages and Results
      • Custom Integration
    • Run Triggers
    • SSH Keys
    • State Versions
    • State Version Outputs
    • Subscriptions
    • Team Access
    • Team Membership
    • Team Tokens
    • Teams
    • User Tokens
    • Users
    • Variables
    • VCS Events
    • Workspaces
    • Workspace-Specific Variables
    • Workspace Resources
    • Variable Sets
      • Overview
      • Module Sharing
      • Organizations
      • Runs
      • Settings
      • Terraform Versions
      • Users
      • Workspaces
    • Changelog
    • Stability Policy
    • Overview
    • Creating Workspaces
    • Naming
    • Terraform Configurations
      • Overview
      • Managing Variables
      • Overview
      • VCS Connections
      • Access
      • Drift Detection
      • Notifications
      • SSH Keys for Modules
      • Run Triggers
      • Run Tasks
    • Terraform State
    • JSON Filtering
    • Remote Operations
    • Viewing and Managing Runs
    • Run States and Stages
    • Run Modes and Options
    • UI/VCS-driven Runs
    • API-driven Runs
    • CLI-driven Runs
    • The Run Environment
    • Installing Software
    • Users
    • Teams
    • Organizations
    • Permissions
    • Two-factor Authentication
    • API Tokens
      • Overview
      • Microsoft Azure AD
      • Okta
      • SAML
      • Linking a User Account
      • Testing
    • Overview
    • GitHub.com
    • GitHub.com (OAuth)
    • GitHub Enterprise
    • GitLab.com
    • GitLab EE and CE
    • Bitbucket Cloud
    • Bitbucket Server and Data Center
    • Azure DevOps Services
    • Azure DevOps Server
    • Troubleshooting
    • Overview
    • Adding Public Providers and Modules
    • Publishing Private Providers
    • Publishing Private Modules
    • Using Providers and Modules
    • Configuration Designer
  • Migrating to Terraform Cloud
    • Overview
    • Using Sentinel with Terraform 0.12
    • Manage Policies
    • Enforce and Override Policies
    • Mocking Terraform Sentinel Data
    • Working With JSON Result Data
      • Overview
      • tfconfig
      • tfconfig/v2
      • tfplan
      • tfplan/v2
      • tfstate
      • tfstate/v2
      • tfrun
    • Example Policies
    • Overview
    • AWS
    • GCP
    • Azure
      • Overview
      • Service Catalog
      • Admin Guide
      • Developer Reference
      • Example Customizations
      • V1 Setup Instructions
    • Splunk Integration
    • Kubernetes Integration
    • Run Tasks Integration
    • Overview
    • IP Ranges
    • Data Security
    • Security Model
    • Overview
    • Part 1: Overview of Our Recommended Workflow
    • Part 2: Evaluating Your Current Provisioning Practices
    • Part 3: How to Evolve Your Provisioning Practices
    • Part 3.1: From Manual Changes to Semi-Automation
    • Part 3.2: From Semi-Automation to Infrastructure as Code
    • Part 3.3: From Infrastructure as Code to Collaborative Infrastructure as Code
    • Part 3.4: Advanced Workflow Improvements

  • Terraform Cloud Agents

  • Terraform Enterprise Admin

  • Other Docs

  • Intro to Terraform
  • Configuration Language
  • Terraform CLI
  • Terraform Cloud
  • Terraform Enterprise
  • Provider Use
  • Plugin Development
  • Registry Publishing
  • Integration Program
  • Terraform Tools
  • CDK for Terraform
  • Glossary
Type '/' to Search

»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.

StatusResponseReason
201JSON API document (type: "plan-exports")Successfully created a plan export
404JSON API error objectPlan not found, or user unauthorized to perform action
422JSON API error objectMalformed 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 pathTypeDefaultDescription
data.typestringMust be "plan-exports".
data.attributes.data-typestringThe format for the export. Currently, the only supported format is "sentinel-mock-bundle-v0".
data.relationships.plan.dataobjectA 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"
        }
      }
    }
  }
}
{
  "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
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",
    }
  }
}
{
  "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

ParameterDescription
idThe 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.

StatusResponseReason
200JSON API document (type: "plan-exports")The request was successful
404JSON API error objectPlan 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
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"
    }
  }
}
{
  "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.

StatusResponseReason
302HTTP RedirectPlan export found and temporary download URL generated
404JSON API error objectPlan 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
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.

StatusResponseReason
204No contentPlan export deleted successfully
404JSON API error objectPlan 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
curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  -X DELETE \
  https://app.terraform.io/api/v2/plan-exports/pe-3yVQZvHzf5j3WRJ1
github logoEdit this page
  • Overview
  • Docs
  • Extend
  • Privacy
  • Security
  • Press Kit
  • Consent Manager