Toggle automatic monitoring updates
Deprecated alias for setting monitoring mode. Prefer /actions/set-monitoring-mode.
curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/set-auto-update' \
-H 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/set-auto-update"
payload = { "enabled": 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({enabled: true})
};
fetch('https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/set-auto-update', 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/ramp-schedules/{id}/actions/set-auto-update",
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([
'enabled' => 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/ramp-schedules/{id}/actions/set-auto-update"
payload := strings.NewReader("{\n \"enabled\": 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/ramp-schedules/{id}/actions/set-auto-update")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/set-auto-update")
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 \"enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"dateCreated": "2023-11-07T05:31:56Z",
"dateUpdated": "2023-11-07T05:31:56Z",
"name": "<string>",
"entityType": "feature",
"entityId": "<string>",
"targets": [
{
"id": "<string>",
"entityType": "feature",
"entityId": "<string>",
"status": "pending-join",
"ruleId": "<string>",
"environment": "<string>",
"activatingRevisionVersion": 123
}
],
"steps": [
{
"interval": 1,
"actions": [
{
"targetType": "feature-rule",
"targetId": "<string>",
"patch": {
"ruleId": "<string>",
"coverage": 0.5,
"condition": "<string>",
"savedGroups": [
{
"match": "all",
"ids": [
"<string>"
]
}
],
"prerequisites": [
{
"id": "<string>",
"condition": "<string>"
}
],
"allEnvironments": true,
"environments": [
"<string>"
],
"force": "<unknown>",
"enabled": true
}
}
],
"approvalNotes": "<string>",
"monitored": true,
"holdConditions": {
"minSampleSize": 123,
"requiresApproval": true
}
}
],
"status": "pending",
"currentStepIndex": 0,
"nextStepAt": "2023-11-07T05:31:56Z",
"awaitingApproval": true,
"startActions": [
{
"targetType": "feature-rule",
"targetId": "<string>",
"patch": {
"ruleId": "<string>",
"coverage": 0.5,
"condition": "<string>",
"savedGroups": [
{
"match": "all",
"ids": [
"<string>"
]
}
],
"prerequisites": [
{
"id": "<string>",
"condition": "<string>"
}
],
"allEnvironments": true,
"environments": [
"<string>"
],
"force": "<unknown>",
"enabled": true,
"hashAttribute": "<string>",
"seed": "<string>",
"hashVersion": 1
}
}
],
"endActions": [
{
"targetType": "feature-rule",
"targetId": "<string>",
"patch": {
"ruleId": "<string>",
"coverage": 0.5,
"condition": "<string>",
"savedGroups": [
{
"match": "all",
"ids": [
"<string>"
]
}
],
"prerequisites": [
{
"id": "<string>",
"condition": "<string>"
}
],
"allEnvironments": true,
"environments": [
"<string>"
],
"force": "<unknown>",
"enabled": true
}
}
],
"startDate": "2023-11-07T05:31:56Z",
"cutoffDate": "2023-11-07T05:31:56Z",
"requiresStartApproval": true,
"startApprovedAt": "2023-11-07T05:31:56Z",
"startedAt": "2023-11-07T05:31:56Z",
"phaseStartedAt": "2023-11-07T05:31:56Z",
"pausedAt": "2023-11-07T05:31:56Z",
"nextProcessAt": "2023-11-07T05:31:56Z",
"elapsedMs": 123,
"lockdownConfig": {
"mode": "none"
},
"monitoringConfig": {
"datasourceId": "<string>",
"guardrailMetricIds": [
"<string>"
],
"exposureQuery": {
"id": "<string>",
"identifierType": "<string>"
},
"exposureQueryId": "<string>",
"signalMetricIds": [
"<string>"
],
"updateScheduleMinutes": 11,
"monitoringMode": "auto",
"autoUpdate": true,
"srmAction": "rollback",
"noTrafficAction": "rollback",
"noTrafficGracePeriodHours": 1,
"multipleExposureAction": "rollback"
},
"experimentHealthAction": "rollback",
"currentStepEnteredAt": "2023-11-07T05:31:56Z",
"stepApproval": {
"stepIndex": 123,
"approvedAt": "2023-11-07T05:31:56Z",
"approvedBy": "<string>",
"context": "ui"
},
"monitoringStartDate": "2023-11-07T05:31:56Z",
"lastRollbackAt": "2023-11-07T05:31:56Z",
"lastRollbackReason": "<string>",
"monitoringStatus": {
"monitoringMode": "auto",
"autoUpdate": true,
"effectiveAutoUpdate": true,
"currentStepMonitored": true,
"safeRolloutId": "<string>",
"blockedReason": "<string>",
"nextSnapshotAt": "2023-11-07T05:31:56Z"
}
}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
Body
Legacy alias for monitoring mode (true => auto, false => manual).
Response
Resource created
Unique identifier (rs_ prefix)
feature Controlled entity references
Show child attributes
Show child attributes
Ordered ramp steps
Show child attributes
Show child attributes
pending, ready, running, paused, completed, rolled-back Index of current step; -1 = not yet started
x >= -1When the current step's time gate elapses; null for steps with no interval (pure approval gates) and terminal states
Computed at read time: whether a human approval is the gate blocking the schedule right now — either the start-approval gate (requiresStartApproval before step 0) or the current step's holdConditions.requiresApproval once its time hold (if any) has elapsed. Paused schedules report false (the pause is the blocking gate). For monitored steps the approve-step endpoint may still reject an approval until analysis-based gates clear.
Actions that restore controlled rules to their pre-ramp state. Applied when rolling back or jumping to start, and the base every step accumulates on; the only place a plan can set hashAttribute, seed or hashVersion.
Show child attributes
Show child attributes
Actions applied on top of all step patches when the ramp completes. Represents the final desired rule state.
Show child attributes
Show child attributes
When the ramp fires. Absent/null means immediately on publish; set to a future datetime to delay start and keep the rule disabled until that time.
Rule-level kill date. When reached, the ramp is completed and the rule is disabled (enabled=false). Use for time-boxed rules that must stop serving on a fixed date regardless of ramp progress. Set to null to clear.
When true, the ramp holds at step -1 with its rule disabled (zero traffic) until a human approves the start via /actions/approve-step. Composes with startDate ('hold until approved, then arm for that date').
When the current launch's start was approved. Cleared on every return to step -1 (publish, rollback), re-arming the approval gate.
Anchor for cumulative interval timing; resets after each approval gate is satisfied
Milliseconds since startedAt (computed at response time, not stored)
Show child attributes
Show child attributes
Show child attributes
Show child attributes
rollback, hold, warn Approval record for the current step. Valid only while stepApproval.stepIndex === currentStepIndex.
Show child attributes
Show child attributes
When the monitored section most recently started (first monitored step entered). Used for no-traffic grace period gating.
Read-only monitoring status. Present when monitoringConfig is set.
Show child attributes
Show child attributes
Was this page helpful?
curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/set-auto-update' \
-H 'Authorization: Bearer YOUR_API_KEY'import requests
url = "https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/set-auto-update"
payload = { "enabled": 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({enabled: true})
};
fetch('https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/set-auto-update', 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/ramp-schedules/{id}/actions/set-auto-update",
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([
'enabled' => 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/ramp-schedules/{id}/actions/set-auto-update"
payload := strings.NewReader("{\n \"enabled\": 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/ramp-schedules/{id}/actions/set-auto-update")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/set-auto-update")
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 \"enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"dateCreated": "2023-11-07T05:31:56Z",
"dateUpdated": "2023-11-07T05:31:56Z",
"name": "<string>",
"entityType": "feature",
"entityId": "<string>",
"targets": [
{
"id": "<string>",
"entityType": "feature",
"entityId": "<string>",
"status": "pending-join",
"ruleId": "<string>",
"environment": "<string>",
"activatingRevisionVersion": 123
}
],
"steps": [
{
"interval": 1,
"actions": [
{
"targetType": "feature-rule",
"targetId": "<string>",
"patch": {
"ruleId": "<string>",
"coverage": 0.5,
"condition": "<string>",
"savedGroups": [
{
"match": "all",
"ids": [
"<string>"
]
}
],
"prerequisites": [
{
"id": "<string>",
"condition": "<string>"
}
],
"allEnvironments": true,
"environments": [
"<string>"
],
"force": "<unknown>",
"enabled": true
}
}
],
"approvalNotes": "<string>",
"monitored": true,
"holdConditions": {
"minSampleSize": 123,
"requiresApproval": true
}
}
],
"status": "pending",
"currentStepIndex": 0,
"nextStepAt": "2023-11-07T05:31:56Z",
"awaitingApproval": true,
"startActions": [
{
"targetType": "feature-rule",
"targetId": "<string>",
"patch": {
"ruleId": "<string>",
"coverage": 0.5,
"condition": "<string>",
"savedGroups": [
{
"match": "all",
"ids": [
"<string>"
]
}
],
"prerequisites": [
{
"id": "<string>",
"condition": "<string>"
}
],
"allEnvironments": true,
"environments": [
"<string>"
],
"force": "<unknown>",
"enabled": true,
"hashAttribute": "<string>",
"seed": "<string>",
"hashVersion": 1
}
}
],
"endActions": [
{
"targetType": "feature-rule",
"targetId": "<string>",
"patch": {
"ruleId": "<string>",
"coverage": 0.5,
"condition": "<string>",
"savedGroups": [
{
"match": "all",
"ids": [
"<string>"
]
}
],
"prerequisites": [
{
"id": "<string>",
"condition": "<string>"
}
],
"allEnvironments": true,
"environments": [
"<string>"
],
"force": "<unknown>",
"enabled": true
}
}
],
"startDate": "2023-11-07T05:31:56Z",
"cutoffDate": "2023-11-07T05:31:56Z",
"requiresStartApproval": true,
"startApprovedAt": "2023-11-07T05:31:56Z",
"startedAt": "2023-11-07T05:31:56Z",
"phaseStartedAt": "2023-11-07T05:31:56Z",
"pausedAt": "2023-11-07T05:31:56Z",
"nextProcessAt": "2023-11-07T05:31:56Z",
"elapsedMs": 123,
"lockdownConfig": {
"mode": "none"
},
"monitoringConfig": {
"datasourceId": "<string>",
"guardrailMetricIds": [
"<string>"
],
"exposureQuery": {
"id": "<string>",
"identifierType": "<string>"
},
"exposureQueryId": "<string>",
"signalMetricIds": [
"<string>"
],
"updateScheduleMinutes": 11,
"monitoringMode": "auto",
"autoUpdate": true,
"srmAction": "rollback",
"noTrafficAction": "rollback",
"noTrafficGracePeriodHours": 1,
"multipleExposureAction": "rollback"
},
"experimentHealthAction": "rollback",
"currentStepEnteredAt": "2023-11-07T05:31:56Z",
"stepApproval": {
"stepIndex": 123,
"approvedAt": "2023-11-07T05:31:56Z",
"approvedBy": "<string>",
"context": "ui"
},
"monitoringStartDate": "2023-11-07T05:31:56Z",
"lastRollbackAt": "2023-11-07T05:31:56Z",
"lastRollbackReason": "<string>",
"monitoringStatus": {
"monitoringMode": "auto",
"autoUpdate": true,
"effectiveAutoUpdate": true,
"currentStepMonitored": true,
"safeRolloutId": "<string>",
"blockedReason": "<string>",
"nextSnapshotAt": "2023-11-07T05:31:56Z"
}
}
