diff --git a/docs/api-reference/endpoints/app-connections/terraform-cloud/available.mdx b/docs/api-reference/endpoints/app-connections/terraform-cloud/available.mdx
new file mode 100644
index 000000000..fb2dbdeaf
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/terraform-cloud/available.mdx
@@ -0,0 +1,4 @@
+---
+title: "Available"
+openapi: "GET /api/v1/app-connections/terraform-cloud/available"
+---
diff --git a/docs/api-reference/endpoints/app-connections/terraform-cloud/create.mdx b/docs/api-reference/endpoints/app-connections/terraform-cloud/create.mdx
new file mode 100644
index 000000000..406fb9877
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/terraform-cloud/create.mdx
@@ -0,0 +1,4 @@
+---
+title: "Create"
+openapi: "POST /api/v1/app-connections/terraform-cloud"
+---
\ No newline at end of file
diff --git a/docs/api-reference/endpoints/app-connections/terraform-cloud/delete.mdx b/docs/api-reference/endpoints/app-connections/terraform-cloud/delete.mdx
new file mode 100644
index 000000000..daa558f5a
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/terraform-cloud/delete.mdx
@@ -0,0 +1,4 @@
+---
+title: "Delete"
+openapi: "DELETE /api/v1/app-connections/terraform-cloud/{connectionId}"
+---
diff --git a/docs/api-reference/endpoints/app-connections/terraform-cloud/get-by-id.mdx b/docs/api-reference/endpoints/app-connections/terraform-cloud/get-by-id.mdx
new file mode 100644
index 000000000..587cc8f11
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/terraform-cloud/get-by-id.mdx
@@ -0,0 +1,4 @@
+---
+title: "Get by ID"
+openapi: "GET /api/v1/app-connections/terraform-cloud/{connectionId}"
+---
diff --git a/docs/api-reference/endpoints/app-connections/terraform-cloud/get-by-name.mdx b/docs/api-reference/endpoints/app-connections/terraform-cloud/get-by-name.mdx
new file mode 100644
index 000000000..722381605
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/terraform-cloud/get-by-name.mdx
@@ -0,0 +1,4 @@
+---
+title: "Get by Name"
+openapi: "GET /api/v1/app-connections/terraform-cloud/connection-name/{connectionName}"
+---
diff --git a/docs/api-reference/endpoints/app-connections/terraform-cloud/list.mdx b/docs/api-reference/endpoints/app-connections/terraform-cloud/list.mdx
new file mode 100644
index 000000000..831846155
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/terraform-cloud/list.mdx
@@ -0,0 +1,4 @@
+---
+title: "List"
+openapi: "GET /api/v1/app-connections/terraform-cloud"
+---
diff --git a/docs/api-reference/endpoints/app-connections/terraform-cloud/update.mdx b/docs/api-reference/endpoints/app-connections/terraform-cloud/update.mdx
new file mode 100644
index 000000000..488148158
--- /dev/null
+++ b/docs/api-reference/endpoints/app-connections/terraform-cloud/update.mdx
@@ -0,0 +1,4 @@
+---
+title: "Update"
+openapi: "PATCH /api/v1/app-connections/terraform-cloud/{connectionId}"
+---
\ No newline at end of file
diff --git a/docs/api-reference/endpoints/secret-syncs/terraform-cloud/create.mdx b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/create.mdx
new file mode 100644
index 000000000..491889e16
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/create.mdx
@@ -0,0 +1,4 @@
+---
+title: "Create"
+openapi: "POST /api/v1/secret-syncs/terraform-cloud"
+---
diff --git a/docs/api-reference/endpoints/secret-syncs/terraform-cloud/delete.mdx b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/delete.mdx
new file mode 100644
index 000000000..dfd3206f5
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/delete.mdx
@@ -0,0 +1,4 @@
+---
+title: "Delete"
+openapi: "DELETE /api/v1/secret-syncs/terraform-cloud/{syncId}"
+---
diff --git a/docs/api-reference/endpoints/secret-syncs/terraform-cloud/get-by-id.mdx b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/get-by-id.mdx
new file mode 100644
index 000000000..c25888a53
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/get-by-id.mdx
@@ -0,0 +1,4 @@
+---
+title: "Get by ID"
+openapi: "GET /api/v1/secret-syncs/terraform-cloud/{syncId}"
+---
diff --git a/docs/api-reference/endpoints/secret-syncs/terraform-cloud/get-by-name.mdx b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/get-by-name.mdx
new file mode 100644
index 000000000..5a1645866
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/get-by-name.mdx
@@ -0,0 +1,4 @@
+---
+title: "Get by Name"
+openapi: "GET /api/v1/secret-syncs/terraform-cloud/sync-name/{syncName}"
+---
diff --git a/docs/api-reference/endpoints/secret-syncs/terraform-cloud/list.mdx b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/list.mdx
new file mode 100644
index 000000000..0993c76ef
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/list.mdx
@@ -0,0 +1,4 @@
+---
+title: "List"
+openapi: "GET /api/v1/secret-syncs/terraform-cloud"
+---
diff --git a/docs/api-reference/endpoints/secret-syncs/terraform-cloud/remove-secrets.mdx b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/remove-secrets.mdx
new file mode 100644
index 000000000..6f00362e3
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/remove-secrets.mdx
@@ -0,0 +1,4 @@
+---
+title: "Remove Secrets"
+openapi: "POST /api/v1/secret-syncs/terraform-cloud/{syncId}/remove-secrets"
+---
diff --git a/docs/api-reference/endpoints/secret-syncs/terraform-cloud/sync-secrets.mdx b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/sync-secrets.mdx
new file mode 100644
index 000000000..c71b68e48
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/sync-secrets.mdx
@@ -0,0 +1,4 @@
+---
+title: "Sync Secrets"
+openapi: "POST /api/v1/secret-syncs/terraform-cloud/{syncId}/sync-secrets"
+---
diff --git a/docs/api-reference/endpoints/secret-syncs/terraform-cloud/update.mdx b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/update.mdx
new file mode 100644
index 000000000..759fcfc71
--- /dev/null
+++ b/docs/api-reference/endpoints/secret-syncs/terraform-cloud/update.mdx
@@ -0,0 +1,4 @@
+---
+title: "Update"
+openapi: "PATCH /api/v1/secret-syncs/terraform-cloud/{syncId}"
+---
diff --git a/docs/images/app-connections/terraform-cloud/terraform-cloud-account-settings.png b/docs/images/app-connections/terraform-cloud/terraform-cloud-account-settings.png
new file mode 100644
index 000000000..f80df4229
Binary files /dev/null and b/docs/images/app-connections/terraform-cloud/terraform-cloud-account-settings.png differ
diff --git a/docs/images/app-connections/terraform-cloud/terraform-cloud-app-connection-created.png b/docs/images/app-connections/terraform-cloud/terraform-cloud-app-connection-created.png
new file mode 100644
index 000000000..f8904957a
Binary files /dev/null and b/docs/images/app-connections/terraform-cloud/terraform-cloud-app-connection-created.png differ
diff --git a/docs/images/app-connections/terraform-cloud/terraform-cloud-app-connection-modal.png b/docs/images/app-connections/terraform-cloud/terraform-cloud-app-connection-modal.png
new file mode 100644
index 000000000..e8f0b9524
Binary files /dev/null and b/docs/images/app-connections/terraform-cloud/terraform-cloud-app-connection-modal.png differ
diff --git a/docs/images/app-connections/terraform-cloud/terraform-cloud-app-connection-option.png b/docs/images/app-connections/terraform-cloud/terraform-cloud-app-connection-option.png
new file mode 100644
index 000000000..369067a31
Binary files /dev/null and b/docs/images/app-connections/terraform-cloud/terraform-cloud-app-connection-option.png differ
diff --git a/docs/images/app-connections/terraform-cloud/terraform-cloud-copy-api-token.png b/docs/images/app-connections/terraform-cloud/terraform-cloud-copy-api-token.png
new file mode 100644
index 000000000..348a4fc53
Binary files /dev/null and b/docs/images/app-connections/terraform-cloud/terraform-cloud-copy-api-token.png differ
diff --git a/docs/images/app-connections/terraform-cloud/terraform-cloud-create-api-token.png b/docs/images/app-connections/terraform-cloud/terraform-cloud-create-api-token.png
new file mode 100644
index 000000000..3637145b6
Binary files /dev/null and b/docs/images/app-connections/terraform-cloud/terraform-cloud-create-api-token.png differ
diff --git a/docs/images/app-connections/terraform-cloud/terraform-cloud-tokens-tab.png b/docs/images/app-connections/terraform-cloud/terraform-cloud-tokens-tab.png
new file mode 100644
index 000000000..3293ccdac
Binary files /dev/null and b/docs/images/app-connections/terraform-cloud/terraform-cloud-tokens-tab.png differ
diff --git a/docs/images/secret-syncs/terraform-cloud/terraform-cloud-created.png b/docs/images/secret-syncs/terraform-cloud/terraform-cloud-created.png
new file mode 100644
index 000000000..d6a89609e
Binary files /dev/null and b/docs/images/secret-syncs/terraform-cloud/terraform-cloud-created.png differ
diff --git a/docs/images/secret-syncs/terraform-cloud/terraform-cloud-destination.png b/docs/images/secret-syncs/terraform-cloud/terraform-cloud-destination.png
new file mode 100644
index 000000000..bb2e2f095
Binary files /dev/null and b/docs/images/secret-syncs/terraform-cloud/terraform-cloud-destination.png differ
diff --git a/docs/images/secret-syncs/terraform-cloud/terraform-cloud-details.png b/docs/images/secret-syncs/terraform-cloud/terraform-cloud-details.png
new file mode 100644
index 000000000..b87c51494
Binary files /dev/null and b/docs/images/secret-syncs/terraform-cloud/terraform-cloud-details.png differ
diff --git a/docs/images/secret-syncs/terraform-cloud/terraform-cloud-option.png b/docs/images/secret-syncs/terraform-cloud/terraform-cloud-option.png
new file mode 100644
index 000000000..7670bf2c1
Binary files /dev/null and b/docs/images/secret-syncs/terraform-cloud/terraform-cloud-option.png differ
diff --git a/docs/images/secret-syncs/terraform-cloud/terraform-cloud-options.png b/docs/images/secret-syncs/terraform-cloud/terraform-cloud-options.png
new file mode 100644
index 000000000..def9cf1c0
Binary files /dev/null and b/docs/images/secret-syncs/terraform-cloud/terraform-cloud-options.png differ
diff --git a/docs/images/secret-syncs/terraform-cloud/terraform-cloud-review.png b/docs/images/secret-syncs/terraform-cloud/terraform-cloud-review.png
new file mode 100644
index 000000000..f7b245771
Binary files /dev/null and b/docs/images/secret-syncs/terraform-cloud/terraform-cloud-review.png differ
diff --git a/docs/images/secret-syncs/terraform-cloud/terraform-cloud-source.png b/docs/images/secret-syncs/terraform-cloud/terraform-cloud-source.png
new file mode 100644
index 000000000..7a7250f88
Binary files /dev/null and b/docs/images/secret-syncs/terraform-cloud/terraform-cloud-source.png differ
diff --git a/docs/integrations/app-connections/terraform-cloud.mdx b/docs/integrations/app-connections/terraform-cloud.mdx
new file mode 100644
index 000000000..b4adb7b98
--- /dev/null
+++ b/docs/integrations/app-connections/terraform-cloud.mdx
@@ -0,0 +1,83 @@
+---
+title: "Terraform Cloud Connection"
+description: "Learn how to configure a Terraform Cloud Connection for Infisical."
+---
+
+Infisical supports connecting to Terraform Cloud using a service user.
+
+## Setup Terraform Cloud Connection in Infisical
+
+
+
+ Navigate to the Terraform Cloud **Account Settings** tab.
+ 
+
+
+ Move to the **Tokens** tab.
+ 
+
+
+ Create the API token to be used by Infisical.
+
+ If you configure an expiry date for your API token you will need to manually rotate to a new token prior to expiration to avoid integration downtime.
+
+ 
+
+
+ The API token will be displayed after creating it. Save the token in a secure location for later use in the following steps.
+ 
+
+
+
+
+ 1. Navigate to the **App Connections** tab on the **Organization Settings** page.
+ 
+ 2. Select the **Terraform Cloud Connection** option from the connection options modal.
+ 
+ 3. Fill the Terraform Cloud Connection modal, here you will need to provide the API Token generated in the previous step.
+ 
+ 4. Your **Terraform Cloud Connection** is now available for use.
+ 
+
+
+ To create an Terraform Cloud Connection, make an API request to the [Create Terraform Cloud
+ Connection](/api-reference/endpoints/app-connections/terraform-cloud/create) API endpoint.
+
+ ### Sample request
+
+ ```bash Request
+ curl --request POST \
+ --url https://app.infisical.com/api/v1/app-connections/terraform-cloud \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "name": "my-terraform-cloud-connection",
+ "method": "api-token",
+ "credentials": {
+ "apiToken": "...",
+ }
+ }'
+ ```
+
+ ### Sample response
+
+ ```bash Response
+ {
+ "appConnection": {
+ "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "name": "my-terraform-cloud-connection",
+ "version": 123,
+ "orgId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "createdAt": "2023-11-07T05:31:56Z",
+ "updatedAt": "2023-11-07T05:31:56Z",
+ "app": "terraform-cloud",
+ "method": "api-token",
+ "credentials": {
+ "apiToken": "..."
+ }
+ }
+ }
+ ```
+
+
+
+
diff --git a/docs/integrations/secret-syncs/terraform-cloud.mdx b/docs/integrations/secret-syncs/terraform-cloud.mdx
new file mode 100644
index 000000000..99f7e23a2
--- /dev/null
+++ b/docs/integrations/secret-syncs/terraform-cloud.mdx
@@ -0,0 +1,161 @@
+---
+title: "Terraform Cloud Sync"
+description: "Learn how to configure a Terraform Cloud Sync for Infisical."
+---
+
+**Prerequisites:**
+
+ - Set up and add secrets to [Infisical Cloud](https://app.infisical.com)
+ - Create a [Terraform Cloud Connection](/integrations/app-connections/terraform-cloud)
+
+
+
+ 1. Navigate to **Project** > **Integrations** and select the **Secret Syncs** tab. Click on the **Add Sync** button.
+ 
+
+ 2. Select the **Terraform Cloud** option.
+ 
+
+ 3. Configure the **Source** from where secrets should be retrieved, then click **Next**.
+ 
+
+ - **Environment**: The project environment to retrieve secrets from.
+ - **Secret Path**: The folder path to retrieve secrets from.
+
+
+ If you need to sync secrets from multiple folder locations, check out [secret imports](/documentation/platform/secret-reference#secret-imports).
+
+
+ 4. Configure the **Destination** to where secrets should be deployed, then click **Next**.
+ 
+
+ - **Terraform Cloud Connection**: The Terraform Cloud Connection to authenticate with.
+ - **Organization**: The Terraform Cloud organization to deploy secrets to.
+ - **Category**: The Terraform Cloud variable category to use on secrets syncs. Choose from:
+ - **Environment**: Sync secrets as environment variables.
+ - **Terraform**: Sync secrets as Terraform variables.
+ - **Scope**: The Terraform Cloud secret scope to sync secrets to.
+ - **Variable Set**: Sync secrets to a specific variable set.
+ - **Workspace**: Sync secrets to a specific workspace.
+
+ The remaining fields are determined by the selected **Scope**:
+
+
+ - **Variable Set**: The variable set to deploy secrets to.
+
+
+ - **Workspace**: The workspace to deploy secrets to.
+
+
+
+ 5. Configure the **Sync Options** to specify how secrets should be synced, then click **Next**.
+ 
+
+ - **Initial Sync Behavior**: Determines how Infisical should resolve the initial sync.
+ - **Overwrite Destination Secrets**: Removes any secrets at the destination endpoint not present in Infisical.
+
+ Terraform Cloud does not support importing secrets.
+
+ - **Auto-Sync Enabled**: If enabled, secrets will automatically be synced from the source location when changes occur. Disable to enforce manual syncing only.
+ - **Disable Secret Deletion**: If enabled, Infisical will not remove secrets from the sync destination. Enable this option if you intend to manage some secrets manually outside of Infisical.
+
+ 6. Configure the **Details** of your Terraform Cloud Sync, then click **Next**.
+ 
+
+ - **Name**: The name of your sync. Must be slug-friendly.
+ - **Description**: An optional description for your sync.
+
+ 7. Review your Terraform Cloud Sync configuration, then click **Create Sync**.
+ 
+
+ 8. If enabled, your Terraform Cloud Sync will begin syncing your secrets to the destination endpoint.
+ 
+
+
+
+ To create an **Terraform Cloud Sync**, make an API request to the [Create Terraform Cloud Sync](/api-reference/endpoints/secret-syncs/terraform-cloud/create) API endpoint.
+
+ ### Sample request
+
+ ```bash Request
+ curl --request POST \
+ --url https://app.infisical.com/api/v1/secret-syncs/terraform-cloud \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "name": "my-terraform-cloud-sync",
+ "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "description": "an example sync",
+ "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "environment": "dev",
+ "secretPath": "/my-secrets",
+ "isEnabled": true,
+ "syncOptions": {
+ "initialSyncBehavior": "overwrite-destination"
+ },
+ "destinationConfig": {
+ "scope": "variable-set",
+ "destinationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
+ "destinationName": "my-variable-set",
+ "org": "my-organization-id",
+ "category": "env"
+ }
+ }'
+ ```
+
+ ### Sample response
+
+ ```bash Response
+ {
+ "secretSync": {
+ "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "name": "my-terraform-cloud-sync",
+ "description": "an example sync",
+ "isEnabled": true,
+ "version": 1,
+ "folderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "connectionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "createdAt": "2023-11-07T05:31:56Z",
+ "updatedAt": "2023-11-07T05:31:56Z",
+ "syncStatus": "succeeded",
+ "lastSyncJobId": "123",
+ "lastSyncMessage": null,
+ "lastSyncedAt": "2023-11-07T05:31:56Z",
+ "importStatus": null,
+ "lastImportJobId": null,
+ "lastImportMessage": null,
+ "lastImportedAt": null,
+ "removeStatus": null,
+ "lastRemoveJobId": null,
+ "lastRemoveMessage": null,
+ "lastRemovedAt": null,
+ "syncOptions": {
+ "initialSyncBehavior": "overwrite-destination"
+ },
+ "projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "connection": {
+ "app": "terraform-cloud",
+ "name": "my-terraform-cloud-connection",
+ "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
+ },
+ "environment": {
+ "slug": "dev",
+ "name": "Development",
+ "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
+ },
+ "folder": {
+ "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "path": "/my-secrets"
+ },
+ "destination": "terraform-cloud",
+ "destinationConfig": {
+ "scope": "workspace",
+ "destinationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
+ "destinationName": "my-workspace",
+ "org": "my-organization-id",
+ "category": "terraform"
+ }
+ }
+ }
+ ```
+
+
diff --git a/docs/mint.json b/docs/mint.json
index 478db0276..f896fde76 100644
--- a/docs/mint.json
+++ b/docs/mint.json
@@ -1,6 +1,6 @@
{
"name": "Infisical",
- "openapi": "https://app.infisical.com/api/docs/json",
+ "openapi": "https://1243-190-31-36-142.ngrok-free.app/api/docs/json",
"logo": {
"dark": "/logo/dark.svg",
"light": "/logo/light.svg",
@@ -419,7 +419,8 @@
"integrations/app-connections/databricks",
"integrations/app-connections/gcp",
"integrations/app-connections/github",
- "integrations/app-connections/humanitec"
+ "integrations/app-connections/humanitec",
+ "integrations/app-connections/terraform-cloud"
]
}
]
@@ -438,7 +439,8 @@
"integrations/secret-syncs/databricks",
"integrations/secret-syncs/gcp-secret-manager",
"integrations/secret-syncs/github",
- "integrations/secret-syncs/humanitec"
+ "integrations/secret-syncs/humanitec",
+ "integrations/secret-syncs/terraform-cloud"
]
}
]
@@ -922,6 +924,18 @@
"api-reference/endpoints/app-connections/humanitec/update",
"api-reference/endpoints/app-connections/humanitec/delete"
]
+ },
+ {
+ "group": "Terraform Cloud",
+ "pages": [
+ "api-reference/endpoints/app-connections/terraform-cloud/list",
+ "api-reference/endpoints/app-connections/terraform-cloud/available",
+ "api-reference/endpoints/app-connections/terraform-cloud/get-by-id",
+ "api-reference/endpoints/app-connections/terraform-cloud/get-by-name",
+ "api-reference/endpoints/app-connections/terraform-cloud/create",
+ "api-reference/endpoints/app-connections/terraform-cloud/update",
+ "api-reference/endpoints/app-connections/terraform-cloud/delete"
+ ]
}
]
},
@@ -1038,6 +1052,19 @@
"api-reference/endpoints/secret-syncs/humanitec/sync-secrets",
"api-reference/endpoints/secret-syncs/humanitec/remove-secrets"
]
+ },
+ {
+ "group": "Terraform Cloud",
+ "pages": [
+ "api-reference/endpoints/secret-syncs/terraform-cloud/list",
+ "api-reference/endpoints/secret-syncs/terraform-cloud/get-by-id",
+ "api-reference/endpoints/secret-syncs/terraform-cloud/get-by-name",
+ "api-reference/endpoints/secret-syncs/terraform-cloud/create",
+ "api-reference/endpoints/secret-syncs/terraform-cloud/update",
+ "api-reference/endpoints/secret-syncs/terraform-cloud/delete",
+ "api-reference/endpoints/secret-syncs/terraform-cloud/sync-secrets",
+ "api-reference/endpoints/secret-syncs/terraform-cloud/remove-secrets"
+ ]
}
]
},