Create a single feature
Creates a new Feature Flag. The caller needs Create access in its Project, plus Publish access for any environment the Feature Flag starts enabled in — one that starts disabled everywhere needs Create alone. Rules are supplied as a top-level rules array; each rule includes allEnvironments / environments scope fields.
Naming for human review
The id is the Feature Flag’s permanent name in the UI and code. Keep it short (checkout-express-pay) and put context in description. To create it disabled, list every environment in environments with enabled: false.
Config-backed features (Config mode)
A JSON feature can be backed by a shared config — the config supplies the base JSON value and schema, and the feature’s rule values become override patches merged on top (nested objects deep-merge; arrays and scalars replace). The default value is exactly a config with no overrides (see below). Config backing is set exclusively through dedicated fields — never a raw $extends: ["@config:…"] inside a value string (that is rejected). @const: references inside values still work.
- Top-level (
baseConfig): setvalueType: "json"andbaseConfig: "<configKey>"to put the Feature Flag in Config mode. The config must be live. This is the family root and the base the default value patches. - Default value: unlike rules, the default is exactly a config with no overrides of its own — send
defaultValue: "{}"to usebaseConfig. To resolve the default to a descendant ofbaseConfiginstead, setdefaultValueConfigto that descendant’s key (it must be withinbaseConfig’s family); omit/null to usebaseConfigdirectly. - Rules & experiment variations: each carries its own
configfield naming the family config that value patches (omit/null to patch the base).valueis the override patch.
Example:
{
"id": "checkout-config",
"valueType": "json",
"baseConfig": "purchase-flow",
"defaultValue": "{}",
"rules": [
{ "type": "force", "config": "purchase-flow-vip", "value": "{\"maxItems\": 20}", "allEnvironments": true }
]
}
curl -X POST 'https://api.growthbook.io/api/v2/features' \
-H 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.growthbook.io/api/v2/features"
payload = {
"id": "<string>",
"defaultValue": "<string>",
"archived": True,
"description": "<string>",
"owner": "<string>",
"project": "<string>",
"targetingAllProjects": True,
"targetingProjects": ["<string>"],
"baseConfig": "<string>",
"defaultValueConfig": "<string>",
"tags": ["<string>"],
"rules": [
{
"type": "force",
"value": "<string>",
"description": "<string>",
"condition": "<string>",
"savedGroups": [{ "ids": ["<string>"] }],
"savedGroupTargeting": [{ "savedGroups": ["<string>"] }],
"pendingRamp": "<unknown>",
"rampScheduleId": "<unknown>",
"scheduleType": "<unknown>",
"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": {},
"comment": "<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({
id: '<string>',
defaultValue: '<string>',
archived: true,
description: '<string>',
owner: '<string>',
project: '<string>',
targetingAllProjects: true,
targetingProjects: ['<string>'],
baseConfig: '<string>',
defaultValueConfig: '<string>',
tags: ['<string>'],
rules: [
{
type: 'force',
value: '<string>',
description: '<string>',
condition: '<string>',
savedGroups: [{ids: ['<string>']}],
savedGroupTargeting: [{savedGroups: ['<string>']}],
pendingRamp: '<unknown>',
rampScheduleId: '<unknown>',
scheduleType: '<unknown>',
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: {},
comment: '<string>',
ignoreWarnings: true,
skipSchemaValidation: true,
skipHooks: true
})
};
fetch('https://api.growthbook.io/api/v2/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/v2/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>',
'targetingAllProjects' => true,
'targetingProjects' => [
'<string>'
],
'baseConfig' => '<string>',
'defaultValueConfig' => '<string>',
'tags' => [
'<string>'
],
'rules' => [
[
'type' => 'force',
'value' => '<string>',
'description' => '<string>',
'condition' => '<string>',
'savedGroups' => [
[
'ids' => [
'<string>'
]
]
],
'savedGroupTargeting' => [
[
'savedGroups' => [
'<string>'
]
]
],
'pendingRamp' => '<unknown>',
'rampScheduleId' => '<unknown>',
'scheduleType' => '<unknown>',
'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' => [
],
'comment' => '<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"
payload := strings.NewReader("{\n \"id\": \"<string>\",\n \"defaultValue\": \"<string>\",\n \"archived\": true,\n \"description\": \"<string>\",\n \"owner\": \"<string>\",\n \"project\": \"<string>\",\n \"targetingAllProjects\": true,\n \"targetingProjects\": [\n \"<string>\"\n ],\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 \"pendingRamp\": \"<unknown>\",\n \"rampScheduleId\": \"<unknown>\",\n \"scheduleType\": \"<unknown>\",\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 \"comment\": \"<string>\",\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")
.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 \"targetingAllProjects\": true,\n \"targetingProjects\": [\n \"<string>\"\n ],\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 \"pendingRamp\": \"<unknown>\",\n \"rampScheduleId\": \"<unknown>\",\n \"scheduleType\": \"<unknown>\",\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 \"comment\": \"<string>\",\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")
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 \"targetingAllProjects\": true,\n \"targetingProjects\": [\n \"<string>\"\n ],\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 \"pendingRamp\": \"<unknown>\",\n \"rampScheduleId\": \"<unknown>\",\n \"scheduleType\": \"<unknown>\",\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 \"comment\": \"<string>\",\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>",
"apiKey": "<string>",
"name": "<string>",
"email": "<string>",
"requestedBy": {
"id": "<string>",
"name": "<string>",
"email": "<string>"
},
"assumedRole": true
},
"publishedBy": {
"type": "dashboard",
"id": "<string>",
"apiKey": "<string>",
"name": "<string>",
"email": "<string>",
"requestedBy": {
"id": "<string>",
"name": "<string>",
"email": "<string>"
},
"assumedRole": true
}
},
"targetingAllProjects": true,
"targetingProjects": [
"<string>"
],
"baseConfig": "<string>",
"defaultValueConfig": "<string>",
"prerequisites": [
"<string>"
],
"customFields": {},
"holdout": {
"id": "<string>",
"value": "<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
If using Bearer auth, pass the Secret Key as the token:
curl https://api.growthbook.io/api/v1/features -H "Authorization: Bearer secret_abc123DEF456"
Query Parameters
Deprecated — pass skipSchemaValidation in the request body instead.
"true"Deprecated — pass ignoreWarnings in the request body instead.
"true"Body
Unique, permanent key, shown as the Feature Flag's name in the UI and used in code. Keep it short. If featureRegexValidator in GET /api/v1/settings is set, follow it (featureKeyExample shows the format); otherwise use kebab-case (e.g. checkout-express-pay). Put context in description.
1^[a-zA-Z0-9_.:\|\-]+$The data type of the feature payload. Boolean by default.
boolean, string, number, json Default value when feature is enabled. Type must match valueType. In Config mode (baseConfig set) the default must be exactly a config with no overrides: send "{}" to use baseConfig, or set defaultValueConfig to point at a descendant.
Markdown. What the Feature Flag gates and why, rollout plan, and links. Put context here, not in the key.
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 requesting member: a personal access token's owner, or the member an organization API key assumes. An organization API key acting as itself must send it, or the request fails with a 400.
An associated project ID
Make this feature discoverable in — and served to — every project, beyond its primary project. Requires the targetFeatures permission (FlagsTarget policy) unscoped to any project. Governance stays with project.
Secondary project IDs this feature is targeted in and served to, beyond its primary project. Adding a project requires the targetFeatures permission (FlagsTarget policy) in that project. Governance stays with project.
Key of the config backing this flag ("Config mode"). Requires valueType: "json" and a live config. The config supplies the base JSON and schema; defaultValue and rule values are override patches on top. null or omitted for a plain flag.
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.
Tags for filtering and grouping. Use these instead of encoding groups in names.
Feature rules. Each rule carries its own environment scope via allEnvironments / environments.
- Option 1
- Option 2
- Option 3
- Option 4
Show child attributes
Show child attributes
Per-environment enabled state, keyed by environment ID. An environment you leave out uses its "Default state for new features" setting, which may be enabled. To create the Feature Flag disabled, list every environment with enabled: false. Rules go 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
Comment to record on the feature's initial revision. Defaults to an empty comment.
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. Only set this when a person has explicitly asked you to. If a check blocks you, stop and ask a person instead of working around it.
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. Only set this when a person has explicitly asked you to. If a check blocks you, stop and ask a person instead of working around it.
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. Only set this when a person has explicitly asked you to. If a check blocks you, stop and ask a person instead of working around it.
Response
Resource created
Show child attributes
Show child attributes
Was this page helpful?
curl -X POST 'https://api.growthbook.io/api/v2/features' \
-H 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.growthbook.io/api/v2/features"
payload = {
"id": "<string>",
"defaultValue": "<string>",
"archived": True,
"description": "<string>",
"owner": "<string>",
"project": "<string>",
"targetingAllProjects": True,
"targetingProjects": ["<string>"],
"baseConfig": "<string>",
"defaultValueConfig": "<string>",
"tags": ["<string>"],
"rules": [
{
"type": "force",
"value": "<string>",
"description": "<string>",
"condition": "<string>",
"savedGroups": [{ "ids": ["<string>"] }],
"savedGroupTargeting": [{ "savedGroups": ["<string>"] }],
"pendingRamp": "<unknown>",
"rampScheduleId": "<unknown>",
"scheduleType": "<unknown>",
"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": {},
"comment": "<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({
id: '<string>',
defaultValue: '<string>',
archived: true,
description: '<string>',
owner: '<string>',
project: '<string>',
targetingAllProjects: true,
targetingProjects: ['<string>'],
baseConfig: '<string>',
defaultValueConfig: '<string>',
tags: ['<string>'],
rules: [
{
type: 'force',
value: '<string>',
description: '<string>',
condition: '<string>',
savedGroups: [{ids: ['<string>']}],
savedGroupTargeting: [{savedGroups: ['<string>']}],
pendingRamp: '<unknown>',
rampScheduleId: '<unknown>',
scheduleType: '<unknown>',
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: {},
comment: '<string>',
ignoreWarnings: true,
skipSchemaValidation: true,
skipHooks: true
})
};
fetch('https://api.growthbook.io/api/v2/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/v2/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>',
'targetingAllProjects' => true,
'targetingProjects' => [
'<string>'
],
'baseConfig' => '<string>',
'defaultValueConfig' => '<string>',
'tags' => [
'<string>'
],
'rules' => [
[
'type' => 'force',
'value' => '<string>',
'description' => '<string>',
'condition' => '<string>',
'savedGroups' => [
[
'ids' => [
'<string>'
]
]
],
'savedGroupTargeting' => [
[
'savedGroups' => [
'<string>'
]
]
],
'pendingRamp' => '<unknown>',
'rampScheduleId' => '<unknown>',
'scheduleType' => '<unknown>',
'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' => [
],
'comment' => '<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"
payload := strings.NewReader("{\n \"id\": \"<string>\",\n \"defaultValue\": \"<string>\",\n \"archived\": true,\n \"description\": \"<string>\",\n \"owner\": \"<string>\",\n \"project\": \"<string>\",\n \"targetingAllProjects\": true,\n \"targetingProjects\": [\n \"<string>\"\n ],\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 \"pendingRamp\": \"<unknown>\",\n \"rampScheduleId\": \"<unknown>\",\n \"scheduleType\": \"<unknown>\",\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 \"comment\": \"<string>\",\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")
.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 \"targetingAllProjects\": true,\n \"targetingProjects\": [\n \"<string>\"\n ],\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 \"pendingRamp\": \"<unknown>\",\n \"rampScheduleId\": \"<unknown>\",\n \"scheduleType\": \"<unknown>\",\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 \"comment\": \"<string>\",\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")
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 \"targetingAllProjects\": true,\n \"targetingProjects\": [\n \"<string>\"\n ],\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 \"pendingRamp\": \"<unknown>\",\n \"rampScheduleId\": \"<unknown>\",\n \"scheduleType\": \"<unknown>\",\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 \"comment\": \"<string>\",\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>",
"apiKey": "<string>",
"name": "<string>",
"email": "<string>",
"requestedBy": {
"id": "<string>",
"name": "<string>",
"email": "<string>"
},
"assumedRole": true
},
"publishedBy": {
"type": "dashboard",
"id": "<string>",
"apiKey": "<string>",
"name": "<string>",
"email": "<string>",
"requestedBy": {
"id": "<string>",
"name": "<string>",
"email": "<string>"
},
"assumedRole": true
}
},
"targetingAllProjects": true,
"targetingProjects": [
"<string>"
],
"baseConfig": "<string>",
"defaultValueConfig": "<string>",
"prerequisites": [
"<string>"
],
"customFields": {},
"holdout": {
"id": "<string>",
"value": "<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>"
}
