Create a new environment
POST
/
v1
/
environments
cURL
curl -X POST 'https://api.growthbook.io/api/v1/environments' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"id":"new-env","description":"My new environment"}'import requests
url = "https://api.growthbook.io/api/v1/environments"
payload = {
"id": "<string>",
"description": "<string>",
"toggleOnList": True,
"defaultState": True,
"projects": ["<string>"],
"parent": "<string>"
}
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>',
description: '<string>',
toggleOnList: true,
defaultState: true,
projects: ['<string>'],
parent: '<string>'
})
};
fetch('https://api.growthbook.io/api/v1/environments', 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/environments",
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>',
'description' => '<string>',
'toggleOnList' => true,
'defaultState' => true,
'projects' => [
'<string>'
],
'parent' => '<string>'
]),
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/environments"
payload := strings.NewReader("{\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"toggleOnList\": true,\n \"defaultState\": true,\n \"projects\": [\n \"<string>\"\n ],\n \"parent\": \"<string>\"\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/environments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"toggleOnList\": true,\n \"defaultState\": true,\n \"projects\": [\n \"<string>\"\n ],\n \"parent\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/environments")
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 \"description\": \"<string>\",\n \"toggleOnList\": true,\n \"defaultState\": true,\n \"projects\": [\n \"<string>\"\n ],\n \"parent\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"environment": {
"id": "<string>",
"description": "<string>",
"toggleOnList": true,
"defaultState": true,
"projects": [
"<string>"
],
"parent": "<string>"
}
}{
"confirmation": {
"id": "<string>",
"status": "pending",
"actions": [
{
"action": "feature.create",
"environments": [
"<string>"
]
}
],
"summary": "<string>",
"url": "<string>",
"expiresAt": "<string>",
"response": {
"status": 123,
"body": "<unknown>"
},
"note": "<string>"
},
"message": "<string>"
}Authorizations
bearerAuthbasicAuth
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
application/json
Permanent ID, shown as the environment name (e.g. production). Short lowercase slug.
Put context here, not in the name.
Show on feature list page
Default state for new features
Limits which Projects can use this environment. Omit to allow all Projects.
An environment that the new environment should inherit feature rules from. Requires an enterprise license
Response
Resource created
Show child attributes
Show child attributes
Was this page helpful?
⌘I
cURL
curl -X POST 'https://api.growthbook.io/api/v1/environments' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"id":"new-env","description":"My new environment"}'import requests
url = "https://api.growthbook.io/api/v1/environments"
payload = {
"id": "<string>",
"description": "<string>",
"toggleOnList": True,
"defaultState": True,
"projects": ["<string>"],
"parent": "<string>"
}
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>',
description: '<string>',
toggleOnList: true,
defaultState: true,
projects: ['<string>'],
parent: '<string>'
})
};
fetch('https://api.growthbook.io/api/v1/environments', 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/environments",
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>',
'description' => '<string>',
'toggleOnList' => true,
'defaultState' => true,
'projects' => [
'<string>'
],
'parent' => '<string>'
]),
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/environments"
payload := strings.NewReader("{\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"toggleOnList\": true,\n \"defaultState\": true,\n \"projects\": [\n \"<string>\"\n ],\n \"parent\": \"<string>\"\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/environments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"<string>\",\n \"description\": \"<string>\",\n \"toggleOnList\": true,\n \"defaultState\": true,\n \"projects\": [\n \"<string>\"\n ],\n \"parent\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/environments")
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 \"description\": \"<string>\",\n \"toggleOnList\": true,\n \"defaultState\": true,\n \"projects\": [\n \"<string>\"\n ],\n \"parent\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"environment": {
"id": "<string>",
"description": "<string>",
"toggleOnList": true,
"defaultState": true,
"projects": [
"<string>"
],
"parent": "<string>"
}
}{
"confirmation": {
"id": "<string>",
"status": "pending",
"actions": [
{
"action": "feature.create",
"environments": [
"<string>"
]
}
],
"summary": "<string>",
"url": "<string>",
"expiresAt": "<string>",
"response": {
"status": 123,
"body": "<unknown>"
},
"note": "<string>"
},
"message": "<string>"
}
