> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.getunleash.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.getunleash.io/_mcp/server.

# [BETA] Create a release template.

POST https://app.unleash-instance.example.com/api/admin/projects/{projectId}/release-templates

**Enterprise feature**

**[BETA]** This API is in beta state, which means it may change or be removed in the future.

Creates and returns a release template scoped to the project.

Reference: https://docs.getunleash.io/api/release-templates/create-release-template-for-project

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: admin-api
  version: 1.0.0
paths:
  /api/admin/projects/{projectId}/release-templates:
    post:
      operationId: createReleaseTemplateForProject
      summary: '[BETA] Create a release template.'
      description: >-
        **Enterprise feature**


        **[BETA]** This API is in beta state, which means it may change or be
        removed in the future.


        Creates and returns a release template scoped to the project.
      tags:
        - releaseTemplates
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
        - name: Authorization
          in: header
          description: API key needed to access this API
          required: true
          schema:
            type: string
      responses:
        '200':
          description: '#/components/schemas/releasePlanTemplateSchema'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/releasePlanTemplateSchema'
        '401':
          description: >-
            Authorization information is missing or invalid. Provide a valid API
            token as the `authorization` header, e.g.
            `authorization:*.*.my-admin-token`.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/CreateReleaseTemplateForProjectRequestUnauthorizedError
        '409':
          description: >-
            The provided resource can not be created or updated because it would
            conflict with the current state of the resource or with an already
            existing resource, respectively.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/CreateReleaseTemplateForProjectRequestConflictError
servers:
  - url: https://app.unleash-instance.example.com
    description: Your Unleash instance (replace with your actual URL)
