Create a single feature
Deprecated. Use POST /v2/features instead.
curl -X POST 'https://api.growthbook.io/api/v1/features' \
-H 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.growthbook.io/api/v1/features"
payload = {
"id": "<string>",
"defaultValue": "<string>",
"archived": True,
"description": "<string>",
"owner": "<string>",
"project": "<string>",
"tags": ["<string>"],
"environments": {},
"prerequisites": ["<string>"],
"jsonSchema": "<string>",
"customFields": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
id: '<string>',
defaultValue: '<string>',
archived: true,
description: '<string>',
owner: '<string>',
project: '<string>',
tags: ['<string>'],
environments: {},
prerequisites: ['<string>'],
jsonSchema: '<string>',
customFields: {}
})
};
fetch('https://api.growthbook.io/api/v1/features', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.growthbook.io/api/v1/features",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => '<string>',
'defaultValue' => '<string>',
'archived' => true,
'description' => '<string>',
'owner' => '<string>',
'project' => '<string>',
'tags' => [
'<string>'
],
'environments' => [
],
'prerequisites' => [
'<string>'
],
'jsonSchema' => '<string>',
'customFields' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.growthbook.io/api/v1/features"
payload := strings.NewReader("{\n \"id\": \"<string>\",\n \"defaultValue\": \"<string>\",\n \"archived\": true,\n \"description\": \"<string>\",\n \"owner\": \"<string>\",\n \"project\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"environments\": {},\n \"prerequisites\": [\n \"<string>\"\n ],\n \"jsonSchema\": \"<string>\",\n \"customFields\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.growthbook.io/api/v1/features")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"<string>\",\n \"defaultValue\": \"<string>\",\n \"archived\": true,\n \"description\": \"<string>\",\n \"owner\": \"<string>\",\n \"project\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"environments\": {},\n \"prerequisites\": [\n \"<string>\"\n ],\n \"jsonSchema\": \"<string>\",\n \"customFields\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/features")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"<string>\",\n \"defaultValue\": \"<string>\",\n \"archived\": true,\n \"description\": \"<string>\",\n \"owner\": \"<string>\",\n \"project\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"environments\": {},\n \"prerequisites\": [\n \"<string>\"\n ],\n \"jsonSchema\": \"<string>\",\n \"customFields\": {}\n}"
response = http.request(request)
puts response.read_body{
"feature": {
"id": "<string>",
"dateCreated": "2023-11-07T05:31:56Z",
"dateUpdated": "2023-11-07T05:31:56Z",
"archived": true,
"description": "<string>",
"owner": "<string>",
"project": "<string>",
"defaultValue": "<string>",
"tags": [
"<string>"
],
"environments": {},
"revision": {
"version": 123,
"comment": "<string>",
"date": "2023-11-07T05:31:56Z",
"createdBy": "<string>",
"publishedBy": "<string>"
},
"ownerEmail": "<string>",
"prerequisites": [
"<string>"
],
"customFields": {},
"holdout": {
"id": "<string>",
"value": "<string>"
}
}
}Authorizations
If using Bearer auth, pass the Secret Key as the token:
curl https://api.growthbook.io/api/v1/features -H "Authorization: Bearer secret_abc123DEF456"
Body
A unique key name for the feature. Feature keys can only include letters, numbers, hyphens, and underscores.
1The data type of the feature payload. Boolean by default.
boolean, string, number, json Default value when feature is enabled. Type must match valueType.
Description of the feature
10000The userId or email address of the owner. If an email address is provided, it will be used to look up the userId of the matching organization member. If an ID is provided, it will be validated as existing in the organization. When omitted, it defaults to the user associated with the request's Personal Access Token (PAT), if one is being used.
An associated project ID
List of associated tags
A dictionary of environments that are enabled for this feature. Keys supply the names of environments. Environments belong to organization and are not specified will be disabled by default.
Show child attributes
Show child attributes
Feature IDs. Each feature must evaluate to true
Use JSON schema to validate the payload of a JSON-type feature value (enterprise only).
Show child attributes
Show child attributes
Response
Resource created
Show child attributes
Show child attributes
Was this page helpful?
curl -X POST 'https://api.growthbook.io/api/v1/features' \
-H 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.growthbook.io/api/v1/features"
payload = {
"id": "<string>",
"defaultValue": "<string>",
"archived": True,
"description": "<string>",
"owner": "<string>",
"project": "<string>",
"tags": ["<string>"],
"environments": {},
"prerequisites": ["<string>"],
"jsonSchema": "<string>",
"customFields": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
id: '<string>',
defaultValue: '<string>',
archived: true,
description: '<string>',
owner: '<string>',
project: '<string>',
tags: ['<string>'],
environments: {},
prerequisites: ['<string>'],
jsonSchema: '<string>',
customFields: {}
})
};
fetch('https://api.growthbook.io/api/v1/features', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.growthbook.io/api/v1/features",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => '<string>',
'defaultValue' => '<string>',
'archived' => true,
'description' => '<string>',
'owner' => '<string>',
'project' => '<string>',
'tags' => [
'<string>'
],
'environments' => [
],
'prerequisites' => [
'<string>'
],
'jsonSchema' => '<string>',
'customFields' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.growthbook.io/api/v1/features"
payload := strings.NewReader("{\n \"id\": \"<string>\",\n \"defaultValue\": \"<string>\",\n \"archived\": true,\n \"description\": \"<string>\",\n \"owner\": \"<string>\",\n \"project\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"environments\": {},\n \"prerequisites\": [\n \"<string>\"\n ],\n \"jsonSchema\": \"<string>\",\n \"customFields\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.growthbook.io/api/v1/features")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"<string>\",\n \"defaultValue\": \"<string>\",\n \"archived\": true,\n \"description\": \"<string>\",\n \"owner\": \"<string>\",\n \"project\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"environments\": {},\n \"prerequisites\": [\n \"<string>\"\n ],\n \"jsonSchema\": \"<string>\",\n \"customFields\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/features")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"<string>\",\n \"defaultValue\": \"<string>\",\n \"archived\": true,\n \"description\": \"<string>\",\n \"owner\": \"<string>\",\n \"project\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"environments\": {},\n \"prerequisites\": [\n \"<string>\"\n ],\n \"jsonSchema\": \"<string>\",\n \"customFields\": {}\n}"
response = http.request(request)
puts response.read_body{
"feature": {
"id": "<string>",
"dateCreated": "2023-11-07T05:31:56Z",
"dateUpdated": "2023-11-07T05:31:56Z",
"archived": true,
"description": "<string>",
"owner": "<string>",
"project": "<string>",
"defaultValue": "<string>",
"tags": [
"<string>"
],
"environments": {},
"revision": {
"version": 123,
"comment": "<string>",
"date": "2023-11-07T05:31:56Z",
"createdBy": "<string>",
"publishedBy": "<string>"
},
"ownerEmail": "<string>",
"prerequisites": [
"<string>"
],
"customFields": {},
"holdout": {
"id": "<string>",
"value": "<string>"
}
}
}
