Partially update a single constant
Applies the change immediately and records it as a published revision, so it appears in history and fires revision webhooks. When the organization requires approvals, open a draft instead or pass bypassApproval with the bypass permission.
curl -X POST 'https://api.growthbook.io/api/v1/constants/config-snippet' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"value":"{\"timeout\":60}"}'import requests
url = "https://api.growthbook.io/api/v1/constants/{key}"
payload = {
"name": "<string>",
"value": "<string>",
"environmentValues": {},
"description": "<string>",
"project": "<string>",
"owner": "<string>",
"bypassApproval": True,
"ignoreWarnings": True,
"skipSchemaValidation": True,
"skipHooks": True
}
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({
name: '<string>',
value: '<string>',
environmentValues: {},
description: '<string>',
project: '<string>',
owner: '<string>',
bypassApproval: true,
ignoreWarnings: true,
skipSchemaValidation: true,
skipHooks: true
})
};
fetch('https://api.growthbook.io/api/v1/constants/{key}', 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/constants/{key}",
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([
'name' => '<string>',
'value' => '<string>',
'environmentValues' => [
],
'description' => '<string>',
'project' => '<string>',
'owner' => '<string>',
'bypassApproval' => true,
'ignoreWarnings' => true,
'skipSchemaValidation' => true,
'skipHooks' => true
]),
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/constants/{key}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"value\": \"<string>\",\n \"environmentValues\": {},\n \"description\": \"<string>\",\n \"project\": \"<string>\",\n \"owner\": \"<string>\",\n \"bypassApproval\": true,\n \"ignoreWarnings\": true,\n \"skipSchemaValidation\": true,\n \"skipHooks\": true\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/constants/{key}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"value\": \"<string>\",\n \"environmentValues\": {},\n \"description\": \"<string>\",\n \"project\": \"<string>\",\n \"owner\": \"<string>\",\n \"bypassApproval\": true,\n \"ignoreWarnings\": true,\n \"skipSchemaValidation\": true,\n \"skipHooks\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/constants/{key}")
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 \"name\": \"<string>\",\n \"value\": \"<string>\",\n \"environmentValues\": {},\n \"description\": \"<string>\",\n \"project\": \"<string>\",\n \"owner\": \"<string>\",\n \"bypassApproval\": true,\n \"ignoreWarnings\": true,\n \"skipSchemaValidation\": true,\n \"skipHooks\": true\n}"
response = http.request(request)
puts response.read_body{
"constant": {
"id": "<string>",
"key": "<string>",
"name": "<string>",
"type": "string",
"dateCreated": "2023-11-07T05:31:56Z",
"dateUpdated": "2023-11-07T05:31:56Z",
"owner": "<string>",
"ownerEmail": "<string>",
"value": "<string>",
"environmentValues": {},
"description": "<string>",
"project": "<string>",
"archived": true
},
"bypassedGates": [
{
"type": "<string>",
"outcome": "bypassed",
"via": "ignoreWarnings"
}
]
}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"
Path Parameters
The key of the constant
Body
Per-environment value overrides (environment id → value). When provided, this REPLACES the entire override map — send the complete set, not just the environments you want to change (omit the field to leave overrides unchanged).
Show child attributes
Show child attributes
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.
Set to true to write directly to the live Constant without approval. The caller must have Bypass draft approvals access in the Constant's Project, unless the organization enables the REST API approval bypass. This field has no effect when approval is not required.
Set to true to acknowledge the warnings listed in a blocked response and continue. This covers experiment guards, locked dependents, and references affected by an archive. When the organization treats schema failures as warnings, it also covers schema and invariant warnings. It never bypasses a rejected Custom Hook. On revision publish endpoints, it can also force-publish an out-of-date draft when the caller has Bypass draft approvals access.
Set to true to publish despite schema validation errors, failed invariants, or schema changes that invalidate dependent resources. This does not bypass a rejected Custom Hook; use skipHooks for that. The caller must have Bypass draft approvals access for Feature Flags, Configs, and Constants in every Project. Otherwise, this field is ignored.
Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use skipSchemaValidation for that. The caller must have Bypass draft approvals access for Feature Flags, Configs, and Constants in every Project. Otherwise, this field is ignored.
Was this page helpful?
curl -X POST 'https://api.growthbook.io/api/v1/constants/config-snippet' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"value":"{\"timeout\":60}"}'import requests
url = "https://api.growthbook.io/api/v1/constants/{key}"
payload = {
"name": "<string>",
"value": "<string>",
"environmentValues": {},
"description": "<string>",
"project": "<string>",
"owner": "<string>",
"bypassApproval": True,
"ignoreWarnings": True,
"skipSchemaValidation": True,
"skipHooks": True
}
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({
name: '<string>',
value: '<string>',
environmentValues: {},
description: '<string>',
project: '<string>',
owner: '<string>',
bypassApproval: true,
ignoreWarnings: true,
skipSchemaValidation: true,
skipHooks: true
})
};
fetch('https://api.growthbook.io/api/v1/constants/{key}', 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/constants/{key}",
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([
'name' => '<string>',
'value' => '<string>',
'environmentValues' => [
],
'description' => '<string>',
'project' => '<string>',
'owner' => '<string>',
'bypassApproval' => true,
'ignoreWarnings' => true,
'skipSchemaValidation' => true,
'skipHooks' => true
]),
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/constants/{key}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"value\": \"<string>\",\n \"environmentValues\": {},\n \"description\": \"<string>\",\n \"project\": \"<string>\",\n \"owner\": \"<string>\",\n \"bypassApproval\": true,\n \"ignoreWarnings\": true,\n \"skipSchemaValidation\": true,\n \"skipHooks\": true\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/constants/{key}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"value\": \"<string>\",\n \"environmentValues\": {},\n \"description\": \"<string>\",\n \"project\": \"<string>\",\n \"owner\": \"<string>\",\n \"bypassApproval\": true,\n \"ignoreWarnings\": true,\n \"skipSchemaValidation\": true,\n \"skipHooks\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/constants/{key}")
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 \"name\": \"<string>\",\n \"value\": \"<string>\",\n \"environmentValues\": {},\n \"description\": \"<string>\",\n \"project\": \"<string>\",\n \"owner\": \"<string>\",\n \"bypassApproval\": true,\n \"ignoreWarnings\": true,\n \"skipSchemaValidation\": true,\n \"skipHooks\": true\n}"
response = http.request(request)
puts response.read_body{
"constant": {
"id": "<string>",
"key": "<string>",
"name": "<string>",
"type": "string",
"dateCreated": "2023-11-07T05:31:56Z",
"dateUpdated": "2023-11-07T05:31:56Z",
"owner": "<string>",
"ownerEmail": "<string>",
"value": "<string>",
"environmentValues": {},
"description": "<string>",
"project": "<string>",
"archived": true
},
"bypassedGates": [
{
"type": "<string>",
"outcome": "bypassed",
"via": "ignoreWarnings"
}
]
}
