Update an attribute
curl -X PUT 'https://api.growthbook.io/api/v1/attributes/abc123' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"description":"My updated attribute"}'import requests
url = "https://api.growthbook.io/api/v1/attributes/{property}"
payload = {
"description": "<string>",
"archived": True,
"hashAttribute": True,
"enum": "<string>",
"projects": ["<string>"],
"tags": ["<string>"],
"customFields": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
description: '<string>',
archived: true,
hashAttribute: true,
enum: '<string>',
projects: ['<string>'],
tags: ['<string>'],
customFields: {}
})
};
fetch('https://api.growthbook.io/api/v1/attributes/{property}', 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/attributes/{property}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'description' => '<string>',
'archived' => true,
'hashAttribute' => true,
'enum' => '<string>',
'projects' => [
'<string>'
],
'tags' => [
'<string>'
],
'customFields' => [
]
]),
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/attributes/{property}"
payload := strings.NewReader("{\n \"description\": \"<string>\",\n \"archived\": true,\n \"hashAttribute\": true,\n \"enum\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"customFields\": {}\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.growthbook.io/api/v1/attributes/{property}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"<string>\",\n \"archived\": true,\n \"hashAttribute\": true,\n \"enum\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"customFields\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/attributes/{property}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"description\": \"<string>\",\n \"archived\": true,\n \"hashAttribute\": true,\n \"enum\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"customFields\": {}\n}"
response = http.request(request)
puts response.read_body{
"attribute": {
"property": "<string>",
"datatype": "boolean",
"description": "<string>",
"hashAttribute": true,
"archived": true,
"enum": "<string>",
"format": "",
"projects": [
"<string>"
],
"tags": [
"<string>"
],
"customFields": {}
}
}{
"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"
Path Parameters
The attribute property
Body
The attribute datatype
boolean, string, number, secureString, enum, string[], number[], secureString[] Markdown. Put context here, not in the name.
The attribute is archived
Shall the attribute be hashed
Comma-separated list of allowed values. Required for the 'enum' datatype. For array datatypes (string[], number[], secureString[]) it optionally restricts the list to these values. Ignored for all other datatypes.
The attribute's format
, version, date, isoCountryCode Project IDs that can use this. An empty list means all Projects. Projects control access and availability, so don't use them as labels.
Tags for filtering and grouping. Use these instead of encoding groups in names.
Values for the organization's attribute custom fields, keyed by field id
Show child attributes
Show child attributes
Response
Resource updated
Show child attributes
Show child attributes
Was this page helpful?
curl -X PUT 'https://api.growthbook.io/api/v1/attributes/abc123' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"description":"My updated attribute"}'import requests
url = "https://api.growthbook.io/api/v1/attributes/{property}"
payload = {
"description": "<string>",
"archived": True,
"hashAttribute": True,
"enum": "<string>",
"projects": ["<string>"],
"tags": ["<string>"],
"customFields": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
description: '<string>',
archived: true,
hashAttribute: true,
enum: '<string>',
projects: ['<string>'],
tags: ['<string>'],
customFields: {}
})
};
fetch('https://api.growthbook.io/api/v1/attributes/{property}', 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/attributes/{property}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'description' => '<string>',
'archived' => true,
'hashAttribute' => true,
'enum' => '<string>',
'projects' => [
'<string>'
],
'tags' => [
'<string>'
],
'customFields' => [
]
]),
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/attributes/{property}"
payload := strings.NewReader("{\n \"description\": \"<string>\",\n \"archived\": true,\n \"hashAttribute\": true,\n \"enum\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"customFields\": {}\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.growthbook.io/api/v1/attributes/{property}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"<string>\",\n \"archived\": true,\n \"hashAttribute\": true,\n \"enum\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"customFields\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/attributes/{property}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"description\": \"<string>\",\n \"archived\": true,\n \"hashAttribute\": true,\n \"enum\": \"<string>\",\n \"projects\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"customFields\": {}\n}"
response = http.request(request)
puts response.read_body{
"attribute": {
"property": "<string>",
"datatype": "boolean",
"description": "<string>",
"hashAttribute": true,
"archived": true,
"enum": "<string>",
"format": "",
"projects": [
"<string>"
],
"tags": [
"<string>"
],
"customFields": {}
}
}{
"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>"
}
