# Create a strategy POST https://app.unleash-instance.example.com/api/admin/strategies Content-Type: application/json Creates a custom strategy type based on the supplied data. Reference: https://docs.getunleash.io/api/create-strategy ## OpenAPI Specification ```yaml openapi: 3.1.1 info: title: Create a strategy version: endpoint_strategies.createStrategy paths: /api/admin/strategies: post: operationId: create-strategy summary: Create a strategy description: Creates a custom strategy type based on the supplied data. tags: - - subpackage_strategies parameters: - name: Authorization in: header description: Header authentication of the form `undefined ` required: true schema: type: string responses: '201': description: The resource was successfully created. content: application/json: schema: $ref: '#/components/schemas/strategySchema' '401': description: >- Authorization information is missing or invalid. Provide a valid API token as the `authorization` header, e.g. `authorization:*.*.my-admin-token`. content: {} '403': description: >- The provided user credentials are valid, but the user does not have the necessary permissions to perform this operation content: {} '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: {} '415': description: >- The operation does not support request payloads of the provided type. Please ensure that you're using one of the listed payload types and that you have specified the right content type in the "content-type" header. content: {} requestBody: description: createStrategySchema content: application/json: schema: $ref: '#/components/schemas/createStrategySchema' components: schemas: CreateStrategySchemaParametersItemsType: type: string enum: - value: string - value: percentage - value: list - value: number - value: boolean CreateStrategySchemaParametersItems: type: object properties: name: type: string description: The name of the parameter type: $ref: '#/components/schemas/CreateStrategySchemaParametersItemsType' description: >- The [type of the parameter](https://docs.getunleash.io/concepts/activation-strategies#parameters) description: type: string description: >- A description of this strategy parameter. Use this to indicate to the users what the parameter does. required: type: boolean description: >- Whether this parameter must be configured when using the strategy. Defaults to `false` required: - name - type createStrategySchema: type: object properties: name: type: string description: The name of the strategy type. Must be unique. title: type: string description: The title of the strategy description: type: string description: A description of the strategy type. editable: type: boolean description: Whether the strategy type is editable or not. Defaults to `true`. deprecated: type: boolean description: Whether the strategy type is deprecated or not. Defaults to `false`. parameters: type: array items: $ref: '#/components/schemas/CreateStrategySchemaParametersItems' description: >- The parameter list lets you pass arguments to your custom activation strategy. These will be made available to your custom strategy implementation. required: - name - parameters StrategySchemaParametersItems: type: object properties: name: type: string type: type: string description: type: string required: type: boolean strategySchema: type: object properties: title: type: - string - 'null' description: An optional title for the strategy name: type: string description: The name (type) of the strategy displayName: type: - string - 'null' description: A human friendly name for the strategy description: type: - string - 'null' description: A short description of the strategy editable: type: boolean description: >- Whether the strategy can be edited or not. Strategies bundled with Unleash cannot be edited. deprecated: type: boolean parameters: type: array items: $ref: '#/components/schemas/StrategySchemaParametersItems' description: A list of relevant parameters for each strategy required: - name - displayName - description - editable - deprecated - parameters ``` ## SDK Code Examples ```python import requests url = "https://app.unleash-instance.example.com/api/admin/strategies" payload = { "name": "my-custom-strategy", "parameters": [ { "name": "Rollout percentage", "type": "percentage" } ] } headers = { "Authorization": "", "Content-Type": "application/json" } response = requests.post(url, json=payload, headers=headers) print(response.json()) ``` ```javascript const url = 'https://app.unleash-instance.example.com/api/admin/strategies'; const options = { method: 'POST', headers: {Authorization: '', 'Content-Type': 'application/json'}, body: '{"name":"my-custom-strategy","parameters":[{"name":"Rollout percentage","type":"percentage"}]}' }; 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" "strings" "net/http" "io" ) func main() { url := "https://app.unleash-instance.example.com/api/admin/strategies" payload := strings.NewReader("{\n \"name\": \"my-custom-strategy\",\n \"parameters\": [\n {\n \"name\": \"Rollout percentage\",\n \"type\": \"percentage\"\n }\n ]\n}") req, _ := http.NewRequest("POST", url, payload) req.Header.Add("Authorization", "") req.Header.Add("Content-Type", "application/json") 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/strategies") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request["Authorization"] = '' request["Content-Type"] = 'application/json' request.body = "{\n \"name\": \"my-custom-strategy\",\n \"parameters\": [\n {\n \"name\": \"Rollout percentage\",\n \"type\": \"percentage\"\n }\n ]\n}" response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.post("https://app.unleash-instance.example.com/api/admin/strategies") .header("Authorization", "") .header("Content-Type", "application/json") .body("{\n \"name\": \"my-custom-strategy\",\n \"parameters\": [\n {\n \"name\": \"Rollout percentage\",\n \"type\": \"percentage\"\n }\n ]\n}") .asString(); ``` ```php request('POST', 'https://app.unleash-instance.example.com/api/admin/strategies', [ 'body' => '{ "name": "my-custom-strategy", "parameters": [ { "name": "Rollout percentage", "type": "percentage" } ] }', 'headers' => [ 'Authorization' => '', 'Content-Type' => 'application/json', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://app.unleash-instance.example.com/api/admin/strategies"); var request = new RestRequest(Method.POST); request.AddHeader("Authorization", ""); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{\n \"name\": \"my-custom-strategy\",\n \"parameters\": [\n {\n \"name\": \"Rollout percentage\",\n \"type\": \"percentage\"\n }\n ]\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = [ "Authorization": "", "Content-Type": "application/json" ] let parameters = [ "name": "my-custom-strategy", "parameters": [ [ "name": "Rollout percentage", "type": "percentage" ] ] ] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://app.unleash-instance.example.com/api/admin/strategies")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" request.allHTTPHeaderFields = headers request.httpBody = postData as Data 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() ```