Get all experiments
curl -X GET 'https://api.growthbook.io/api/v1/experiments' \
-H 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.growthbook.io/api/v1/experiments"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.growthbook.io/api/v1/experiments', 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/experiments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.growthbook.io/api/v1/experiments"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.growthbook.io/api/v1/experiments")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/experiments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"experiments": [
{
"id": "<string>",
"trackingKey": "<string>",
"dateCreated": "2023-11-07T05:31:56Z",
"dateUpdated": "2023-11-07T05:31:56Z",
"name": "<string>",
"type": "standard",
"project": "<string>",
"hypothesis": "<string>",
"description": "<string>",
"tags": [
"<string>"
],
"owner": "<string>",
"archived": true,
"status": "<string>",
"autoRefresh": true,
"hashAttribute": "<string>",
"hashVersion": 1,
"variations": [
{
"variationId": "<string>",
"key": "<string>",
"name": "<string>",
"description": "<string>",
"screenshots": [
"<string>"
]
}
],
"phases": [
{
"name": "<string>",
"dateStarted": "<string>",
"dateEnded": "<string>",
"reasonForStopping": "<string>",
"seed": "<string>",
"coverage": 123,
"trafficSplit": [
{
"variationId": "<string>",
"weight": 123
}
],
"targetingCondition": "<string>",
"namespace": {
"namespaceId": "<string>",
"enabled": true,
"range": [
123
],
"ranges": [
[
123,
123
]
]
},
"prerequisites": [
{
"id": "<string>",
"condition": "<string>"
}
],
"savedGroupTargeting": [
{
"matchType": "all",
"savedGroups": [
"<string>"
]
}
]
}
],
"settings": {
"datasourceId": "<string>",
"assignmentQueryId": "<string>",
"experimentId": "<string>",
"segmentId": "<string>",
"queryFilter": "<string>",
"inProgressConversions": "include",
"attributionModel": "firstExposure",
"statsEngine": "bayesian",
"goals": [
{
"metricId": "<string>",
"overrides": {
"delayHours": 123,
"windowHours": 123,
"window": "conversion",
"winRiskThreshold": 123,
"loseRiskThreshold": 123,
"properPriorOverride": true,
"properPriorEnabled": true,
"properPriorMean": 123,
"properPriorStdDev": 123,
"regressionAdjustmentOverride": true,
"regressionAdjustmentEnabled": true,
"regressionAdjustmentDays": 123
}
}
],
"secondaryMetrics": [
{
"metricId": "<string>",
"overrides": {
"delayHours": 123,
"windowHours": 123,
"window": "conversion",
"winRiskThreshold": 123,
"loseRiskThreshold": 123,
"properPriorOverride": true,
"properPriorEnabled": true,
"properPriorMean": 123,
"properPriorStdDev": 123,
"regressionAdjustmentOverride": true,
"regressionAdjustmentEnabled": true,
"regressionAdjustmentDays": 123
}
}
],
"guardrails": [
{
"metricId": "<string>",
"overrides": {
"delayHours": 123,
"windowHours": 123,
"window": "conversion",
"winRiskThreshold": 123,
"loseRiskThreshold": 123,
"properPriorOverride": true,
"properPriorEnabled": true,
"properPriorMean": 123,
"properPriorStdDev": 123,
"regressionAdjustmentOverride": true,
"regressionAdjustmentEnabled": true,
"regressionAdjustmentDays": 123
}
}
],
"lookbackOverride": {
"type": "date",
"value": 123,
"valueUnit": "minutes"
},
"regressionAdjustmentEnabled": true,
"sequentialTestingEnabled": true,
"sequentialTestingTuningParameter": 123,
"postStratificationEnabled": true,
"decisionFrameworkSettings": {
"decisionCriteriaId": "<string>",
"decisionFrameworkMetricOverrides": [
{
"id": "<string>",
"targetMDE": 123
}
]
},
"metricOverrides": [
{
"id": "<string>",
"windowType": "conversion",
"windowHours": 123,
"delayHours": 123,
"properPriorOverride": true,
"properPriorEnabled": true,
"properPriorMean": 123,
"properPriorStdDev": 123,
"regressionAdjustmentOverride": true,
"regressionAdjustmentEnabled": true,
"regressionAdjustmentDays": 123
}
],
"activationMetric": {
"metricId": "<string>",
"overrides": {
"delayHours": 123,
"windowHours": 123,
"window": "conversion",
"winRiskThreshold": 123,
"loseRiskThreshold": 123,
"properPriorOverride": true,
"properPriorEnabled": true,
"properPriorMean": 123,
"properPriorStdDev": 123,
"regressionAdjustmentOverride": true,
"regressionAdjustmentEnabled": true,
"regressionAdjustmentDays": 123
}
}
},
"ownerEmail": "<string>",
"fallbackAttribute": "<string>",
"disableStickyBucketing": true,
"bucketVersion": 123,
"minBucketVersion": 123,
"resultSummary": {
"status": "<string>",
"winner": "<string>",
"conclusions": "<string>",
"releasedVariationId": "<string>",
"excludeFromPayload": true
},
"shareLevel": "public",
"publicUrl": "<string>",
"banditScheduleValue": 123,
"banditScheduleUnit": "days",
"banditBurnInValue": 123,
"banditBurnInUnit": "days",
"banditConversionWindowValue": 123,
"banditConversionWindowUnit": "days",
"linkedFeatures": [
"<string>"
],
"attributeScopeAllProjects": true,
"hasVisualChangesets": true,
"hasURLRedirects": true,
"customFields": {},
"customMetricSlices": [
{
"slices": [
{
"column": "<string>",
"levels": [
"<string>"
]
}
]
}
],
"precomputedUnitDimensionIds": [
"<string>"
],
"defaultDashboardId": "<string>",
"templateId": "<string>",
"statusUpdateSchedule": {
"startAt": "2023-11-07T05:31:56Z",
"stopAt": "2023-11-07T05:31:56Z",
"stopAfter": {
"value": 123,
"unit": "hours"
},
"scheduledStopPlan": {
"mode": "notify",
"tiebreakerMetricId": "<string>",
"fallback": "notify",
"fallbackVariationId": "<string>"
}
},
"nextScheduledStatusUpdate": {
"type": "start",
"date": "2023-11-07T05:31:56Z"
}
}
],
"limit": 123,
"offset": 123,
"count": 123,
"total": 123,
"hasMore": true,
"nextOffset": 123
}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
The number of items to return
1 <= x <= 100How many items to skip (use in conjunction with limit for pagination)
x >= 0Filter by project id
Filter by Data Source
Filter by experiment tracking key
Filter the returned list by the experiment tracking key (not the internal experiment ID). Note, this was deprecated to help reduce confusion, consider using trackingKey instead, which is functionally identical. You cannot use both params at the same time.
draft, running, stopped Raw experiment search/filter string (same syntax as the app's experiment list filters, e.g. status:running tag:checkout). Negation (!) and operators (~, ^, >, <, =) are not supported and return a 400
Filter by comma-separated owner ids, names, or emails
Filter by comma-separated results (won, lost, inconclusive, dnf). Matches the experiment's recorded result — set when an experiment is stopped and retained if it's later restarted, so running experiments can match too
dnf, won, lost, inconclusive Filter by comma-separated tags
Filter by comma-separated implementation types (feature, visualChange, redirect) — the kinds of changes linked to the experiment. To filter standard experiments vs bandits, use bandits instead
feature, visualChange, redirect Filter by comma-separated metric ids. Matches experiments that use a metric as a goal, secondary, or guardrail metric
When true, return only multi-armed bandits; when false, exclude them
true, false Filter by archived status. Set to true to return only archived experiments, false to exclude them. If omitted, both archived and non-archived experiments are returned.
"true"Field to sort the results by
dateCreated, dateUpdated, name Sort direction (used with sortBy)
asc, desc Was this page helpful?
curl -X GET 'https://api.growthbook.io/api/v1/experiments' \
-H 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.growthbook.io/api/v1/experiments"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.growthbook.io/api/v1/experiments', 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/experiments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.growthbook.io/api/v1/experiments"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.growthbook.io/api/v1/experiments")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/experiments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"experiments": [
{
"id": "<string>",
"trackingKey": "<string>",
"dateCreated": "2023-11-07T05:31:56Z",
"dateUpdated": "2023-11-07T05:31:56Z",
"name": "<string>",
"type": "standard",
"project": "<string>",
"hypothesis": "<string>",
"description": "<string>",
"tags": [
"<string>"
],
"owner": "<string>",
"archived": true,
"status": "<string>",
"autoRefresh": true,
"hashAttribute": "<string>",
"hashVersion": 1,
"variations": [
{
"variationId": "<string>",
"key": "<string>",
"name": "<string>",
"description": "<string>",
"screenshots": [
"<string>"
]
}
],
"phases": [
{
"name": "<string>",
"dateStarted": "<string>",
"dateEnded": "<string>",
"reasonForStopping": "<string>",
"seed": "<string>",
"coverage": 123,
"trafficSplit": [
{
"variationId": "<string>",
"weight": 123
}
],
"targetingCondition": "<string>",
"namespace": {
"namespaceId": "<string>",
"enabled": true,
"range": [
123
],
"ranges": [
[
123,
123
]
]
},
"prerequisites": [
{
"id": "<string>",
"condition": "<string>"
}
],
"savedGroupTargeting": [
{
"matchType": "all",
"savedGroups": [
"<string>"
]
}
]
}
],
"settings": {
"datasourceId": "<string>",
"assignmentQueryId": "<string>",
"experimentId": "<string>",
"segmentId": "<string>",
"queryFilter": "<string>",
"inProgressConversions": "include",
"attributionModel": "firstExposure",
"statsEngine": "bayesian",
"goals": [
{
"metricId": "<string>",
"overrides": {
"delayHours": 123,
"windowHours": 123,
"window": "conversion",
"winRiskThreshold": 123,
"loseRiskThreshold": 123,
"properPriorOverride": true,
"properPriorEnabled": true,
"properPriorMean": 123,
"properPriorStdDev": 123,
"regressionAdjustmentOverride": true,
"regressionAdjustmentEnabled": true,
"regressionAdjustmentDays": 123
}
}
],
"secondaryMetrics": [
{
"metricId": "<string>",
"overrides": {
"delayHours": 123,
"windowHours": 123,
"window": "conversion",
"winRiskThreshold": 123,
"loseRiskThreshold": 123,
"properPriorOverride": true,
"properPriorEnabled": true,
"properPriorMean": 123,
"properPriorStdDev": 123,
"regressionAdjustmentOverride": true,
"regressionAdjustmentEnabled": true,
"regressionAdjustmentDays": 123
}
}
],
"guardrails": [
{
"metricId": "<string>",
"overrides": {
"delayHours": 123,
"windowHours": 123,
"window": "conversion",
"winRiskThreshold": 123,
"loseRiskThreshold": 123,
"properPriorOverride": true,
"properPriorEnabled": true,
"properPriorMean": 123,
"properPriorStdDev": 123,
"regressionAdjustmentOverride": true,
"regressionAdjustmentEnabled": true,
"regressionAdjustmentDays": 123
}
}
],
"lookbackOverride": {
"type": "date",
"value": 123,
"valueUnit": "minutes"
},
"regressionAdjustmentEnabled": true,
"sequentialTestingEnabled": true,
"sequentialTestingTuningParameter": 123,
"postStratificationEnabled": true,
"decisionFrameworkSettings": {
"decisionCriteriaId": "<string>",
"decisionFrameworkMetricOverrides": [
{
"id": "<string>",
"targetMDE": 123
}
]
},
"metricOverrides": [
{
"id": "<string>",
"windowType": "conversion",
"windowHours": 123,
"delayHours": 123,
"properPriorOverride": true,
"properPriorEnabled": true,
"properPriorMean": 123,
"properPriorStdDev": 123,
"regressionAdjustmentOverride": true,
"regressionAdjustmentEnabled": true,
"regressionAdjustmentDays": 123
}
],
"activationMetric": {
"metricId": "<string>",
"overrides": {
"delayHours": 123,
"windowHours": 123,
"window": "conversion",
"winRiskThreshold": 123,
"loseRiskThreshold": 123,
"properPriorOverride": true,
"properPriorEnabled": true,
"properPriorMean": 123,
"properPriorStdDev": 123,
"regressionAdjustmentOverride": true,
"regressionAdjustmentEnabled": true,
"regressionAdjustmentDays": 123
}
}
},
"ownerEmail": "<string>",
"fallbackAttribute": "<string>",
"disableStickyBucketing": true,
"bucketVersion": 123,
"minBucketVersion": 123,
"resultSummary": {
"status": "<string>",
"winner": "<string>",
"conclusions": "<string>",
"releasedVariationId": "<string>",
"excludeFromPayload": true
},
"shareLevel": "public",
"publicUrl": "<string>",
"banditScheduleValue": 123,
"banditScheduleUnit": "days",
"banditBurnInValue": 123,
"banditBurnInUnit": "days",
"banditConversionWindowValue": 123,
"banditConversionWindowUnit": "days",
"linkedFeatures": [
"<string>"
],
"attributeScopeAllProjects": true,
"hasVisualChangesets": true,
"hasURLRedirects": true,
"customFields": {},
"customMetricSlices": [
{
"slices": [
{
"column": "<string>",
"levels": [
"<string>"
]
}
]
}
],
"precomputedUnitDimensionIds": [
"<string>"
],
"defaultDashboardId": "<string>",
"templateId": "<string>",
"statusUpdateSchedule": {
"startAt": "2023-11-07T05:31:56Z",
"stopAt": "2023-11-07T05:31:56Z",
"stopAfter": {
"value": 123,
"unit": "hours"
},
"scheduledStopPlan": {
"mode": "notify",
"tiebreakerMetricId": "<string>",
"fallback": "notify",
"fallbackVariationId": "<string>"
}
},
"nextScheduledStatusUpdate": {
"type": "start",
"date": "2023-11-07T05:31:56Z"
}
}
],
"limit": 123,
"offset": 123,
"count": 123,
"total": 123,
"hasMore": true,
"nextOffset": 123
}
