Partially update a feature
Updates the Feature Flag and immediately publishes a new revision. The caller needs Edit access in the Feature Flag’s Project and Publish access for every affected environment. When approval is required, use the revision endpoints instead, unless the caller can bypass draft approvals.
Other top-level fields are patch-merged: omit a field to leave it unchanged. The rules field, when supplied, replaces the entire rules array in one operation. To preserve existing rules, fetch the Feature Flag, update the returned rules array, and send the complete array back. Safe-rollout rules round-trip through safeRolloutId; use POST /v2/features/:id/revisions/:version/rules to create new ones.
curl -X POST 'https://api.growthbook.io/api/v2/features/{id}' \
-H 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.growthbook.io/api/v2/features/{id}"
payload = {
"description": "<string>",
"archived": True,
"project": "<string>",
"targetingAllProjects": True,
"targetingProjects": ["<string>"],
"owner": "<string>",
"defaultValue": "<string>",
"baseConfig": "<string>",
"defaultValueConfig": "<string>",
"tags": ["<string>"],
"rules": [
{
"type": "force",
"value": "<string>",
"description": "<string>",
"condition": "<string>",
"savedGroups": [{ "ids": ["<string>"] }],
"savedGroupTargeting": [{ "savedGroups": ["<string>"] }],
"prerequisites": [
{
"id": "<string>",
"condition": "<string>"
}
],
"scheduleRules": [
{
"timestamp": "2023-11-07T05:31:56Z",
"enabled": True
}
],
"id": "<string>",
"enabled": True,
"config": "<string>",
"sparse": True,
"allEnvironments": True,
"environments": ["<string>"],
"allProjects": True,
"projects": ["<string>"]
}
],
"environments": {},
"prerequisites": ["<string>"],
"jsonSchema": "<string>",
"customFields": {},
"holdout": {
"id": "<string>",
"value": "<string>"
},
"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({
description: '<string>',
archived: true,
project: '<string>',
targetingAllProjects: true,
targetingProjects: ['<string>'],
owner: '<string>',
defaultValue: '<string>',
baseConfig: '<string>',
defaultValueConfig: '<string>',
tags: ['<string>'],
rules: [
{
type: 'force',
value: '<string>',
description: '<string>',
condition: '<string>',
savedGroups: [{ids: ['<string>']}],
savedGroupTargeting: [{savedGroups: ['<string>']}],
prerequisites: [{id: '<string>', condition: '<string>'}],
scheduleRules: [{timestamp: '2023-11-07T05:31:56Z', enabled: true}],
id: '<string>',
enabled: true,
config: '<string>',
sparse: true,
allEnvironments: true,
environments: ['<string>'],
allProjects: true,
projects: ['<string>']
}
],
environments: {},
prerequisites: ['<string>'],
jsonSchema: '<string>',
customFields: {},
holdout: {id: '<string>', value: '<string>'},
ignoreWarnings: true,
skipSchemaValidation: true,
skipHooks: true
})
};
fetch('https://api.growthbook.io/api/v2/features/{id}', 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/v2/features/{id}",
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([
'description' => '<string>',
'archived' => true,
'project' => '<string>',
'targetingAllProjects' => true,
'targetingProjects' => [
'<string>'
],
'owner' => '<string>',
'defaultValue' => '<string>',
'baseConfig' => '<string>',
'defaultValueConfig' => '<string>',
'tags' => [
'<string>'
],
'rules' => [
[
'type' => 'force',
'value' => '<string>',
'description' => '<string>',
'condition' => '<string>',
'savedGroups' => [
[
'ids' => [
'<string>'
]
]
],
'savedGroupTargeting' => [
[
'savedGroups' => [
'<string>'
]
]
],
'prerequisites' => [
[
'id' => '<string>',
'condition' => '<string>'
]
],
'scheduleRules' => [
[
'timestamp' => '2023-11-07T05:31:56Z',
'enabled' => true
]
],
'id' => '<string>',
'enabled' => true,
'config' => '<string>',
'sparse' => true,
'allEnvironments' => true,
'environments' => [
'<string>'
],
'allProjects' => true,
'projects' => [
'<string>'
]
]
],
'environments' => [
],
'prerequisites' => [
'<string>'
],
'jsonSchema' => '<string>',
'customFields' => [
],
'holdout' => [
'id' => '<string>',
'value' => '<string>'
],
'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/v2/features/{id}"
payload := strings.NewReader("{\n \"description\": \"<string>\",\n \"archived\": true,\n \"project\": \"<string>\",\n \"targetingAllProjects\": true,\n \"targetingProjects\": [\n \"<string>\"\n ],\n \"owner\": \"<string>\",\n \"defaultValue\": \"<string>\",\n \"baseConfig\": \"<string>\",\n \"defaultValueConfig\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"rules\": [\n {\n \"type\": \"force\",\n \"value\": \"<string>\",\n \"description\": \"<string>\",\n \"condition\": \"<string>\",\n \"savedGroups\": [\n {\n \"ids\": [\n \"<string>\"\n ]\n }\n ],\n \"savedGroupTargeting\": [\n {\n \"savedGroups\": [\n \"<string>\"\n ]\n }\n ],\n \"prerequisites\": [\n {\n \"id\": \"<string>\",\n \"condition\": \"<string>\"\n }\n ],\n \"scheduleRules\": [\n {\n \"timestamp\": \"2023-11-07T05:31:56Z\",\n \"enabled\": true\n }\n ],\n \"id\": \"<string>\",\n \"enabled\": true,\n \"config\": \"<string>\",\n \"sparse\": true,\n \"allEnvironments\": true,\n \"environments\": [\n \"<string>\"\n ],\n \"allProjects\": true,\n \"projects\": [\n \"<string>\"\n ]\n }\n ],\n \"environments\": {},\n \"prerequisites\": [\n \"<string>\"\n ],\n \"jsonSchema\": \"<string>\",\n \"customFields\": {},\n \"holdout\": {\n \"id\": \"<string>\",\n \"value\": \"<string>\"\n },\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/v2/features/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"<string>\",\n \"archived\": true,\n \"project\": \"<string>\",\n \"targetingAllProjects\": true,\n \"targetingProjects\": [\n \"<string>\"\n ],\n \"owner\": \"<string>\",\n \"defaultValue\": \"<string>\",\n \"baseConfig\": \"<string>\",\n \"defaultValueConfig\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"rules\": [\n {\n \"type\": \"force\",\n \"value\": \"<string>\",\n \"description\": \"<string>\",\n \"condition\": \"<string>\",\n \"savedGroups\": [\n {\n \"ids\": [\n \"<string>\"\n ]\n }\n ],\n \"savedGroupTargeting\": [\n {\n \"savedGroups\": [\n \"<string>\"\n ]\n }\n ],\n \"prerequisites\": [\n {\n \"id\": \"<string>\",\n \"condition\": \"<string>\"\n }\n ],\n \"scheduleRules\": [\n {\n \"timestamp\": \"2023-11-07T05:31:56Z\",\n \"enabled\": true\n }\n ],\n \"id\": \"<string>\",\n \"enabled\": true,\n \"config\": \"<string>\",\n \"sparse\": true,\n \"allEnvironments\": true,\n \"environments\": [\n \"<string>\"\n ],\n \"allProjects\": true,\n \"projects\": [\n \"<string>\"\n ]\n }\n ],\n \"environments\": {},\n \"prerequisites\": [\n \"<string>\"\n ],\n \"jsonSchema\": \"<string>\",\n \"customFields\": {},\n \"holdout\": {\n \"id\": \"<string>\",\n \"value\": \"<string>\"\n },\n \"ignoreWarnings\": true,\n \"skipSchemaValidation\": true,\n \"skipHooks\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v2/features/{id}")
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 \"description\": \"<string>\",\n \"archived\": true,\n \"project\": \"<string>\",\n \"targetingAllProjects\": true,\n \"targetingProjects\": [\n \"<string>\"\n ],\n \"owner\": \"<string>\",\n \"defaultValue\": \"<string>\",\n \"baseConfig\": \"<string>\",\n \"defaultValueConfig\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"rules\": [\n {\n \"type\": \"force\",\n \"value\": \"<string>\",\n \"description\": \"<string>\",\n \"condition\": \"<string>\",\n \"savedGroups\": [\n {\n \"ids\": [\n \"<string>\"\n ]\n }\n ],\n \"savedGroupTargeting\": [\n {\n \"savedGroups\": [\n \"<string>\"\n ]\n }\n ],\n \"prerequisites\": [\n {\n \"id\": \"<string>\",\n \"condition\": \"<string>\"\n }\n ],\n \"scheduleRules\": [\n {\n \"timestamp\": \"2023-11-07T05:31:56Z\",\n \"enabled\": true\n }\n ],\n \"id\": \"<string>\",\n \"enabled\": true,\n \"config\": \"<string>\",\n \"sparse\": true,\n \"allEnvironments\": true,\n \"environments\": [\n \"<string>\"\n ],\n \"allProjects\": true,\n \"projects\": [\n \"<string>\"\n ]\n }\n ],\n \"environments\": {},\n \"prerequisites\": [\n \"<string>\"\n ],\n \"jsonSchema\": \"<string>\",\n \"customFields\": {},\n \"holdout\": {\n \"id\": \"<string>\",\n \"value\": \"<string>\"\n },\n \"ignoreWarnings\": true,\n \"skipSchemaValidation\": true,\n \"skipHooks\": true\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>",
"valueType": "boolean",
"defaultValue": "<string>",
"tags": [
"<string>"
],
"rules": [
{
"description": "<string>",
"id": "<string>",
"enabled": true,
"type": "force",
"value": "<string>",
"allEnvironments": true,
"condition": "<string>",
"scheduleRules": [
{
"enabled": true,
"timestamp": "2023-11-07T05:31:56Z"
}
],
"scheduleType": "none",
"rampScheduleId": "<string>",
"savedGroupTargeting": [
{
"matchType": "all",
"savedGroups": [
"<string>"
]
}
],
"prerequisites": [
{
"id": "<string>",
"condition": "<string>"
}
],
"allProjects": true,
"projects": [
"<string>"
],
"sparse": true,
"config": "<string>",
"environments": [
"<string>"
],
"pendingRamp": "create"
}
],
"environments": {},
"revision": {
"version": 123,
"comment": "<string>",
"date": "2023-11-07T05:31:56Z",
"id": "<string>",
"createdBy": {
"type": "dashboard",
"id": "<string>",
"name": "<string>",
"email": "<string>"
},
"publishedBy": {
"type": "dashboard",
"id": "<string>",
"name": "<string>",
"email": "<string>"
}
},
"targetingAllProjects": true,
"targetingProjects": [
"<string>"
],
"baseConfig": "<string>",
"defaultValueConfig": "<string>",
"prerequisites": [
"<string>"
],
"customFields": {},
"holdout": {
"id": "<string>",
"value": "<string>"
}
},
"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 id of the requested resource
Query Parameters
Deprecated — pass skipSchemaValidation in the request body instead.
"true"Deprecated — pass ignoreWarnings in the request body instead.
"true"Body
Description of the feature
10000An associated project ID
Make this feature discoverable in — and served to — every project, beyond its primary project. Governance/approvals stay with project.
Secondary project IDs this feature is targeted in and served to, beyond its primary project. Governance/approvals stay with project.
The 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.
The config backing this flag, fixed at creation. Cannot be changed by an update — resend the current value or omit it; a different value is rejected.
Optional. A config within baseConfig's family that the default value resolves to instead of baseConfig itself. null or omitted means the default is baseConfig. The default is exactly this config and carries no overrides of its own.
List of associated tags. Will override tags completely with submitted list
Replaces all feature rules atomically. Behavior differs from v1: v1 PUT applies per-environment patches, v2 PUT swaps the entire rules array in one revision. To preserve existing rules during a partial edit, GET the feature first, mutate the returned rules array, and PUT the full array back. Safe-rollout rules round-trip via their safeRolloutId (creation requires POST /v2/features/:id/revisions/:version/rules).
- Option 1
- Option 2
- Option 3
- Option 4
Show child attributes
Show child attributes
Per-environment enabled state. V2 rules are specified on the top-level rules field.
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
Holdout to assign this feature to. Pass null to remove the feature from its current holdout. Omit the field entirely to leave the holdout unchanged.
Show child attributes
Show child attributes
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/v2/features/{id}' \
-H 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.growthbook.io/api/v2/features/{id}"
payload = {
"description": "<string>",
"archived": True,
"project": "<string>",
"targetingAllProjects": True,
"targetingProjects": ["<string>"],
"owner": "<string>",
"defaultValue": "<string>",
"baseConfig": "<string>",
"defaultValueConfig": "<string>",
"tags": ["<string>"],
"rules": [
{
"type": "force",
"value": "<string>",
"description": "<string>",
"condition": "<string>",
"savedGroups": [{ "ids": ["<string>"] }],
"savedGroupTargeting": [{ "savedGroups": ["<string>"] }],
"prerequisites": [
{
"id": "<string>",
"condition": "<string>"
}
],
"scheduleRules": [
{
"timestamp": "2023-11-07T05:31:56Z",
"enabled": True
}
],
"id": "<string>",
"enabled": True,
"config": "<string>",
"sparse": True,
"allEnvironments": True,
"environments": ["<string>"],
"allProjects": True,
"projects": ["<string>"]
}
],
"environments": {},
"prerequisites": ["<string>"],
"jsonSchema": "<string>",
"customFields": {},
"holdout": {
"id": "<string>",
"value": "<string>"
},
"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({
description: '<string>',
archived: true,
project: '<string>',
targetingAllProjects: true,
targetingProjects: ['<string>'],
owner: '<string>',
defaultValue: '<string>',
baseConfig: '<string>',
defaultValueConfig: '<string>',
tags: ['<string>'],
rules: [
{
type: 'force',
value: '<string>',
description: '<string>',
condition: '<string>',
savedGroups: [{ids: ['<string>']}],
savedGroupTargeting: [{savedGroups: ['<string>']}],
prerequisites: [{id: '<string>', condition: '<string>'}],
scheduleRules: [{timestamp: '2023-11-07T05:31:56Z', enabled: true}],
id: '<string>',
enabled: true,
config: '<string>',
sparse: true,
allEnvironments: true,
environments: ['<string>'],
allProjects: true,
projects: ['<string>']
}
],
environments: {},
prerequisites: ['<string>'],
jsonSchema: '<string>',
customFields: {},
holdout: {id: '<string>', value: '<string>'},
ignoreWarnings: true,
skipSchemaValidation: true,
skipHooks: true
})
};
fetch('https://api.growthbook.io/api/v2/features/{id}', 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/v2/features/{id}",
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([
'description' => '<string>',
'archived' => true,
'project' => '<string>',
'targetingAllProjects' => true,
'targetingProjects' => [
'<string>'
],
'owner' => '<string>',
'defaultValue' => '<string>',
'baseConfig' => '<string>',
'defaultValueConfig' => '<string>',
'tags' => [
'<string>'
],
'rules' => [
[
'type' => 'force',
'value' => '<string>',
'description' => '<string>',
'condition' => '<string>',
'savedGroups' => [
[
'ids' => [
'<string>'
]
]
],
'savedGroupTargeting' => [
[
'savedGroups' => [
'<string>'
]
]
],
'prerequisites' => [
[
'id' => '<string>',
'condition' => '<string>'
]
],
'scheduleRules' => [
[
'timestamp' => '2023-11-07T05:31:56Z',
'enabled' => true
]
],
'id' => '<string>',
'enabled' => true,
'config' => '<string>',
'sparse' => true,
'allEnvironments' => true,
'environments' => [
'<string>'
],
'allProjects' => true,
'projects' => [
'<string>'
]
]
],
'environments' => [
],
'prerequisites' => [
'<string>'
],
'jsonSchema' => '<string>',
'customFields' => [
],
'holdout' => [
'id' => '<string>',
'value' => '<string>'
],
'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/v2/features/{id}"
payload := strings.NewReader("{\n \"description\": \"<string>\",\n \"archived\": true,\n \"project\": \"<string>\",\n \"targetingAllProjects\": true,\n \"targetingProjects\": [\n \"<string>\"\n ],\n \"owner\": \"<string>\",\n \"defaultValue\": \"<string>\",\n \"baseConfig\": \"<string>\",\n \"defaultValueConfig\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"rules\": [\n {\n \"type\": \"force\",\n \"value\": \"<string>\",\n \"description\": \"<string>\",\n \"condition\": \"<string>\",\n \"savedGroups\": [\n {\n \"ids\": [\n \"<string>\"\n ]\n }\n ],\n \"savedGroupTargeting\": [\n {\n \"savedGroups\": [\n \"<string>\"\n ]\n }\n ],\n \"prerequisites\": [\n {\n \"id\": \"<string>\",\n \"condition\": \"<string>\"\n }\n ],\n \"scheduleRules\": [\n {\n \"timestamp\": \"2023-11-07T05:31:56Z\",\n \"enabled\": true\n }\n ],\n \"id\": \"<string>\",\n \"enabled\": true,\n \"config\": \"<string>\",\n \"sparse\": true,\n \"allEnvironments\": true,\n \"environments\": [\n \"<string>\"\n ],\n \"allProjects\": true,\n \"projects\": [\n \"<string>\"\n ]\n }\n ],\n \"environments\": {},\n \"prerequisites\": [\n \"<string>\"\n ],\n \"jsonSchema\": \"<string>\",\n \"customFields\": {},\n \"holdout\": {\n \"id\": \"<string>\",\n \"value\": \"<string>\"\n },\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/v2/features/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"<string>\",\n \"archived\": true,\n \"project\": \"<string>\",\n \"targetingAllProjects\": true,\n \"targetingProjects\": [\n \"<string>\"\n ],\n \"owner\": \"<string>\",\n \"defaultValue\": \"<string>\",\n \"baseConfig\": \"<string>\",\n \"defaultValueConfig\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"rules\": [\n {\n \"type\": \"force\",\n \"value\": \"<string>\",\n \"description\": \"<string>\",\n \"condition\": \"<string>\",\n \"savedGroups\": [\n {\n \"ids\": [\n \"<string>\"\n ]\n }\n ],\n \"savedGroupTargeting\": [\n {\n \"savedGroups\": [\n \"<string>\"\n ]\n }\n ],\n \"prerequisites\": [\n {\n \"id\": \"<string>\",\n \"condition\": \"<string>\"\n }\n ],\n \"scheduleRules\": [\n {\n \"timestamp\": \"2023-11-07T05:31:56Z\",\n \"enabled\": true\n }\n ],\n \"id\": \"<string>\",\n \"enabled\": true,\n \"config\": \"<string>\",\n \"sparse\": true,\n \"allEnvironments\": true,\n \"environments\": [\n \"<string>\"\n ],\n \"allProjects\": true,\n \"projects\": [\n \"<string>\"\n ]\n }\n ],\n \"environments\": {},\n \"prerequisites\": [\n \"<string>\"\n ],\n \"jsonSchema\": \"<string>\",\n \"customFields\": {},\n \"holdout\": {\n \"id\": \"<string>\",\n \"value\": \"<string>\"\n },\n \"ignoreWarnings\": true,\n \"skipSchemaValidation\": true,\n \"skipHooks\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v2/features/{id}")
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 \"description\": \"<string>\",\n \"archived\": true,\n \"project\": \"<string>\",\n \"targetingAllProjects\": true,\n \"targetingProjects\": [\n \"<string>\"\n ],\n \"owner\": \"<string>\",\n \"defaultValue\": \"<string>\",\n \"baseConfig\": \"<string>\",\n \"defaultValueConfig\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"rules\": [\n {\n \"type\": \"force\",\n \"value\": \"<string>\",\n \"description\": \"<string>\",\n \"condition\": \"<string>\",\n \"savedGroups\": [\n {\n \"ids\": [\n \"<string>\"\n ]\n }\n ],\n \"savedGroupTargeting\": [\n {\n \"savedGroups\": [\n \"<string>\"\n ]\n }\n ],\n \"prerequisites\": [\n {\n \"id\": \"<string>\",\n \"condition\": \"<string>\"\n }\n ],\n \"scheduleRules\": [\n {\n \"timestamp\": \"2023-11-07T05:31:56Z\",\n \"enabled\": true\n }\n ],\n \"id\": \"<string>\",\n \"enabled\": true,\n \"config\": \"<string>\",\n \"sparse\": true,\n \"allEnvironments\": true,\n \"environments\": [\n \"<string>\"\n ],\n \"allProjects\": true,\n \"projects\": [\n \"<string>\"\n ]\n }\n ],\n \"environments\": {},\n \"prerequisites\": [\n \"<string>\"\n ],\n \"jsonSchema\": \"<string>\",\n \"customFields\": {},\n \"holdout\": {\n \"id\": \"<string>\",\n \"value\": \"<string>\"\n },\n \"ignoreWarnings\": true,\n \"skipSchemaValidation\": true,\n \"skipHooks\": true\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>",
"valueType": "boolean",
"defaultValue": "<string>",
"tags": [
"<string>"
],
"rules": [
{
"description": "<string>",
"id": "<string>",
"enabled": true,
"type": "force",
"value": "<string>",
"allEnvironments": true,
"condition": "<string>",
"scheduleRules": [
{
"enabled": true,
"timestamp": "2023-11-07T05:31:56Z"
}
],
"scheduleType": "none",
"rampScheduleId": "<string>",
"savedGroupTargeting": [
{
"matchType": "all",
"savedGroups": [
"<string>"
]
}
],
"prerequisites": [
{
"id": "<string>",
"condition": "<string>"
}
],
"allProjects": true,
"projects": [
"<string>"
],
"sparse": true,
"config": "<string>",
"environments": [
"<string>"
],
"pendingRamp": "create"
}
],
"environments": {},
"revision": {
"version": 123,
"comment": "<string>",
"date": "2023-11-07T05:31:56Z",
"id": "<string>",
"createdBy": {
"type": "dashboard",
"id": "<string>",
"name": "<string>",
"email": "<string>"
},
"publishedBy": {
"type": "dashboard",
"id": "<string>",
"name": "<string>",
"email": "<string>"
}
},
"targetingAllProjects": true,
"targetingProjects": [
"<string>"
],
"baseConfig": "<string>",
"defaultValueConfig": "<string>",
"prerequisites": [
"<string>"
],
"customFields": {},
"holdout": {
"id": "<string>",
"value": "<string>"
}
},
"bypassedGates": [
{
"type": "<string>",
"outcome": "bypassed",
"via": "ignoreWarnings"
}
]
}
