> ## Documentation Index
> Fetch the complete documentation index at: https://infisical-devin-1781641701-docs-github-pat-fine-grained.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Project Templates

> Learn how to manage and apply project templates

## Concept

Project Templates streamline your ability to set up projects by providing customizable templates to configure projects quickly with a predefined set of environments and roles.

<Note>
  Project Templates is a paid feature.
  If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical,
  then you should contact [sales@infisical.com](mailto:sales@infisical.com) to purchase an enterprise license to use it.
</Note>

## Workflow

The typical workflow for using Project Templates consists of the following steps:

1. <strong>Creating a project template:</strong> As part of this step, you will configure a set of environments and roles to be created when applying this template to a project.
2. <strong>Using a project template:</strong> When creating new projects, optionally specify a project template to provision the project with the configured roles and environments.

<Note>
  Note that this workflow can be executed via the Infisical UI or through the API.
</Note>

## Guide to Creating a Project Template

In the following steps, we'll explore how to set up a project template.

<Tabs>
  <Tab title="Infisical UI">
    <Steps>
      <Step title="Creating a Project Template">
        Navigate to the **Project Templates** tab on the Feature Settings page for the project type you want to create a template for and tap on the **Add Template** button.

        <img src="https://mintlify.s3.us-west-1.amazonaws.com/infisical-devin-1781641701-docs-github-pat-fine-grained/images/platform/project-templates/project-template-add-button.png" alt="project template add button" />

        Specify your template details. Here's some guidance on each field:

        * <strong>Name:</strong> A slug-friendly name for the template.
        * <strong>Description:</strong> An optional description of the intended usage of this template.

                  <img src="https://mintlify.s3.us-west-1.amazonaws.com/infisical-devin-1781641701-docs-github-pat-fine-grained/images/platform/project-templates/project-template-create.png" alt="project template create modal" />
      </Step>

      <Step title="Configuring a Project Template">
        Once your template is created, you'll be directed to the configuration section.

        <img src="https://mintlify.s3.us-west-1.amazonaws.com/infisical-devin-1781641701-docs-github-pat-fine-grained/images/platform/project-templates/project-template-edit-form.png" alt="project template edit form" />

        Customize the environments and roles to your needs.

        <img src="https://mintlify.s3.us-west-1.amazonaws.com/infisical-devin-1781641701-docs-github-pat-fine-grained/images/platform/project-templates/project-template-customized.png" alt="project template customized" />

        <Note>
          Be sure to save your environment and role changes.
        </Note>
      </Step>
    </Steps>
  </Tab>

  <Tab title="API">
    To create a project template, make an API request to the [Create Project Template](/api-reference/endpoints/project-templates/create) API endpoint.

    ### Sample request

    ```bash Request theme={null}
    curl --request POST \
    --url https://app.infisical.com/api/v1/project-templates \
    --header 'Content-Type: application/json' \
    --data '{
        "name": "my-project-template",
        "type": "secret-manager",
        "description": "...",
        "environments": "[...]",
        "roles": "[...]",
    }'
    ```

    ### Sample response

    ```bash Response theme={null}
    {
        "projectTemplate": {
            "id": "<template-id>",
            "name": "my-project-template",
            "description": "...",
            "environments": "[...]",
            "roles": "[...]",
            "orgId": "<org-id>",
            "createdAt": "2023-11-07T05:31:56Z",
            "updatedAt": "2023-11-07T05:31:56Z",
        }
    }
    ```
  </Tab>
</Tabs>

## Guide to Using a Project Template

In the following steps, we'll explore how to use a project template when creating a project.

<Tabs>
  <Tab title="Infisical UI">
    When creating a new project, select the desired template from the dropdown menu in the create project modal.

    <img src="https://mintlify.s3.us-west-1.amazonaws.com/infisical-devin-1781641701-docs-github-pat-fine-grained/images/platform/project-templates/project-template-apply.png" alt="kms key options" />

    Your project will be provisioned with the configured template roles and environments.
  </Tab>

  <Tab title="API">
    To use a project template, make an API request to the [Create Project](/api-reference/endpoints/projects/create-project) API endpoint with the specified template name included.

    ### Sample request

    ```bash Request theme={null}
    curl --request POST \
    --url https://app.infisical.com/api/v1/projects \
    --header 'Authorization: Bearer <token>' \
    --header 'Content-Type: application/json' \
    --data '{
        "projectName": "My Project",
        "template": "<template-name>", // defaults to "default"
    }'
    ```

    ### Sample response

    ```bash Response theme={null}
    {
        "project": {
            "id": "<project-id>",
            "environments": "[...]", // configured environments
            ...
        }
    }
    ```

    <Note>
      Note that configured roles are not included in the project response.
    </Note>
  </Tab>
</Tabs>

## FAQ

<AccordionGroup>
  <Accordion title="Do changes to templates propagate to existing projects?">
    No. Project templates only apply at the time of project creation.
  </Accordion>
</AccordionGroup>