components:
  schemas:
    ReleasePlanTemplateSchemaDiscriminator:
      type: string
      enum:
        - template
      description: A field to distinguish between release plans and release templates.
      title: ReleasePlanTemplateSchemaDiscriminator
    ReleasePlanMilestoneSchemaTransitionCondition:
      type: object
      properties:
        intervalMinutes:
          type: integer
          description: The interval in minutes before transitioning
      required:
        - intervalMinutes
      description: The condition configuration for the transition
      title: ReleasePlanMilestoneSchemaTransitionCondition
    parametersSchema:
      type: object
      additionalProperties:
        type: string
      description: A list of parameters for a strategy
      title: parametersSchema
    ConstraintSchemaOperator:
      type: string
      enum:
        - NOT_IN
        - IN
        - STR_ENDS_WITH
        - STR_STARTS_WITH
        - STR_CONTAINS
        - NUM_EQ
        - NUM_GT
        - NUM_GTE
        - NUM_LT
        - NUM_LTE
        - DATE_AFTER
        - DATE_BEFORE
        - SEMVER_EQ
        - SEMVER_GT
        - SEMVER_LT
        - SEMVER_GTE
        - SEMVER_LTE
        - REGEX
      description: >-
        The operator to use when evaluating this constraint. For more
        information about the various operators, refer to [the strategy
        constraint operator
        documentation](https://docs.getunleash.io/concepts/activation-strategies#constraint-operators).
      title: ConstraintSchemaOperator
    constraintSchema:
      type: object
      properties:
        contextName:
          type: string
          description: The name of the context field that this constraint should apply to.
        operator:
          $ref: '#/components/schemas/ConstraintSchemaOperator'
          description: >-
            The operator to use when evaluating this constraint. For more
            information about the various operators, refer to [the strategy
            constraint operator
            documentation](https://docs.getunleash.io/concepts/activation-strategies#constraint-operators).
        caseInsensitive:
          type: boolean
          default: false
          description: >-
            Whether the operator should be case sensitive or not. Defaults to
            `false` (being case sensitive).
        inverted:
          type: boolean
          default: false
          description: >-
            Whether the result should be negated or not. If `true`, will turn a
            `true` result into a `false` result and vice versa.
        values:
          type: array
          items:
            type: string
          description: >-
            The context values that should be used for constraint evaluation.
            Use this property instead of `value` for properties that accept
            multiple values.
        value:
          type: string
          description: >-
            The context value that should be used for constraint evaluation. Use
            this property instead of `values` for properties that only accept
            single values.
      required:
        - contextName
        - operator
      description: >-
        A strategy constraint. For more information, refer to [the strategy
        constraint reference
        documentation](https://docs.getunleash.io/concepts/activation-strategies#constraints)
      title: constraintSchema
    CreateStrategyVariantSchemaWeightType:
      type: string
      enum:
        - variable
        - fix
      description: >-
        Set to `fix` if this variant must have exactly the weight allocated to
        it. If the type is `variable`, the weight will adjust so that the total
        weight of all variants adds up to 1000. Refer to the [variant weight
        documentation](https://docs.getunleash.io/concepts/feature-flag-variants#variant-weight).
      title: CreateStrategyVariantSchemaWeightType
    CreateStrategyVariantSchemaPayloadType:
      type: string
      enum:
        - json
        - csv
        - string
        - number
      description: >-
        The type of the value. Commonly used types are string, number, json and
        csv.
      title: CreateStrategyVariantSchemaPayloadType
    CreateStrategyVariantSchemaPayload:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/CreateStrategyVariantSchemaPayloadType'
          description: >-
            The type of the value. Commonly used types are string, number, json
            and csv.
        value:
          type: string
          description: The actual value of payload
      required:
        - type
        - value
      description: Extra data configured for this variant
      title: CreateStrategyVariantSchemaPayload
    createStrategyVariantSchema:
      type: object
      properties:
        name:
          type: string
          description: The variant name. Must be unique for this feature flag
        weight:
          type: integer
          description: >-
            The weight is the likelihood of any one user getting this variant.
            It is an integer between 0 and 1000. See the section on [variant
            weights](https://docs.getunleash.io/concepts/feature-flag-variants#variant-weight)
            for more information
        weightType:
          $ref: '#/components/schemas/CreateStrategyVariantSchemaWeightType'
          description: >-
            Set to `fix` if this variant must have exactly the weight allocated
            to it. If the type is `variable`, the weight will adjust so that the
            total weight of all variants adds up to 1000. Refer to the [variant
            weight
            documentation](https://docs.getunleash.io/concepts/feature-flag-variants#variant-weight).
        stickiness:
          type: string
          description: >-
            The
            [stickiness](https://docs.getunleash.io/concepts/feature-flag-variants#variant-stickiness)
            to use for distribution of this variant. Stickiness is how Unleash
            guarantees that the same user gets the same variant every time
        payload:
          $ref: '#/components/schemas/CreateStrategyVariantSchemaPayload'
          description: Extra data configured for this variant
      required:
        - name
        - weight
        - weightType
        - stickiness
      description: >-
        This is an experimental property. It may change or be removed as we work
        on it. Please don't depend on it yet. A strategy variant allows you to
        attach any data to strategies instead of only returning `true`/`false`.
        Strategy variants take precedence over feature variants.
      title: createStrategyVariantSchema
    releasePlanMilestoneStrategySchema:
      type: object
      properties:
        id:
          type: string
          description: The milestone strategy's ID. Milestone strategy IDs are ulids.
        milestoneId:
          type: string
          description: The ID of the milestone that this strategy belongs to.
        sortOrder:
          type: number
          format: double
          description: The order of the strategy in the list
        title:
          type:
            - string
            - 'null'
          description: A descriptive title for the strategy
        name:
          type: string
          description: The name of the strategy type
        strategyName:
          type: string
          description: The name of the strategy type
        parameters:
          $ref: '#/components/schemas/parametersSchema'
          description: An object containing the parameters for the strategy
        constraints:
          type: array
          items:
            $ref: '#/components/schemas/constraintSchema'
          description: >-
            A list of the constraints attached to the strategy. See
            https://docs.getunleash.io/concepts/activation-strategies#constraints
        variants:
          type: array
          items:
            $ref: '#/components/schemas/createStrategyVariantSchema'
          description: Strategy level variants
        segments:
          type: array
          items:
            type: number
            format: double
          description: Ids of segments to use for this strategy
        disabled:
          type:
            - boolean
            - 'null'
          description: >-
            A toggle to disable the strategy. defaults to false. Disabled
            strategies are not evaluated or returned to the SDKs
      required:
        - id
        - milestoneId
        - sortOrder
        - name
        - strategyName
      description: Schema representing the creation of a release plan milestone strategy.
      title: releasePlanMilestoneStrategySchema
    releasePlanMilestoneSchema:
      type: object
      properties:
        id:
          type: string
          description: The milestone's ID. Milestone IDs are ulids.
        name:
          type: string
          description: The name of the milestone.
        sortOrder:
          type: integer
          description: The order of the milestone in the release plan.
        releasePlanDefinitionId:
          type: string
          description: The ID of the release plan/template that this milestone belongs to.
        startedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: The date and time when the milestone was started.
        transitionCondition:
          oneOf:
            - $ref: >-
                #/components/schemas/ReleasePlanMilestoneSchemaTransitionCondition
            - type: 'null'
          description: The condition configuration for the transition
        progressionExecutedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: The date and time when the milestone progression was executed.
        pausedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: The date and time when the milestone was paused.
        strategies:
          type: array
          items:
            $ref: '#/components/schemas/releasePlanMilestoneStrategySchema'
          description: A list of strategies that are attached to this milestone.
      required:
        - id
        - name
        - sortOrder
        - releasePlanDefinitionId
      description: Schema representing the creation of a release plan milestone.
      title: releasePlanMilestoneSchema
    releasePlanTemplateSchema:
      type: object
      properties:
        id:
          type: string
          description: The release plan/template's ID. Release template IDs are ulids.
        discriminator:
          $ref: '#/components/schemas/ReleasePlanTemplateSchemaDiscriminator'
          description: A field to distinguish between release plans and release templates.
        name:
          type: string
          description: The name of the release template.
        description:
          type:
            - string
            - 'null'
          description: A description of the release template.
        project:
          type:
            - string
            - 'null'
          description: >-
            The project this release template belongs to. `null` for global
            release templates available in all projects.
        createdByUserId:
          type: number
          format: double
          description: 'Release template: The ID of the user who created this template.'
        createdAt:
          type: string
          format: date-time
          description: The date and time that the release template was created.
        milestones:
          type: array
          items:
            $ref: '#/components/schemas/releasePlanMilestoneSchema'
          description: A list of the milestones in this release template.
        archivedAt:
          type:
            - string
            - 'null'
          format: date-time
          description: The date and time that the release template was archived.
      required:
        - id
        - discriminator
        - name
        - createdByUserId
        - createdAt
      description: Schema representing the creation of a release template.
      title: releasePlanTemplateSchema
    CreateReleaseTemplateForProjectRequestUnauthorizedError:
      type: object
      properties:
        id:
          type: string
          description: The ID of the error instance
        name:
          type: string
          description: The name of the error kind
        message:
          type: string
          description: A description of what went wrong.
      title: CreateReleaseTemplateForProjectRequestUnauthorizedError
    CreateReleaseTemplateForProjectRequestConflictError:
      type: object
      properties:
        id:
          type: string
          description: The ID of the error instance
        name:
          type: string
          description: The name of the error kind
        message:
          type: string
          description: A description of what went wrong.
      title: CreateReleaseTemplateForProjectRequestConflictError
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: Authorization
      description: API key needed to access this API
    bearerToken:
      type: http
      scheme: bearer
      description: API key needed to access this API, in Bearer token format

```

## Examples



**Response**

```json
{
  "id": "01JB9GGTGQYEQ9D40R17T3YVW2",
  "discriminator": "template",
  "name": "My release plan",
  "createdByUserId": 53,
  "createdAt": "2022-01-01T00:00:00Z",
  "description": "This is my release plan",
  "project": "my-project",
  "milestones": [
    {
      "id": "01JB9GGTGQYEQ9D40R17T3YVW1",
      "name": "My milestone",
      "sortOrder": 1,
      "releasePlanDefinitionId": "01JB9GGTGQYEQ9D40R17T3YVW2",
      "startedAt": "2024-01-01T00:00:00.000Z",
      "transitionCondition": {
        "intervalMinutes": 30
      },
      "progressionExecutedAt": "2024-01-01T00:00:00.000Z",
      "pausedAt": "2024-01-01T00:00:00.000Z",
      "strategies": [
        {
          "id": "01JB9GGTGQYEQ9D40R17T3YVW3",
          "milestoneId": "01JB9GGTGQYEQ9D40R17T3YVW1",
          "sortOrder": 9999,
          "name": "flexibleRollout",
          "strategyName": "flexibleRollout",
          "title": "Gradual Rollout 25-Prod",
          "parameters": {
            "groupId": "some_new",
            "rollout": "25",
            "stickiness": "sessionId"
          },
          "constraints": [
            {
              "contextName": "appName",
              "operator": "IN",
              "caseInsensitive": false,
              "inverted": false,
              "values": [
                "1",
                "2"
              ]
            }
          ],
          "variants": [
            {
              "name": "blue_group",
              "weight": 1,
              "weightType": "fix",
              "stickiness": "custom.context.field",
              "payload": {
                "type": "json",
                "value": "{\"color\": \"red\"}"
              }
            }
          ],
          "segments": [
            1,
            2
          ],
          "disabled": false
        }
      ]
    }
  ],
  "archivedAt": "2022-01-01T00:00:00Z"
}
```

**SDK Code**

```python
import requests

url = "https://app.unleash-instance.example.com/api/admin/projects/projectId/release-templates"

headers = {"Authorization": "<apiKey>"}

response = requests.post(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://app.unleash-instance.example.com/api/admin/projects/projectId/release-templates';
const options = {method: 'POST', headers: {Authorization: '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://app.unleash-instance.example.com/api/admin/projects/projectId/release-templates"

	req, _ := http.NewRequest("POST", url, nil)

	req.Header.Add("Authorization", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://app.unleash-instance.example.com/api/admin/projects/projectId/release-templates")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://app.unleash-instance.example.com/api/admin/projects/projectId/release-templates")
  .header("Authorization", "<apiKey>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://app.unleash-instance.example.com/api/admin/projects/projectId/release-templates', [
  'headers' => [
    'Authorization' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://app.unleash-instance.example.com/api/admin/projects/projectId/release-templates");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://app.unleash-instance.example.com/api/admin/projects/projectId/release-templates")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```