Partially update a single saved group
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/saved-groups/abc123' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"values":["userId-123","userId-345"]}'import requests
url = "https://api.growthbook.io/api/v1/saved-groups/{id}"
payload = {
"name": "<string>",
"condition": "<string>",
"values": ["<string>"],
"owner": "<string>",
"projects": ["<string>"],
"bypassApproval": 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>',
condition: '<string>',
values: ['<string>'],
owner: '<string>',
projects: ['<string>'],
bypassApproval: true
})
};
fetch('https://api.growthbook.io/api/v1/saved-groups/{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/v1/saved-groups/{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([
'name' => '<string>',
'condition' => '<string>',
'values' => [
'<string>'
],
'owner' => '<string>',
'projects' => [
'<string>'
],
'bypassApproval' => 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/saved-groups/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"condition\": \"<string>\",\n \"values\": [\n \"<string>\"\n ],\n \"owner\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"bypassApproval\": 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/saved-groups/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"condition\": \"<string>\",\n \"values\": [\n \"<string>\"\n ],\n \"owner\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"bypassApproval\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/saved-groups/{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 \"name\": \"<string>\",\n \"condition\": \"<string>\",\n \"values\": [\n \"<string>\"\n ],\n \"owner\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"bypassApproval\": true\n}"
response = http.request(request)
puts response.read_body{
"savedGroup": {
"id": "<string>",
"type": "condition",
"dateCreated": "2023-11-07T05:31:56Z",
"dateUpdated": "2023-11-07T05:31:56Z",
"name": "<string>",
"owner": "<string>",
"ownerEmail": "<string>",
"condition": "<string>",
"attributeKey": "<string>",
"values": [
"<string>"
],
"description": "<string>",
"projects": [
"<string>"
],
"archived": true,
"useEmptyListGroup": 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 id of the requested resource
Body
The display name of the Saved Group
When type = 'condition', this is the JSON-encoded condition for the group
When type = 'list', this is the list of values for the attribute key
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.
Set to true to update the live Saved Group without approval. The caller must have Bypass draft approvals access in every current and destination Project. This field has no effect when approval is not required.
Was this page helpful?
curl -X POST 'https://api.growthbook.io/api/v1/saved-groups/abc123' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"values":["userId-123","userId-345"]}'import requests
url = "https://api.growthbook.io/api/v1/saved-groups/{id}"
payload = {
"name": "<string>",
"condition": "<string>",
"values": ["<string>"],
"owner": "<string>",
"projects": ["<string>"],
"bypassApproval": 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>',
condition: '<string>',
values: ['<string>'],
owner: '<string>',
projects: ['<string>'],
bypassApproval: true
})
};
fetch('https://api.growthbook.io/api/v1/saved-groups/{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/v1/saved-groups/{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([
'name' => '<string>',
'condition' => '<string>',
'values' => [
'<string>'
],
'owner' => '<string>',
'projects' => [
'<string>'
],
'bypassApproval' => 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/saved-groups/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"condition\": \"<string>\",\n \"values\": [\n \"<string>\"\n ],\n \"owner\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"bypassApproval\": 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/saved-groups/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"condition\": \"<string>\",\n \"values\": [\n \"<string>\"\n ],\n \"owner\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"bypassApproval\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/saved-groups/{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 \"name\": \"<string>\",\n \"condition\": \"<string>\",\n \"values\": [\n \"<string>\"\n ],\n \"owner\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"bypassApproval\": true\n}"
response = http.request(request)
puts response.read_body{
"savedGroup": {
"id": "<string>",
"type": "condition",
"dateCreated": "2023-11-07T05:31:56Z",
"dateUpdated": "2023-11-07T05:31:56Z",
"name": "<string>",
"owner": "<string>",
"ownerEmail": "<string>",
"condition": "<string>",
"attributeKey": "<string>",
"values": [
"<string>"
],
"description": "<string>",
"projects": [
"<string>"
],
"archived": true,
"useEmptyListGroup": true
},
"bypassedGates": [
{
"type": "<string>",
"outcome": "bypassed",
"via": "ignoreWarnings"
}
]
}
