Download OpenAPI specification:Download
GrowthBook offers a full REST API for interacting with the application.
Request data can use either JSON or Form data encoding (with proper Content-Type headers). All response bodies are JSON-encoded.
The API base URL for GrowthBook Cloud is https://api.growthbook.io/api. For self-hosted deployments, it is the same as your API_HOST environment variable (defaults to http://localhost:3100/api). The rest of these docs will assume you are using GrowthBook Cloud.
Endpoints are versioned by path prefix:
/v1/... — stable, widely-supported endpoints/v2/... — updated endpoints with improved shapes (e.g. unified per-rule environment scope for feature flags)New integrations should prefer v2 where available.
We support both the HTTP Basic and Bearer authentication schemes for convenience.
You first need to generate a new API Key in GrowthBook. Different keys have different permissions:
Personal Access Tokens under the your user menu.admin or readonly. Only Admins with the manageApiKeys permission can manage Secret Keys on behalf of an organization. These can be created by going to Settings -> API KeysIf using HTTP Basic auth, pass the Secret Key as the username and leave the password blank (when using curl, add : at the end of the secret to indicate an empty password)
curl https://api.growthbook.io/api/v1/features \
-u secret_abc123DEF456:
If using Bearer auth, pass the Secret Key as the token:
curl https://api.growthbook.io/api/v1/features \
-H "Authorization: Bearer secret_abc123DEF456"
The API may return the following error status codes:
ignoreWarnings clears every 422 response.The response body will be a JSON object with the following properties:
Publish responses include a gates array that explains every blocker:
type, severity, and messages identify the problem.override names the request-body field that can bypass it. This is ignoreWarnings for warnings, skipSchemaValidation for schema and invariant failures, or skipHooks for Custom Hook rejections. A value of null means there is no request-body override.requiresPermission identifies any additional permission needed to use the override.resolution provides an API action, method, and path when the blocker must be resolved another way.For example, an approval gate is cleared by approving the revision or by using a caller with Bypass draft approvals access. A Config lock is cleared through the unlock route in resolution.
When a successful publish bypasses a gate, the response includes bypassedGates. Each entry reports the gate type and how it was bypassed in via, which is one of ignoreWarnings, skipSchemaValidation, skipHooks, bypassApprovalPermission, restApiBypassesReviews, or revertsBypassApproval (reverts only). This field is omitted when no gates were bypassed.
| limit | integer [ 1 .. 100 ] Default: 10 The number of items to return |
| offset | integer >= 0 Default: 0 How many items to skip (use in conjunction with limit for pagination) |
curl -X GET 'https://api.growthbook.io/api/v1/projects' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "projects": [
- {
- "id": "string",
- "name": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "description": "string",
- "publicId": "string",
- "settings": {
- "statsEngine": "string",
- "confidenceLevel": 0,
- "pValueThreshold": 0
}
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| name required | string |
| description | string <= 10000 characters |
| publicId | string URL-safe slug (lowercase letters, numbers, dashes). Auto-generated from name if not provided. |
object Project stats settings that, when set, override the organization settings. |
{- "name": "string",
- "description": "string",
- "publicId": "string",
- "settings": {
- "statsEngine": "string",
- "confidenceLevel": 0,
- "pValueThreshold": 0
}
}{- "project": {
- "id": "string",
- "name": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "description": "string",
- "publicId": "string",
- "settings": {
- "statsEngine": "string",
- "confidenceLevel": 0,
- "pValueThreshold": 0
}
}
}| id required | string The id of the requested resource |
curl -X GET 'https://api.growthbook.io/api/v1/projects/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "project": {
- "id": "string",
- "name": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "description": "string",
- "publicId": "string",
- "settings": {
- "statsEngine": "string",
- "confidenceLevel": 0,
- "pValueThreshold": 0
}
}
}| id required | string The id of the requested resource |
| name | string Project name. |
| description | string <= 10000 characters Project description. |
| publicId | string URL-safe slug (lowercase letters, numbers, dashes). |
object Project stats settings that, when set, override the organization settings. |
{- "name": "string",
- "description": "string",
- "publicId": "string",
- "settings": {
- "statsEngine": "string",
- "confidenceLevel": 0,
- "pValueThreshold": 0
}
}{- "project": {
- "id": "string",
- "name": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "description": "string",
- "publicId": "string",
- "settings": {
- "statsEngine": "string",
- "confidenceLevel": 0,
- "pValueThreshold": 0
}
}
}| id required | string The id of the requested resource |
curl -X DELETE 'https://api.growthbook.io/api/v1/projects/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "prj__123abc"
}GrowthBook comes with one environment by default (production), but you can add as many as you need. When used with feature flags, you can enable/disable feature flags on a per-environment basis.
curl -X GET 'https://api.growthbook.io/api/v1/environments' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "environments": [
- {
- "id": "string",
- "description": "string",
- "toggleOnList": true,
- "defaultState": true,
- "projects": [
- "string"
], - "parent": "string"
}
]
}| id required | string The ID of the new environment |
| description | string The description of the new environment |
| toggleOnList | boolean Show on feature list page |
| defaultState | boolean Default state for new features |
| projects | Array of strings |
| parent | string An environment that the new environment should inherit feature rules from. Requires an enterprise license |
{- "id": "string",
- "description": "string",
- "toggleOnList": true,
- "defaultState": true,
- "projects": [
- "string"
], - "parent": "string"
}{- "environment": {
- "id": "string",
- "description": "string",
- "toggleOnList": true,
- "defaultState": true,
- "projects": [
- "string"
], - "parent": "string"
}
}| id required | string The id of the requested resource |
| description | string The description of the new environment |
| toggleOnList | boolean Show on feature list page |
| defaultState | boolean Default state for new features |
| projects | Array of strings |
{- "description": "string",
- "toggleOnList": true,
- "defaultState": true,
- "projects": [
- "string"
]
}{- "environment": {
- "id": "string",
- "description": "string",
- "toggleOnList": true,
- "defaultState": true,
- "projects": [
- "string"
], - "parent": "string"
}
}| id required | string The id of the requested resource |
curl -X DELETE 'https://api.growthbook.io/api/v1/environments/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "string"
}Control your feature flags programatically.
Rules are returned as a unified top-level array; each rule carries allEnvironments / environments scope fields instead of being bucketed by environment.
Returns features with pagination. Rules are returned as a unified top-level array with per-rule environment scope.
| limit | integer [ 1 .. 100 ] Default: 10 The number of items to return |
| offset | integer >= 0 Default: 0 How many items to skip (use in conjunction with limit for pagination) |
| projectId | string Filter by project id |
| clientKey | string Filter by a SDK connection's client key |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Whether to include archived features. Defaults to | |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Default: false If true, return all matching items and ignore limit/offset. Self-hosted only. Has no effect unless API_ALLOW_SKIP_PAGINATION is set to true or 1. |
curl -X GET 'https://api.growthbook.io/api/v2/features' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "features": [
- {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "valueType": "boolean",
- "defaultValue": "string",
- "baseConfig": "string",
- "defaultValueConfig": "string",
- "tags": [
- "string"
], - "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "environments": {
- "property1": {
- "enabled": true,
- "defaultValue": "string",
- "definition": "string"
}, - "property2": {
- "enabled": true,
- "defaultValue": "string",
- "definition": "string"
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "id": "string",
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}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.
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.
baseConfig): set valueType: "json" and baseConfig: "<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.defaultValue: "{}" to use baseConfig. To resolve the default to a descendant of baseConfig instead, set defaultValueConfig to that descendant's key (it must be within baseConfig's family); omit/null to use baseConfig directly.config field naming the family config that value patches (omit/null to patch the base). value is 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 }
]
}
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Deprecated Deprecated — pass | |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Deprecated Deprecated — pass |
| id required | string non-empty A unique key name for the feature. Feature keys can only include letters, numbers, hyphens, and underscores. |
| archived | boolean |
| description | string <= 10000 characters Description of the feature |
| owner | string 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. Optional when authenticating with a Personal Access Token (PAT): when omitted, the owner defaults to the PAT's user. Required when authenticating with an organization secret API key (which has no associated user): omitting it fails with a 400. |
| project | string An associated project ID |
| targetingAllProjects | boolean Make this feature discoverable in — and served to — every project, beyond its primary |
| targetingProjects | Array of strings Secondary project IDs this feature is targeted in and served to, beyond its primary |
| valueType required | string Enum: "boolean" "string" "number" "json" The data type of the feature payload. Boolean by default. |
| defaultValue required | string Default value when feature is enabled. Type must match |
string or null Key of the config backing this flag ("Config mode"). Requires | |
string or null Optional. A config within | |
| tags | Array of strings List of associated tags |
Array of objects or objects or objects or objects Feature rules. Each rule carries its own environment scope via | |
object Per-environment enabled state. V2 rules are specified on the top-level | |
| prerequisites | Array of strings Feature IDs. Each feature must evaluate to |
| jsonSchema | string Use JSON schema to validate the payload of a JSON-type feature value (enterprise only). |
object | |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "id": "string",
- "archived": true,
- "description": "string",
- "owner": "string",
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "valueType": "boolean",
- "defaultValue": "string",
- "baseConfig": "string",
- "defaultValueConfig": "string",
- "tags": [
- "string"
], - "rules": [
- {
- "description": "string",
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "scheduleRules": [
- {
- "timestamp": "2019-08-24T14:15:22Z",
- "enabled": true
}
], - "id": "string",
- "enabled": true,
- "type": "force",
- "value": "string",
- "config": "string",
- "sparse": true,
- "allEnvironments": true,
- "environments": [
- "string"
], - "allProjects": true,
- "projects": [
- "string"
]
}
], - "environments": {
- "property1": {
- "enabled": true
}, - "property2": {
- "enabled": true
}
}, - "prerequisites": [
- "string"
], - "jsonSchema": "string",
- "customFields": {
- "property1": "string",
- "property2": "string"
}, - "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "feature": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "valueType": "boolean",
- "defaultValue": "string",
- "baseConfig": "string",
- "defaultValueConfig": "string",
- "tags": [
- "string"
], - "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "environments": {
- "property1": {
- "enabled": true,
- "defaultValue": "string",
- "definition": "string"
}, - "property2": {
- "enabled": true,
- "defaultValue": "string",
- "definition": "string"
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "id": "string",
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}
}| id required | string The id of the requested resource |
| withRevisions | string Enum: "all" "drafts" "published" "none" Also return feature revisions (all, draft, or published statuses) |
curl -X GET 'https://api.growthbook.io/api/v2/features/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "feature": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "valueType": "boolean",
- "defaultValue": "string",
- "baseConfig": "string",
- "defaultValueConfig": "string",
- "tags": [
- "string"
], - "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "environments": {
- "property1": {
- "enabled": true,
- "defaultValue": "string",
- "definition": "string"
}, - "property2": {
- "enabled": true,
- "defaultValue": "string",
- "definition": "string"
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "id": "string",
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}, - "revisions": [
- {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": null,
- "targetId": null,
- "patch": { }
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
]
}
}Updates the Feature Flag and immediately publishes a new revision. The caller needs Edit access in the Feature Flag's Project and Publish access for every affected environment. When approval is required, use the revision endpoints instead, unless the caller can bypass draft approvals.
Other top-level fields are patch-merged: omit a field to leave it unchanged. The rules field, when supplied, replaces the entire rules array in one operation. To preserve existing rules, fetch the Feature Flag, update the returned rules array, and send the complete array back. Safe-rollout rules round-trip through safeRolloutId; use POST /v2/features/:id/revisions/:version/rules to create new ones.
| id required | string The id of the requested resource |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Deprecated Deprecated — pass | |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Deprecated Deprecated — pass |
| description | string <= 10000 characters Description of the feature |
| archived | boolean |
| project | string An associated project ID |
| targetingAllProjects | boolean Make this feature discoverable in — and served to — every project, beyond its primary |
| targetingProjects | Array of strings Secondary project IDs this feature is targeted in and served to, beyond its primary |
| owner | string 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. |
| defaultValue | string |
string or null The config backing this flag, fixed at creation. Cannot be changed by an update — resend the current value or omit it; a different value is rejected. | |
string or null Optional. A config within | |
| tags | Array of strings List of associated tags. Will override tags completely with submitted list |
Array of objects or objects or objects or objects Replaces all feature rules atomically. Behavior differs from v1: v1 PUT applies per-environment patches, v2 PUT swaps the entire | |
object Per-environment enabled state. V2 rules are specified on the top-level | |
| prerequisites | Array of strings Feature IDs. Each feature must evaluate to |
| jsonSchema | string Use JSON schema to validate the payload of a JSON-type feature value (enterprise only). |
object | |
object or null Holdout to assign this feature to. Pass | |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "description": "string",
- "archived": true,
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "owner": "string",
- "defaultValue": "string",
- "baseConfig": "string",
- "defaultValueConfig": "string",
- "tags": [
- "string"
], - "rules": [
- {
- "description": "string",
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "scheduleRules": [
- {
- "timestamp": "2019-08-24T14:15:22Z",
- "enabled": true
}
], - "id": "string",
- "enabled": true,
- "type": "force",
- "value": "string",
- "config": "string",
- "sparse": true,
- "allEnvironments": true,
- "environments": [
- "string"
], - "allProjects": true,
- "projects": [
- "string"
]
}
], - "environments": {
- "property1": {
- "enabled": true
}, - "property2": {
- "enabled": true
}
}, - "prerequisites": [
- "string"
], - "jsonSchema": "string",
- "customFields": {
- "property1": "string",
- "property2": "string"
}, - "holdout": {
- "id": "string",
- "value": "string"
}, - "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "feature": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "valueType": "boolean",
- "defaultValue": "string",
- "baseConfig": "string",
- "defaultValueConfig": "string",
- "tags": [
- "string"
], - "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "environments": {
- "property1": {
- "enabled": true,
- "defaultValue": "string",
- "definition": "string"
}, - "property2": {
- "enabled": true,
- "defaultValue": "string",
- "definition": "string"
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "id": "string",
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}, - "bypassedGates": [
- {
- "type": "string",
- "outcome": "bypassed",
- "via": "ignoreWarnings"
}
]
}Permanently deletes a Feature Flag and all of its revisions. The caller needs Archive & delete access. Deleting a live Feature Flag also requires Publish access for every environment where it is enabled and the organization setting "REST API always bypasses approval requirements". Otherwise, archive the Feature Flag before deleting it.
| id required | string The id of the requested resource |
curl -X DELETE 'https://api.growthbook.io/api/v2/features/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "feature-123"
}Enables or disables a Feature Flag in one or more environments and immediately publishes the change. The caller needs Publish access for every environment in the request. When approval is required, use a draft revision instead, unless the caller can bypass draft approvals.
| id required | string The id of the requested resource |
| reason | string |
required | object |
{- "reason": "string",
- "environments": {
- "property1": true,
- "property2": true
}
}{- "feature": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "valueType": "boolean",
- "defaultValue": "string",
- "baseConfig": "string",
- "defaultValueConfig": "string",
- "tags": [
- "string"
], - "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "environments": {
- "property1": {
- "enabled": true,
- "defaultValue": "string",
- "definition": "string"
}, - "property2": {
- "enabled": true,
- "defaultValue": "string",
- "definition": "string"
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "id": "string",
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}, - "bypassedGates": [
- {
- "type": "string",
- "outcome": "bypassed",
- "via": "ignoreWarnings"
}
]
}Restores a previously published revision and immediately publishes the result as a new revision. The caller needs Revert access for every affected environment. When approval is required, the request is allowed only if the caller holds the FlagsBypassApprovals policy, or the organization enables either "REST API always bypasses approval requirements" or "Allow reverts without approval".
If the restored values no longer match the Feature Flag's current value type or JSON schema, the API returns 422 with warnings. Send "ignoreWarnings": true to acknowledge those warnings and continue.
| id required | string The id of the requested resource |
| revision required | number |
| comment | string |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "revision": 0,
- "comment": "string",
- "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "feature": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "valueType": "boolean",
- "defaultValue": "string",
- "baseConfig": "string",
- "defaultValueConfig": "string",
- "tags": [
- "string"
], - "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "environments": {
- "property1": {
- "enabled": true,
- "defaultValue": "string",
- "definition": "string"
}, - "property2": {
- "enabled": true,
- "defaultValue": "string",
- "definition": "string"
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "id": "string",
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}, - "bypassedGates": [
- {
- "type": "string",
- "outcome": "bypassed",
- "via": "ignoreWarnings"
}
]
}| projectId | string Filter by project id |
curl -X GET 'https://api.growthbook.io/api/v2/feature-keys' \ -H 'Authorization: Bearer YOUR_API_KEY'
[- "string"
]| ids required | string Comma-separated list of feature IDs (URL-encoded if needed). Example: |
curl -X GET 'https://api.growthbook.io/api/v2/stale-features' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "features": {
- "property1": {
- "featureId": "string",
- "isStale": true,
- "staleReason": "never-stale",
- "neverStale": true,
- "staleByEnv": {
- "property1": {
- "isStale": true,
- "reason": "no-rules",
- "evaluatesTo": "string"
}, - "property2": {
- "isStale": true,
- "reason": "no-rules",
- "evaluatesTo": "string"
}
}
}, - "property2": {
- "featureId": "string",
- "isStale": true,
- "staleReason": "never-stale",
- "neverStale": true,
- "staleByEnv": {
- "property1": {
- "isStale": true,
- "reason": "no-rules",
- "evaluatesTo": "string"
}, - "property2": {
- "isStale": true,
- "reason": "no-rules",
- "evaluatesTo": "string"
}
}
}
}
}Draft revisions for feature flags, including rules, scheduling, and approval workflows.
Revision rules is a flat array with per-rule scope fields.
Returns a paginated list of feature revisions across all features in the organization. Use the featureId query parameter to filter to a single feature. Revision rules is a flat array with per-rule scope.
| limit | integer [ 1 .. 100 ] Default: 10 The number of items to return |
| offset | integer >= 0 Default: 0 How many items to skip (use in conjunction with limit for pagination) |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Default: false If true, return all matching items and ignore limit/offset. Self-hosted only. Has no effect unless API_ALLOW_SKIP_PAGINATION is set to true or 1. | |
| featureId | string |
string or Array of strings Filter by revision status. Single value, comma-separated list, repeated params (?status=draft&status=approved), or | |
| author | string |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean If true, return only revisions authored by or contributed to by the calling user. | |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Whether to include revisions for archived features. Defaults to |
curl -X GET 'https://api.growthbook.io/api/v2/feature-revisions' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "revisions": [
- {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": null,
- "ids": [ ]
}
], - "prerequisites": [
- {
- "id": null,
- "condition": null
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": null,
- "coverage": null,
- "condition": null,
- "savedGroups": null,
- "prerequisites": null,
- "allEnvironments": null,
- "environments": null,
- "force": null,
- "enabled": null
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": null,
- "ids": [ ]
}
], - "prerequisites": [
- {
- "id": null,
- "condition": null
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}Returns a paginated list of revisions for this feature, sorted newest-first. Revision rules is a flat array with per-rule scope.
| id required | string The id of the requested resource |
| limit | integer [ 1 .. 100 ] Default: 10 The number of items to return |
| offset | integer >= 0 Default: 0 How many items to skip (use in conjunction with limit for pagination) |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Default: false If true, return all matching items and ignore limit/offset. Self-hosted only. Has no effect unless API_ALLOW_SKIP_PAGINATION is set to true or 1. | |
string or Array of strings Filter by revision status. Single value, comma-separated list, repeated params (?status=draft&status=approved), or | |
| author | string |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean If true, return only revisions authored by or contributed to by the calling user. Requires a user-scoped API key. Mutually exclusive with |
curl -X GET 'https://api.growthbook.io/api/v2/features/{id}/revisions' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "revisions": [
- {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": null,
- "ids": [ ]
}
], - "prerequisites": [
- {
- "id": null,
- "condition": null
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": null,
- "coverage": null,
- "condition": null,
- "savedGroups": null,
- "prerequisites": null,
- "allEnvironments": null,
- "environments": null,
- "force": null,
- "enabled": null
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": null,
- "ids": [ ]
}
], - "prerequisites": [
- {
- "id": null,
- "condition": null
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}Creates a new draft revision branched from the current live revision.
| id required | string |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean If the organization caps concurrent drafts per feature ( |
| comment | string |
| title | string |
| ignoreWarnings | boolean 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. |
{- "comment": "string",
- "title": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Returns the most recently updated active draft revision for the feature. Returns 404 if no matching draft exists. Filter by status, author, or use mine=true to scope to the calling user's own drafts.
| id required | string |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean If true, return only the most recent active draft authored by or contributed to by the calling user. | |
string or Array of strings Filter by revision status. Single value, comma-separated list, repeated params (?status=draft&status=approved), or | |
| author | string Filter to drafts created by this user (userId). |
curl -X GET 'https://api.growthbook.io/api/v2/features/{id}/revisions/latest' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Returns the revision at the specified version for this feature. Revision rules is a flat array with per-rule environment scope.
| id required | string |
| version required | integer |
curl -X GET 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Returns a schema-keyed JSON diff between this revision and a baseline. The same shapes the in-app review surface produces under Copy as → Minimal JSON / Full JSON: minimal lists only what changed (with id-keyed arrays bucketed into added/removed/modified items and reorder detection), while full returns the complete before/after content of the revision. Lifecycle fields (version, status, comment, date, createdBy, publishedBy) are excluded from the diff body and echoed via from / to instead. Defaults to diffing against the revision's own baseVersion; pass ?base=live to diff against the current live revision, or ?base=<version> for an arbitrary historical one.
| id required | string |
| version required | integer |
| format | string Enum: "minimal" "full"
|
"baseVersion" (string) or "live" (string) or integer Compare against: |
curl -X GET 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/diff' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "diff": {
- "name": "string",
- "type": "feature",
- "from": 0,
- "to": 0,
- "before": {
- "property1": null,
- "property2": null
}, - "after": {
- "property1": null,
- "property2": null
}, - "supplemental": [
- {
- "name": "string",
- "type": "string",
- "before": { },
- "after": { }
}
]
}
}| id required | string |
required | integer or "new" (string) |
| comment | string |
| title | string |
| description | string |
| owner | string 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. |
| project | string |
| tags | Array of strings |
| neverStale | boolean |
object | |
object | |
| ignoreWarnings | boolean 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. |
{- "comment": "string",
- "title": "string",
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "customFields": {
- "property1": null,
- "property2": null
}, - "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "type": "object",
- "fields": [
- {
- "key": "string",
- "type": "integer",
- "required": true,
- "default": "string",
- "description": "string",
- "enum": [
- "string"
], - "min": 0,
- "max": 0,
- "nullable": true,
- "jsonSchema": "string"
}
], - "additionalProperties": true,
- "invariants": [
- {
- "name": "string",
- "rule": "string",
- "message": "string"
}
]
}, - "date": null,
- "enabled": true
}, - "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}| id required | string |
required | integer or "new" (string) |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Deprecated Deprecated — pass | |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Deprecated Deprecated — pass |
| defaultValue required | string New default value. In Config mode (feature has |
string or null Key of a config within the feature's | |
| revisionTitle | string Title for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| revisionComment | string Comment for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "defaultValue": "string",
- "defaultValueConfig": "string",
- "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Sets the feature-level prerequisites for this revision. Each prerequisite must be a boolean feature flag; the gate is always 'prerequisite flag is on'. The condition is applied automatically — only the flag ID is required.
| id required | string |
required | integer or "new" (string) |
required | Array of objects List of prerequisite boolean flags. When any prerequisite flag is off for a user, this flag returns its defaultValue for that user. |
| revisionTitle | string Title for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| revisionComment | string Comment for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| ignoreWarnings | boolean 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. |
{- "prerequisites": [
- {
- "id": "string"
}
], - "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}| id required | string |
required | integer or "new" (string) |
required | object or null |
| revisionTitle | string Title for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| revisionComment | string Comment for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| ignoreWarnings | boolean 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. |
{- "holdout": {
- "id": "string",
- "value": "string"
}, - "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}| id required | string |
required | integer or "new" (string) |
| archived required | boolean |
| revisionTitle | string Title for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| revisionComment | string Comment for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| ignoreWarnings | boolean 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. |
{- "archived": true,
- "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}| id required | string |
required | integer or "new" (string) |
| environment required | string |
| enabled required | boolean |
| revisionTitle | string Title for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| revisionComment | string Comment for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| ignoreWarnings | boolean 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. |
{- "environment": "string",
- "enabled": true,
- "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Appends a new rule to the revision's rule list. Supply allEnvironments: true on the rule to target all environments, or environments: [...] to scope to specific ones.
Scheduling: For force and rollout rules, attach a schedule via rampSchedule (multi-step ramp) or schedule (simple start/end window) — these create standalone ramp actions and set pendingRamp: "create" on the rule. For experiment-ref and safe-rollout rules, only schedule is supported and is stored as legacy schedule fields on the rule itself (rampSchedule is not available for these rule types).
| id required | string |
required | integer or "new" (string) |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Deprecated Deprecated — pass | |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Deprecated Deprecated — pass |
required | Targeting Rule (object) or Experiment Rule (object) or Safe Rollout Rule (object) |
object Multi-step ramp schedule for force/rollout rules. Not supported for experiment-ref or safe-rollout rules. Mutually exclusive with | |
object Simple start/end date window. For force/rollout rules this creates a standalone ramp action; for experiment-ref/safe-rollout rules this sets legacy schedule fields on the rule. Mutually exclusive with | |
| revisionTitle | string Title for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| revisionComment | string Comment for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "rule": {
- "description": "string",
- "enabled": true,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "type": "force",
- "value": "string",
- "config": "string",
- "sparse": true,
- "coverage": 1,
- "hashAttribute": "string",
- "seed": "string",
- "hashVersion": 1
}, - "rampSchedule": {
- "name": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}, - "schedule": {
- "startDate": "2019-08-24T14:15:22Z",
- "endDate": "2019-08-24T14:15:22Z"
}, - "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Patches fields on an existing rule (identified by ruleId). The rule type cannot be changed. Scope can be updated via allEnvironments / environments patch fields.
Scheduling: For force and rollout rules, update the schedule via rampSchedule (multi-step ramp) or schedule (simple start/end window) — these manage standalone ramp actions and set pendingRamp: "create" on the rule. For experiment-ref and safe-rollout rules, only schedule is supported and updates legacy schedule fields on the rule itself (rampSchedule is not available for these rule types).
| id required | string |
required | integer or "new" (string) |
| ruleId required | string |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Deprecated Deprecated — pass | |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Deprecated Deprecated — pass |
required | object |
object Multi-step ramp schedule for force/rollout rules. Not supported for experiment-ref or safe-rollout rules. Mutually exclusive with | |
object Simple start/end date window. For force/rollout rules this manages a standalone ramp action; for experiment-ref/safe-rollout rules this updates legacy schedule fields on the rule. Mutually exclusive with | |
| revisionTitle | string Title for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| revisionComment | string Comment for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "rule": {
- "description": "string",
- "enabled": true,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "type": "force",
- "value": "string",
- "config": "string",
- "sparse": true,
- "coverage": 1,
- "hashAttribute": "string",
- "seed": "string",
- "hashVersion": 1,
- "experimentId": "string",
- "variations": [
- {
- "variationId": "string",
- "value": "string",
- "config": "string"
}
], - "controlValue": "string",
- "variationValue": "string",
- "allEnvironments": true,
- "environments": [
- "string"
]
}, - "rampSchedule": {
- "name": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}, - "schedule": {
- "startDate": "2019-08-24T14:15:22Z",
- "endDate": "2019-08-24T14:15:22Z"
}, - "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Removes the rule from the revision. Any pending ramp actions for this rule are also cleared.
| id required | string |
required | integer or "new" (string) |
| ruleId required | string |
| revisionTitle | string Title for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| revisionComment | string Comment for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| ignoreWarnings | boolean 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. |
{- "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Replaces the flat global rule order. ruleIds must contain exactly the set of all existing rule IDs in the revision — no additions, omissions, or duplicates.
| id required | string |
required | integer or "new" (string) |
| ruleIds required | Array of strings |
| revisionTitle | string Title for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| revisionComment | string Comment for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| ignoreWarnings | boolean 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. |
{- "ruleIds": [
- "string"
], - "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Queues a revision-controlled ramp action for this rule. If the rule already has a live ramp schedule, this stores an update action applied on publish; otherwise it stores a create action. No live schedule config changes are applied immediately by this endpoint.
You can build the ramp from a template (templateId) and set the rollback anchor (startState) in the same request — e.g. pull in a template and pass startState: { "coverage": 0 } so a rollback returns the rule to 0%.
| id required | string |
required | integer or "new" (string) |
| ruleId required | string |
| name | string |
| templateId | string |
Array of objects | |
Array of objects | |
Array of objects | |
string or null ISO 8601 date-time, e.g. "2025-06-01T00:00:00Z". Absent or null means start immediately on publish. | |
string or null ISO 8601 date-time, e.g. "2025-07-01T00:00:00Z". The ramp ends at this time. | |
object | |
object | |
boolean or null | |
| environment | string Deprecated |
object The rule state to roll back to (the rollback/jump-to-start anchor). Merged onto the rule's current state, so | |
| revisionTitle | string Title for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| revisionComment | string Comment for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| ignoreWarnings | boolean 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. |
{- "name": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true,
- "environment": "string",
- "startState": {
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}, - "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}, - "warnings": [
- "string"
]
}Clears any pending ramp action for this rule. If a live ramp schedule exists, queues a detach that removes it on publish — the rule will show pendingRamp: "detach". If only a pending create exists, it is removed and pendingRamp is cleared.
| id required | string |
required | integer or "new" (string) |
| ruleId required | string |
| revisionTitle | string Title for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| revisionComment | string Comment for a newly created draft. Only used when version is "new"; ignored for existing revisions. |
| ignoreWarnings | boolean 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. |
{- "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Moves the draft into the pending-review state and notifies reviewers.
Set autoPublishOnApproval to true to publish the revision automatically the moment it is approved (GitHub auto-merge model). This requires the org to have auto-publish-on-approval enabled for the feature and the caller to have publish permission; the auto-publish then executes with the caller's authority.
Set scheduledPublishAt to a future ISO date-time to defer the auto-publish until that date (it still also requires approval when review is required). Use scheduledPublishLockEdits to freeze edits to this draft while the schedule is pending, and scheduledPublishLockOthers to block publishing other drafts of this feature in the meantime.
| id required | string |
| version required | integer |
| comment | string |
| autoPublishOnApproval | boolean |
string or null | |
| scheduledPublishLockEdits | boolean |
| scheduledPublishLockOthers | boolean |
{- "comment": "string",
- "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Schedules the draft to publish on or after scheduledPublishAt. When approval is required, publishing waits until the draft is also approved. Send scheduledPublishAt: null to cancel the schedule.
Set lockEdits to prevent content changes while the schedule is pending; rebasing remains allowed. Set lockOthers to prevent other drafts of this Feature Flag from being published until this schedule runs or is canceled. The caller needs Publish access, and that access is checked again when the schedule runs. A caller with Bypass draft approvals access can schedule an unapproved draft by sending bypassApproval: true. That schedule must be canceled and recreated before it can be changed.
| id required | string |
| version required | integer |
required | string or null When to publish, as an RFC3339 timestamp (e.g. |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
| lockEdits | boolean |
| lockOthers | boolean |
| bypassApproval | boolean |
{- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true,
- "lockEdits": true,
- "lockOthers": true,
- "bypassApproval": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Submits an approve, request-changes, or comment review on the draft. Contributors cannot approve their own drafts when blockSelfApproval is enabled.
When action is approve and the revision has autoPublishOnApproval enabled, the revision is automatically published after approval. The response includes autoPublished: true when this happens. Pass skipAutoPublish: true to approve without triggering auto-publish.
| id required | string |
| version required | integer |
| comment | string |
| action | string Enum: "approve" "request-changes" "comment" |
| skipAutoPublish | boolean |
{- "comment": "string",
- "action": "approve",
- "skipAutoPublish": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}, - "autoPublished": true
}Retracts the review request, returning the revision from pending-review, changes-requested, or approved back to draft. Allowed for any user with draft-management permission on the feature (the same permission required to request review), not only the original requester. Existing review log entries are preserved as audit history but any in-flight reviewer verdicts (Approved / Requested Changes) submitted during this review cycle no longer count — submitting a fresh request-review starts a new cycle.
| id required | string |
| version required | integer |
{ }{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Reviewer retracts their own verdict. The revision status rewinds to the state implied by the remaining active verdicts from other reviewers: any outstanding Requested Changes → changes-requested, else any outstanding Approved → approved, else pending-review. Existing review comments are preserved. If the retraction resolves the revision to approved and auto-publish-on-approval is armed, the revision is published.
| id required | string |
| version required | integer |
{ }{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Returns every log entry for the revision — content edits (rules, default value, rebases), review lifecycle events (review requested, approved, changes requested, recalled, undone), comments, and other audit events — sorted oldest-first.
| id required | string |
| version required | integer |
curl -X GET 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/log' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "log": [
- {
- "id": "string",
- "action": "string",
- "subject": "string",
- "value": "string",
- "timestamp": "2019-08-24T14:15:22Z",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}
}
]
}Author of a Comment, Approved, or Requested Changes log entry can rewrite its comment text. The entry's action and other audit-trail metadata remain immutable; this only mutates value.comment. Other audit events (e.g. Review Requested, system events) are not editable.
| id required | string |
| version required | integer |
| logId required | string |
| comment required | string New comment text. Replaces existing comment text. |
{- "comment": "string"
}{- "status": 200
}Author of a Comment log entry can delete it. Verdict entries (Approved, Requested Changes, Review Requested) and other audit-trail events are immutable. To retract a verdict use /undo-review; to retract a review request use /recall-review.
| id required | string |
| version required | integer |
| logId required | string |
{ }{- "status": 200
}Runs the three-way merge between the draft and the current live version without applying it. Conflicts are granular: each conflicting field gets its own key, and rules conflict individually (rules.<ruleId>, plus rules.order for competing reorders). Pass the returned liveVersion as expectedLiveVersion when rebasing. Also reports rebaseRequired so callers can detect ahead of time whether the publish endpoint will block until the draft is rebased.
| id required | string |
| version required | integer |
curl -X GET 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/merge-status' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "success": true,
- "liveVersion": 0,
- "draftDateUpdated": "2019-08-24T14:15:22Z",
- "conflicts": [
- {
- "name": "string",
- "key": "string",
- "resolved": true,
- "base": "string",
- "live": "string",
- "revision": "string"
}
], - "result": {
- "defaultValue": "string",
- "rules": [
- null
], - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "archived": true,
- "metadata": {
- "releaseType": "string",
- "riskLevel": "string",
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}, - "rebaseRequired": true
}Dry-run of the rebase: runs the same three-way merge with the supplied conflictResolutions and returns every conflict (resolved and unresolved) plus the merged result once all are resolved — without modifying the draft. Use it to iterate on resolutions before committing them via the rebase endpoint.
| id required | string |
| version required | integer |
object Map of conflict key → resolution. Keys come from the returned conflicts: | |
| expectedLiveVersion | integer Optimistic-concurrency guard: the live version the resolutions were authored against (as returned by merge-status or rebase preview). If live has since moved, the request fails with |
| expectedDraftDateUpdated | string Optimistic-concurrency guard for the draft side: the draft's |
| ignoreWarnings | boolean 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. |
{- "conflictResolutions": {
- "property1": "overwrite",
- "property2": "overwrite"
}, - "expectedLiveVersion": 0,
- "expectedDraftDateUpdated": "string",
- "ignoreWarnings": true
}{- "success": true,
- "liveVersion": 0,
- "draftDateUpdated": "2019-08-24T14:15:22Z",
- "conflicts": [
- {
- "name": "string",
- "key": "string",
- "resolved": true,
- "base": "string",
- "live": "string",
- "revision": "string"
}
], - "result": {
- "defaultValue": "string",
- "rules": [
- null
], - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "archived": true,
- "metadata": {
- "releaseType": "string",
- "riskLevel": "string",
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}
}Updates the draft's base revision to match the currently-live revision, applying the draft's changes on top. Supply conflictResolutions to resolve conflicting items individually — including per-rule (rules.<ruleId>) and rule-order (rules.order) conflicts. Supply expectedLiveVersion and/or expectedDraftDateUpdated (both returned by merge-status and rebase preview) to fail fast with 409 if either side changes between conflict review and submission. Unresolved conflicts also respond with 409.
| id required | string |
| version required | integer |
object Map of conflict key → resolution. Keys come from the returned conflicts: | |
| expectedLiveVersion | integer Optimistic-concurrency guard: the live version the resolutions were authored against (as returned by merge-status or rebase preview). If live has since moved, the request fails with |
| expectedDraftDateUpdated | string Optimistic-concurrency guard for the draft side: the draft's |
| ignoreWarnings | boolean 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. |
{- "conflictResolutions": {
- "property1": "overwrite",
- "property2": "overwrite"
}, - "expectedLiveVersion": 0,
- "expectedDraftDateUpdated": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Publishes the draft and makes its changes live. The caller needs Publish access for every affected environment. When approval is required, the draft must be approved unless the caller has Bypass draft approvals access. If the organization requires rebasing, an out-of-date draft must be rebased first; an authorized caller can instead send ignoreWarnings: true to force-publish it. Any pending ramp actions in pendingRamp are applied as part of the same operation. A 422 response lists every blocking gate and the available resolution.
| id required | string |
| version required | integer |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Deprecated Deprecated — pass | |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Deprecated Deprecated — pass |
| comment | string |
| bypassApproval | boolean Deprecated and ignored. Approval is bypassed automatically when the caller has Bypass draft approvals access for this resource or when the organization enables the REST API approval bypass. Otherwise, the revision must be approved before it can be published. |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "comment": "string",
- "bypassApproval": true,
- "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}, - "bypassedGates": [
- {
- "type": "string",
- "outcome": "bypassed",
- "via": "ignoreWarnings"
}
]
}| id required | string |
| version required | integer |
{ }{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Returns a discarded revision to draft status so it can be edited, reviewed, and published. Prior review state is not restored — the draft must go back through review if approvals are required.
| id required | string |
| version required | integer |
{ }{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}| id required | string |
| version required | integer |
| strategy | string Enum: "draft" "publish" |
| comment | string |
| title | string |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "strategy": "draft",
- "comment": "string",
- "title": "string",
- "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "publishedBy": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "defaultValue": "string",
- "defaultValueConfig": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true,
- "config": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}
], - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string"
}
], - "property2": [
- {
- "id": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
], - "autoPublishOnApproval": true,
- "scheduledPublishAt": "2019-08-24T14:15:22Z",
- "scheduledPublishLockEdits": true,
- "scheduledPublishLockOthers": true,
- "scheduledPublishBypassApproval": true,
- "scheduledPublishLastError": "string",
- "autoPublishEnabledBy": "string",
- "scheduledPublishAttempts": 0,
- "scheduledPublishGaveUpAt": "2019-08-24T14:15:22Z",
- "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}, - "bypassedGates": [
- {
- "type": "string",
- "outcome": "bypassed",
- "via": "ignoreWarnings"
}
]
}Control your feature flags programatically.
These are v1 endpoints. New integrations should use the v2 Feature Flags endpoints, which expose a unified per-rule environment scope instead of per-environment rule arrays.
Deprecated. Use GET /v2/features instead.
Returns features with pagination. The skipPagination query parameter is honored only when API_ALLOW_SKIP_PAGINATION is set (self-hosted deployments).
| limit | integer [ 1 .. 100 ] Default: 10 The number of items to return |
| offset | integer >= 0 Default: 0 How many items to skip (use in conjunction with limit for pagination) |
| projectId | string Filter by project id |
| clientKey | string Filter by a SDK connection's client key |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Default: false If true, return all matching items and ignore limit/offset. Self-hosted only. Has no effect unless API_ALLOW_SKIP_PAGINATION is set to true or 1. |
curl -X GET 'https://api.growthbook.io/api/v1/features' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "features": [
- {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "valueType": "boolean",
- "defaultValue": "string",
- "baseConfig": "string",
- "defaultValueConfig": "string",
- "tags": [
- "string"
], - "environments": {
- "property1": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": null,
- "timestamp": null
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": null,
- "savedGroups": [ ]
}
], - "prerequisites": [
- {
- "id": null,
- "condition": null
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}, - "property2": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": null,
- "timestamp": null
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": null,
- "savedGroups": [ ]
}
], - "prerequisites": [
- {
- "id": null,
- "condition": null
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "id": "string",
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "createdBy": "string",
- "publishedBy": "string"
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}Deprecated. Use POST /v2/features instead.
| id required | string non-empty A unique key name for the feature. Feature keys can only include letters, numbers, hyphens, and underscores. |
| archived | boolean |
| description | string <= 10000 characters Description of the feature |
| owner | string 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. Optional when authenticating with a Personal Access Token (PAT): when omitted, the owner defaults to the PAT's user. Required when authenticating with an organization secret API key (which has no associated user): omitting it fails with a 400. |
| project | string An associated project ID |
| targetingAllProjects | boolean Make this feature discoverable in — and served to — every project, beyond its primary |
| targetingProjects | Array of strings Secondary project IDs this feature is targeted in and served to, beyond its primary |
| valueType required | string Enum: "boolean" "string" "number" "json" The data type of the feature payload. Boolean by default. |
| defaultValue required | string Default value when feature is enabled. Type must match |
string or null Key of the config backing this flag ("Config mode"). Requires | |
| tags | Array of strings List of associated tags |
object A dictionary of environments that are enabled for this feature. Keys supply the names of environments. Environments belong to organization and are not specified will be disabled by default. | |
| prerequisites | Array of strings Feature IDs. Each feature must evaluate to |
| jsonSchema | string Use JSON schema to validate the payload of a JSON-type feature value (enterprise only). |
object | |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "id": "string",
- "archived": true,
- "description": "string",
- "owner": "string",
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "valueType": "boolean",
- "defaultValue": "string",
- "baseConfig": "string",
- "tags": [
- "string"
], - "environments": {
- "property1": {
- "enabled": true,
- "rules": [
- {
- "allProjects": true,
- "projects": [
- "string"
], - "description": "string",
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "id": "string",
- "enabled": true,
- "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "rules": [
- {
- "allProjects": true,
- "projects": [
- "string"
], - "description": "string",
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "id": "string",
- "enabled": true,
- "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}, - "property2": {
- "enabled": true,
- "rules": [
- {
- "allProjects": true,
- "projects": [
- "string"
], - "description": "string",
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "id": "string",
- "enabled": true,
- "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "rules": [
- {
- "allProjects": true,
- "projects": [
- "string"
], - "description": "string",
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "id": "string",
- "enabled": true,
- "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "jsonSchema": "string",
- "customFields": {
- "property1": "string",
- "property2": "string"
}, - "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "feature": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "valueType": "boolean",
- "defaultValue": "string",
- "baseConfig": "string",
- "defaultValueConfig": "string",
- "tags": [
- "string"
], - "environments": {
- "property1": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}, - "property2": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "id": "string",
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "createdBy": "string",
- "publishedBy": "string"
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}
}Deprecated. Use GET /v2/features/:id instead.
| id required | string The id of the requested resource |
| withRevisions | string Enum: "all" "drafts" "published" "none" Also return feature revisions (all, draft, or published statuses) |
curl -X GET 'https://api.growthbook.io/api/v1/features/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "feature": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "valueType": "boolean",
- "defaultValue": "string",
- "baseConfig": "string",
- "defaultValueConfig": "string",
- "tags": [
- "string"
], - "environments": {
- "property1": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}, - "property2": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "id": "string",
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "createdBy": "string",
- "publishedBy": "string"
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}, - "revisions": [
- {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": null,
- "targetId": null,
- "patch": { }
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
]
}
}Deprecated. Use POST /v2/features/:id instead.
Updates the Feature Flag and immediately publishes a new revision. The caller needs Edit access in the Feature Flag's Project and Publish access for every affected environment. When approval is required, use the revision endpoints instead, unless the caller can bypass draft approvals.
| id required | string The id of the requested resource |
| description | string <= 10000 characters Description of the feature |
| archived | boolean |
| project | string An associated project ID |
| targetingAllProjects | boolean Make this feature discoverable in — and served to — every project, beyond its primary |
| targetingProjects | Array of strings Secondary project IDs this feature is targeted in and served to, beyond its primary |
| owner | string 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. |
| defaultValue | string |
string or null The config backing this flag ("Config mode"), fixed at creation. Cannot be changed by an update — resend the current value or omit it; a different value (or null to detach) is rejected. | |
| tags | Array of strings List of associated tags. Will override tags completely with submitted list |
object | |
| prerequisites | Array of strings Feature IDs. Each feature must evaluate to |
| jsonSchema | string Use JSON schema to validate the payload of a JSON-type feature value (enterprise only). |
object | |
object or null Holdout to assign this feature to. Pass | |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "description": "string",
- "archived": true,
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "owner": "string",
- "defaultValue": "string",
- "baseConfig": "string",
- "tags": [
- "string"
], - "environments": {
- "property1": {
- "enabled": true,
- "rules": [
- {
- "allProjects": true,
- "projects": [
- "string"
], - "description": "string",
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "id": "string",
- "enabled": true,
- "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "rules": [
- {
- "allProjects": true,
- "projects": [
- "string"
], - "description": "string",
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "id": "string",
- "enabled": true,
- "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}, - "property2": {
- "enabled": true,
- "rules": [
- {
- "allProjects": true,
- "projects": [
- "string"
], - "description": "string",
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "id": "string",
- "enabled": true,
- "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "rules": [
- {
- "allProjects": true,
- "projects": [
- "string"
], - "description": "string",
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "id": "string",
- "enabled": true,
- "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "jsonSchema": "string",
- "customFields": {
- "property1": "string",
- "property2": "string"
}, - "holdout": {
- "id": "string",
- "value": "string"
}, - "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "feature": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "valueType": "boolean",
- "defaultValue": "string",
- "baseConfig": "string",
- "defaultValueConfig": "string",
- "tags": [
- "string"
], - "environments": {
- "property1": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}, - "property2": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "id": "string",
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "createdBy": "string",
- "publishedBy": "string"
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}, - "bypassedGates": [
- {
- "type": "string",
- "outcome": "bypassed",
- "via": "ignoreWarnings"
}
]
}Deprecated. Use DELETE /v2/features/:id instead.
Permanently deletes a Feature Flag and all of its revisions. The caller needs Archive & delete access. Deleting a live Feature Flag also requires Publish access for every environment where it is enabled and the organization setting "REST API always bypasses approval requirements". Otherwise, archive the Feature Flag before deleting it.
| id required | string The id of the requested resource |
curl -X DELETE 'https://api.growthbook.io/api/v1/features/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "feature-123"
}Deprecated. Use POST /v2/features/:id/toggle instead.
Enables or disables a Feature Flag in one or more environments and immediately publishes the change. The caller needs Publish access for every environment in the request. When approval is required, use a draft revision instead, unless the caller can bypass draft approvals.
| id required | string The id of the requested resource |
| reason | string |
required | object |
{- "reason": "string",
- "environments": {
- "property1": true,
- "property2": true
}
}{- "feature": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "valueType": "boolean",
- "defaultValue": "string",
- "baseConfig": "string",
- "defaultValueConfig": "string",
- "tags": [
- "string"
], - "environments": {
- "property1": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}, - "property2": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "id": "string",
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "createdBy": "string",
- "publishedBy": "string"
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}, - "bypassedGates": [
- {
- "type": "string",
- "outcome": "bypassed",
- "via": "ignoreWarnings"
}
]
}Deprecated. Use POST /v2/features/:id/revert instead.
Restores a previously published revision and immediately publishes the result as a new revision. The caller needs Revert access for every affected environment. When approval is required, the request is allowed only if the caller holds the FlagsBypassApprovals policy, or the organization enables either "REST API always bypasses approval requirements" or "Allow reverts without approval".
If the restored values no longer match the Feature Flag's current value type or JSON schema, the API returns 422 with warnings. Send "ignoreWarnings": true to acknowledge those warnings and continue.
| id required | string The id of the requested resource |
| revision required | number |
| comment | string |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "revision": 0,
- "comment": "string",
- "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "feature": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "project": "string",
- "targetingAllProjects": true,
- "targetingProjects": [
- "string"
], - "valueType": "boolean",
- "defaultValue": "string",
- "baseConfig": "string",
- "defaultValueConfig": "string",
- "tags": [
- "string"
], - "environments": {
- "property1": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}, - "property2": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "id": "string",
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "createdBy": "string",
- "publishedBy": "string"
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}, - "bypassedGates": [
- {
- "type": "string",
- "outcome": "bypassed",
- "via": "ignoreWarnings"
}
]
}Deprecated. Use GET /v2/feature-keys instead.
| projectId | string Filter by project id |
curl -X GET 'https://api.growthbook.io/api/v1/feature-keys' \ -H 'Authorization: Bearer YOUR_API_KEY'
[- "string"
]Deprecated. Use GET /v2/stale-features instead.
| ids required | string Comma-separated list of feature IDs (URL-encoded if needed). Example: |
curl -X GET 'https://api.growthbook.io/api/v1/stale-features' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "features": {
- "property1": {
- "featureId": "string",
- "isStale": true,
- "staleReason": "never-stale",
- "neverStale": true,
- "staleByEnv": {
- "property1": {
- "isStale": true,
- "reason": "no-rules",
- "evaluatesTo": "string"
}, - "property2": {
- "isStale": true,
- "reason": "no-rules",
- "evaluatesTo": "string"
}
}
}, - "property2": {
- "featureId": "string",
- "isStale": true,
- "staleReason": "never-stale",
- "neverStale": true,
- "staleByEnv": {
- "property1": {
- "isStale": true,
- "reason": "no-rules",
- "evaluatesTo": "string"
}, - "property2": {
- "isStale": true,
- "reason": "no-rules",
- "evaluatesTo": "string"
}
}
}
}
}Draft revisions for feature flags, including rules, scheduling, and approval workflows.
These are v1 endpoints. New integrations should use the v2 Feature Revisions endpoints.
Deprecated. Use GET /v2/feature-revisions instead.
Returns a paginated list of feature revisions across all features in the organization. Optionally filtered by feature, status, author, and/or the calling user's involvement. Results are sorted newest-first.
| limit | integer [ 1 .. 100 ] Default: 10 The number of items to return |
| offset | integer >= 0 Default: 0 How many items to skip (use in conjunction with limit for pagination) |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Default: false If true, return all matching items and ignore limit/offset. Self-hosted only. Has no effect unless API_ALLOW_SKIP_PAGINATION is set to true or 1. | |
| featureId | string |
string or Array of strings Filter by revision status. Single value, comma-separated list, repeated params (?status=draft&status=approved), or | |
| author | string |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean If true, return only revisions authored by or contributed to by the calling user. Requires a user-scoped API key. Mutually exclusive with |
curl -X GET 'https://api.growthbook.io/api/v1/revisions' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "revisions": [
- {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": null,
- "ids": [ ]
}
], - "prerequisites": [
- {
- "id": null,
- "condition": null
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": null,
- "coverage": null,
- "condition": null,
- "savedGroups": null,
- "prerequisites": null,
- "allEnvironments": null,
- "environments": null,
- "force": null,
- "enabled": null
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": null,
- "ids": [ ]
}
], - "prerequisites": [
- {
- "id": null,
- "condition": null
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}Deprecated. Use GET /v2/features/:id/revisions instead.
Returns a paginated list of revisions for this feature, sorted newest-first. Optionally filtered by status and/or author.
| id required | string The id of the requested resource |
| limit | integer [ 1 .. 100 ] Default: 10 The number of items to return |
| offset | integer >= 0 Default: 0 How many items to skip (use in conjunction with limit for pagination) |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean Default: false If true, return all matching items and ignore limit/offset. Self-hosted only. Has no effect unless API_ALLOW_SKIP_PAGINATION is set to true or 1. | |
string or Array of strings Filter by revision status. Single value, comma-separated list, repeated params (?status=draft&status=approved), or | |
| author | string |
curl -X GET 'https://api.growthbook.io/api/v1/features/abc123/revisions' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "revisions": [
- {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": null,
- "ids": [ ]
}
], - "prerequisites": [
- {
- "id": null,
- "condition": null
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": null,
- "coverage": null,
- "condition": null,
- "savedGroups": null,
- "prerequisites": null,
- "allEnvironments": null,
- "environments": null,
- "force": null,
- "enabled": null
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": null,
- "ids": [ ]
}
], - "prerequisites": [
- {
- "id": null,
- "condition": null
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}Deprecated. Use POST /v2/features/:id/revisions instead.
Creates a new draft revision branched from the current live revision. A feature can have multiple concurrent drafts; use this to start an isolated line of edits.
| id required | string |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean If the organization caps concurrent drafts per feature ( |
| comment | string |
| title | string |
| ignoreWarnings | boolean 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. |
{- "comment": "string",
- "title": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use GET /v2/features/:id/revisions/latest instead.
Returns the most recently updated draft revision for the feature. Returns 404 if there is no active draft. Pass mine=true to return the most recent draft authored by or contributed to by the calling user (requires a user-scoped API key).
| id required | string |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean If true, return only the most recent active draft authored by or contributed to by the calling user. Requires a user-scoped API key. |
curl -X GET 'https://api.growthbook.io/api/v1/features/{id}/revisions/latest' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use GET /v2/features/:id/revisions/:version instead.
Returns the revision at the specified version for this feature. Use GET /features/{id}/revisions/latest for the most recent active draft.
| id required | string |
| version required | integer |
curl -X GET 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use PUT /v2/features/:id/revisions/:version/metadata instead.
Updates draft-level metadata (comment, title) and/or feature-level metadata (owner, project, tags, customFields, jsonSchema, etc.). Merge semantics: omitted fields are left unchanged; any provided field replaces the current value (pass an empty string/array/object to clear). Feature metadata changes are staged on the revision and applied to the feature on publish. Changing project requires publish permission on both the old and new project.
| id required | string |
required | integer or "new" (string) |
| comment | string |
| title | string |
| description | string |
| owner | string 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. |
| project | string |
| tags | Array of strings |
| neverStale | boolean |
object | |
object | |
| ignoreWarnings | boolean 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. |
{- "comment": "string",
- "title": "string",
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "customFields": {
- "property1": null,
- "property2": null
}, - "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "type": "object",
- "fields": [
- {
- "key": "string",
- "type": "integer",
- "required": true,
- "default": "string",
- "description": "string",
- "enum": [
- "string"
], - "min": 0,
- "max": 0,
- "nullable": true,
- "jsonSchema": "string"
}
], - "additionalProperties": true,
- "invariants": [
- {
- "name": "string",
- "rule": "string",
- "message": "string"
}
]
}, - "date": null,
- "enabled": true
}, - "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use PUT /v2/features/:id/revisions/:version/default-value instead.
Replaces the feature's default value for this revision. The value must be a string representation matching the feature's value type (e.g. "true" for booleans, 42 for numbers, a JSON string for JSON features).
| id required | string |
required | integer or "new" (string) |
| defaultValue required | string |
| revisionTitle | string |
| revisionComment | string |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "defaultValue": "string",
- "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use PUT /v2/features/:id/revisions/:version/prerequisites instead.
Replaces the feature's prerequisite list for this revision. Each prerequisite condition is evaluated against { value: <prereq-flag-value> } at SDK eval time — use value as the condition key.
| id required | string |
required | integer or "new" (string) |
required | Array of objects |
| revisionTitle | string |
| revisionComment | string |
| ignoreWarnings | boolean 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. |
{- "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use PUT /v2/features/:id/revisions/:version/holdout instead.
Sets (or clears, via holdout: null) the holdout experiment bound to the feature. Holdout linkage side-effects (updating the holdout's linked feature list) are applied on publish.
| id required | string |
required | integer or "new" (string) |
required | object or null |
| revisionTitle | string |
| revisionComment | string |
| ignoreWarnings | boolean 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. |
{- "holdout": {
- "id": "string",
- "value": "string"
}, - "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use PUT /v2/features/:id/revisions/:version/archive instead.
Sets whether the feature is archived. Archived features are excluded from SDK payloads on publish.
| id required | string |
required | integer or "new" (string) |
| archived required | boolean |
| revisionTitle | string |
| revisionComment | string |
| ignoreWarnings | boolean 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. |
{- "archived": true,
- "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use POST /v2/features/:id/revisions/:version/toggle instead.
Sets whether the feature is enabled in the given environment as part of the draft. Takes effect on publish.
| id required | string |
required | integer or "new" (string) |
| environment required | string |
| enabled required | boolean |
| revisionTitle | string |
| revisionComment | string |
| ignoreWarnings | boolean 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. |
{- "environment": "string",
- "enabled": true,
- "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use POST /v2/features/:id/revisions/:version/rules instead, which accepts rules with unified allEnvironments/environments scope fields instead of a per-environment environment parameter.
Appends a new rule to the end of the rule list for the given environment. A rule.type of force, rollout, experiment-ref, or safe-rollout determines the accepted shape. Use rampSchedule for ramp configuration or schedule for a simple start/end window; if both are provided, rampSchedule wins.
| id required | string |
required | integer or "new" (string) |
| environment required | string |
required | object or object or object |
object | |
object | |
| revisionTitle | string |
| revisionComment | string |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "environment": "string",
- "rule": {
- "description": "string",
- "enabled": true,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "scheduleRules": [
- {
- "timestamp": "string",
- "enabled": true
}
], - "scheduleType": "none",
- "type": "experiment-ref",
- "experimentId": "string",
- "variations": [
- {
- "variationId": "string",
- "value": "string"
}
], - "sparse": true
}, - "rampSchedule": {
- "name": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}, - "schedule": {
- "startDate": "string",
- "endDate": "string"
}, - "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use PUT /v2/features/:id/revisions/:version/rules/:ruleId instead, which locates rules by ruleId in the flat array without an environment parameter.
Patches fields on an existing rule. The rule type cannot be changed — to convert types, delete and re-add. Fields that don't apply to the current rule type are rejected.
| id required | string |
required | integer or "new" (string) |
| ruleId required | string |
| environment required | string |
required | object |
object | |
object | |
| revisionTitle | string |
| revisionComment | string |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "environment": "string",
- "rule": {
- "description": "string",
- "enabled": true,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "scheduleRules": [
- {
- "timestamp": "string",
- "enabled": true
}
], - "scheduleType": "none",
- "type": "force",
- "value": "string",
- "sparse": true,
- "coverage": 1,
- "hashAttribute": "string",
- "seed": "string",
- "hashVersion": 1,
- "experimentId": "string",
- "variations": [
- {
- "variationId": "string",
- "value": "string"
}
], - "controlValue": "string",
- "variationValue": "string"
}, - "rampSchedule": {
- "name": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}, - "schedule": {
- "startDate": "string",
- "endDate": "string"
}, - "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use DELETE /v2/features/:id/revisions/:version/rules/:ruleId instead, which removes the rule from the flat array without an environment parameter.
Removes the rule from the specified environment. Any pending ramp actions on the draft for this rule are also cleared.
| id required | string |
required | integer or "new" (string) |
| ruleId required | string |
| environment required | string |
| revisionTitle | string |
| revisionComment | string |
| ignoreWarnings | boolean 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. |
{- "environment": "string",
- "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use POST /v2/features/:id/revisions/:version/rules/reorder instead, which reorders the global flat rule array without an environment parameter.
Replaces the rule order for the environment. ruleIds must contain exactly the set of existing rule IDs in that environment — no additions, omissions, or duplicates.
| id required | string |
required | integer or "new" (string) |
| environment required | string |
| ruleIds required | Array of strings |
| revisionTitle | string |
| revisionComment | string |
| ignoreWarnings | boolean 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. |
{- "environment": "string",
- "ruleIds": [
- "string"
], - "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use PUT /v2/features/:id/revisions/:version/rules/:ruleId/ramp-schedule instead.
Queues a revision-controlled ramp action for this rule. If the rule already has a live ramp schedule, this stores an update action applied on publish; otherwise it stores a create action. No live schedule config changes are applied immediately by this endpoint.
| id required | string |
required | integer or "new" (string) |
| ruleId required | string |
| name | string |
| templateId | string |
Array of objects | |
Array of objects | |
Array of objects | |
string or null ISO 8601 date-time, e.g. "2025-06-01T00:00:00Z". Absent or null means start immediately on publish. | |
string or null ISO 8601 date-time, e.g. "2025-07-01T00:00:00Z". The ramp ends at this time. | |
object | |
object | |
boolean or null | |
| environment | string Deprecated |
| revisionTitle | string |
| revisionComment | string |
| ignoreWarnings | boolean 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. |
{- "name": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true,
- "environment": "string",
- "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use DELETE /v2/features/:id/revisions/:version/rules/:ruleId/ramp-schedule instead.
Removes a pending ramp schedule attached by the draft. If the rule currently has a live ramp schedule, a detach action is queued and applied at publish time.
| id required | string |
required | integer or "new" (string) |
| ruleId required | string |
| environment | string Deprecated |
| revisionTitle | string |
| revisionComment | string |
| ignoreWarnings | boolean 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. |
{- "environment": "string",
- "revisionTitle": "string",
- "revisionComment": "string",
- "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use POST /v2/features/:id/revisions/:version/request-review instead.
Moves the draft into the pending-review state and notifies reviewers.
| id required | string |
| version required | integer |
| comment | string |
| autoPublishOnApproval | boolean |
{- "comment": "string",
- "autoPublishOnApproval": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use POST /v2/features/:id/revisions/:version/submit-review instead.
Submits an approve, request-changes, or comment review on the draft. Contributors cannot approve their own drafts, but may submit comments or request changes.
When action is approve and the revision has autoPublishOnApproval enabled, the revision is automatically published after approval. Pass skipAutoPublish: true to approve without triggering auto-publish.
| id required | string |
| version required | integer |
| comment | string |
| action | string Enum: "approve" "request-changes" "comment" |
| skipAutoPublish | boolean |
{- "comment": "string",
- "action": "approve",
- "skipAutoPublish": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}, - "autoPublished": true
}Deprecated. Use GET /v2/features/:id/revisions/:version/merge-status instead.
Runs a dry-run merge of the draft against the current live revision and returns any conflicts. Use this before publishing to preview changes and detect conflicting edits.
| id required | string |
| version required | integer |
curl -X GET 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/merge-status' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "success": true,
- "liveVersion": 0,
- "draftDateUpdated": "2019-08-24T14:15:22Z",
- "conflicts": [
- {
- "name": "string",
- "key": "string",
- "resolved": true,
- "base": "string",
- "live": "string",
- "revision": "string"
}
], - "rebaseRequired": true,
- "result": {
- "defaultValue": "string",
- "rules": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "allProjects": true,
- "projects": [
- "string"
], - "enabled": true,
- "scheduleRules": [
- {
- "timestamp": "string",
- "enabled": true
}
], - "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "scheduleType": "none",
- "type": "force",
- "value": "string",
- "sparse": true
}
], - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "archived": true,
- "metadata": {
- "releaseType": "string",
- "riskLevel": "string",
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}
}Deprecated. Use POST /v2/features/:id/revisions/:version/rebase instead.
Updates the draft's base revision to match the currently-live revision, applying the draft's changes on top. Supply conflictResolutions to resolve any conflicting fields.
Conflict key format changed for v1 clients. The per-rule envName.ruleId keys used by older clients are no longer recognized. Valid keys: defaultValue, prerequisites, archived, holdout, environmentsEnabled.<env>, metadata.<field>, rules.<ruleId>, rules.order, and the blanket rules (applies one strategy to all rule-level conflicts). Unrecognized keys are ignored; unresolved conflicts respond with 409.
| id required | string |
| version required | integer |
object | |
| ignoreWarnings | boolean 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. |
{- "conflictResolutions": {
- "property1": "overwrite",
- "property2": "overwrite"
}, - "ignoreWarnings": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use POST /v2/features/:id/revisions/:version/publish instead.
Publishes the draft and makes its changes live. The caller needs Publish access for every affected environment. When approval is required, the draft must be approved unless the caller has Bypass draft approvals access.
| id required | string |
| version required | integer |
| comment | string |
| bypassApproval | boolean Deprecated and ignored. Approval is bypassed automatically when the caller has Bypass draft approvals access for this resource or when the organization enables the REST API approval bypass. Otherwise, the revision must be approved before it can be published. |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "comment": "string",
- "bypassApproval": true,
- "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}, - "bypassedGates": [
- {
- "type": "string",
- "outcome": "bypassed",
- "via": "ignoreWarnings"
}
]
}Deprecated. Use POST /v2/features/:id/revisions/:version/discard instead.
Permanently discards a draft revision. Only drafts (never published revisions) can be discarded. Any pending ramp actions staged on the draft are dropped.
| id required | string |
| version required | integer |
{ }{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}
}Deprecated. Use POST /v2/features/:id/revisions/:version/revert instead.
Creates a new draft (or immediately publishes) whose content matches the specified historical revision.
| id required | string |
| version required | integer |
| strategy | string Enum: "draft" "publish" |
| comment | string |
| title | string |
| ignoreWarnings | boolean 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. |
| skipSchemaValidation | boolean 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 | boolean Set to true to publish despite a Custom Hook rejection. This does not bypass schema validation; use |
{- "strategy": "draft",
- "comment": "string",
- "title": "string",
- "ignoreWarnings": true,
- "skipSchemaValidation": true,
- "skipHooks": true
}{- "revision": {
- "id": "string",
- "featureId": "string",
- "baseVersion": 0,
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "status": "string",
- "createdBy": "string",
- "publishedBy": "string",
- "defaultValue": "string",
- "rules": {
- "property1": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
], - "property2": [
- {
- "description": "string",
- "condition": "string",
- "id": "string",
- "enabled": true,
- "scheduleRules": [
- {
- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}
], - "scheduleType": "none",
- "rampScheduleId": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allProjects": true,
- "projects": [
- "string"
], - "type": "force",
- "value": "string",
- "sparse": true
}
]
}, - "definitions": {
- "property1": "string",
- "property2": "string"
}, - "environmentsEnabled": {
- "property1": true,
- "property2": true
}, - "envPrerequisites": {
- "property1": [
- {
- "id": "string",
- "condition": "string"
}
], - "property2": [
- {
- "id": "string",
- "condition": "string"
}
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "metadata": {
- "description": "string",
- "owner": "string",
- "project": "string",
- "tags": [
- "string"
], - "neverStale": true,
- "valueType": "string",
- "jsonSchema": {
- "schemaType": "schema",
- "schema": "string",
- "simple": {
- "property1": null,
- "property2": null
}, - "date": "2019-08-24T14:15:22Z",
- "enabled": true
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "baseConfig": "string"
}, - "rampActions": [
- {
- "mode": "create",
- "name": "string",
- "environment": "string",
- "templateId": "string",
- "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- { }
], - "prerequisites": [
- { }
], - "allEnvironments": true,
- "environments": [
- null
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "ruleId": "string",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "lockdownConfig": {
- "mode": "none"
}, - "requiresStartApproval": true
}
]
}, - "bypassedGates": [
- {
- "type": "string",
- "outcome": "bypassed",
- "via": "ignoreWarnings"
}
]
}Multi-step rollout schedules that gradually increase feature rule traffic over time, with optional real-time monitoring. Each step supports interval timers, approval gates, and hold conditions. Monitored steps are backed by a live analysis experiment that can automatically hold, roll back, or advance the ramp based on guardrail and signal metric health.
Returns all ramp schedules for the organization, with optional filters.
| limit | integer [ 1 .. 100 ] Default: 10 The number of items to return |
| offset | integer >= 0 Default: 0 How many items to skip (use in conjunction with limit for pagination) |
| featureId | string |
| status | string Enum: "pending" "ready" "running" "paused" "completed" "rolled-back" Filter by schedule status |
curl -X GET 'https://api.growthbook.io/api/v1/ramp-schedules' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0,
- "rampSchedules": [
- {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": null,
- "ids": [ ]
}
], - "prerequisites": [
- {
- "id": null,
- "condition": null
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
]
}| name | string |
| featureId | string |
| ruleId | string |
| environment | string |
Array of objects | |
Array of objects | |
Array of objects | |
string or null | |
string or null | |
boolean or null 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. | |
object or null | |
object | |
| experimentHealthAction | string Enum: "rollback" "hold" "warn" |
| templateId | string |
{- "name": "string",
- "featureId": "string",
- "ruleId": "string",
- "environment": "string",
- "steps": [
- {
- "interval": 0,
- "actions": [ ],
- "approvalNotes": "string",
- "monitored": false,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "monitoringMode": "auto",
- "autoUpdate": true,
- "autoRollback": true,
- "updateScheduleMinutes": 10,
- "srmAction": "warn",
- "noTrafficAction": "warn",
- "multipleExposureAction": "warn"
}, - "lockdownConfig": {
- "mode": "none"
}, - "experimentHealthAction": "rollback",
- "templateId": "string"
}{- "rampSchedule": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
}Transitions the schedule from ready to running. The schedule must have
at least one target rule attached — a schedule created without targets starts
in pending and moves to ready automatically when the first target is
attached via /actions/add-target.
The first step is processed immediately: interval-free steps advance right
away; interval-based steps arm a timer. Once started, use /actions/pause
to halt, /actions/advance to skip steps, or /actions/rollback to revert.
| id required | string |
curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/start' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "rampSchedule": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
}Pauses a running schedule. Traffic percentages are frozen at their current
values; no step advancement happens while paused. Records pausedAt so that
interval timing can be correctly offset when the schedule resumes.
Use /actions/resume to continue from the same step, or /actions/rollback
to revert all rule effects entirely.
| id required | string |
curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/pause' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "rampSchedule": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
}Resumes a paused schedule without moving the current step. Timing anchors
(phaseStartedAt, startedAt) are shifted forward by the pause duration so
that interval-based steps continue from where they left off rather than
restarting their clock.
Does not advance to the next step — use /actions/advance if you also
want to skip the remainder of the current step.
| id required | string |
curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/resume' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "rampSchedule": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
}Rewinds all ramp effects (rule coverage, targeting, etc.) to the starting
position and lands in terminal rolled-back status. The reason is persisted
as lastRollbackReason (prefixed with Manual: ) and surfaced in the UI.
This is also the correct response to a monitoring alert — when the
/status endpoint returns decision: "rollback" or signals include
guardrail-failing, call this endpoint with a descriptive reason.
From this terminal state the schedule can be brought back to ready via
/actions/restart, after which /actions/start will run it again.
| id required | string |
| reason | string <= 200 characters |
{- "reason": "string"
}{- "rampSchedule": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
}Brings a rolled-back (or completed) schedule back into running in a
single call. Any prior start-on-date delays are cleared (startedAt,
phaseStartedAt, etc. are reset), currentStepIndex is normalised to
-1, then the same logic as /actions/start runs to apply start actions
and advance through immediately-eligible steps.
The rollback that preceded this already rewound rule effects to the
starting position; this endpoint does not re-execute that rewind for
rolled-back schedules. completed schedules are defensively rewound
first.
| id required | string |
curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/restart' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "rampSchedule": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
}Teleports the schedule to targetStepIndex (forward or backward) and leaves
it paused. Resets timing anchors so the destination step's interval starts
fresh when the schedule is next resumed or started.
Pass -1 to return to the pre-start position without applying rollback rule
patches — useful for resetting a non-started schedule. For a full traffic
revert, use /actions/rollback instead.
Accepts any non-terminal schedule status.
| id required | string |
| targetStepIndex required | integer >= -1 Zero-based index of the step to jump to; -1 = pre-start |
{- "targetStepIndex": -1
}{- "rampSchedule": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
}Immediately applies the schedule's end-state rule patches (the equivalent
of what would happen after the last step advances normally) and marks the
schedule as completed, skipping any remaining steps.
Pass disableRule: true to also disable the linked rule (equivalent to
the cutoff-date-driven completion).
| id required | string |
| disableRule | boolean |
{- "disableRule": true
}{- "rampSchedule": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
}Clears whichever approval gate is currently pending on the schedule:
requiresStartApproval sits in ready at step -1 with its rule disabled (zero traffic). Approving starts the ramp (or, if a future startDate is set, arms it to start on that date).holdConditions.requiresApproval gate on the current step of a running schedule.For a step gate, approval is the final gate: it can only be granted once every other hold has cleared. This endpoint rejects the request (400) if the step is not yet ready — while the interval timer is still counting down, or (for monitored steps) before fresh analysis is available or while a guardrail/health signal is failing. Poll /status and call this once it reports awaiting approval.
Non-monitored steps: once the interval has elapsed, approving clears the last hold and advances immediately, chaining through subsequent instant steps.
Monitored steps: approving clears the last hold and the agenda advances on its next tick (re-checking analysis first).
Different from /actions/advance: approve-step works within the normal evaluation flow and refuses to skip ahead of the interval or any other unmet gate. Use /actions/advance to bypass all remaining holds.
Requires update + publish (start gate) or review (step gate) permissions for the associated feature.
| id required | string |
curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/approve-step' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "rampSchedule": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
}Attaches an additional feature rule to this ramp schedule. The ruleId
must identify a rule that is already published and must not already be
controlled by another schedule. environment is accepted for backward
compatibility with pre-v2 ramps but is deprecated and no longer required.
| id required | string |
| featureId required | string |
| ruleId required | string |
| environment | string Deprecated Deprecated pre-v2 disambiguator; ignored on v2 rules where |
{- "featureId": "string",
- "ruleId": "string",
- "environment": "string"
}{- "rampSchedule": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
}Detaches a target rule from this ramp schedule. Identify the target either
by its targetId or by the [ruleId, environment] pair.
If this is the last target on the schedule, the schedule is deleted entirely
and the response contains deleted: true instead of rampSchedule.
| id required | string |
| targetId | string Target ID (from the targets array) |
| ruleId | string Rule ID — use as an alternative to targetId |
| environment | string Deprecated Deprecated pre-v2 disambiguator. Optional when used with ruleId; omit on v2 ramps. |
{- "targetId": "string",
- "ruleId": "string",
- "environment": "string"
}{- "deleted": true,
- "rampScheduleId": "string"
}Moves the schedule to the next step, bypassing all hold conditions —
interval, min sample size, and monitoring signal holds. Accepts running
or paused status; if paused, the schedule is implicitly resumed (timing
anchors recalculated) before the step moves.
Approval gate: if the current step has an unsatisfied
holdConditions.requiresApproval gate, this endpoint returns 409 by
default. Either call /actions/approve-step first (recommended), or pass
force: true to override the approval gate. force: true requires
FlagsBypassApprovals permission and is logged in the audit trail.
Two common uses:
decision: "hold", interval elapsed): the
step timer has completed but a signal or guardrail is flagging concern. Use
this after reviewing the /status health summary and deciding to accept the
risk and proceed.When to use other actions instead:
/actions/resume — restores a paused schedule without moving the step./actions/approve-step — clears only the approval gate; other conditions
still resolve naturally./actions/rollback — preferred response when decision: "rollback" or
signals include guardrail-failing.| id required | string |
| reason | string Reason for advancing |
| force | boolean Bypass a pending approval gate on the current step. Requires admin-level ( |
{- "reason": "string",
- "force": true
}{- "rampSchedule": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
}Returns a real-time status summary for a ramp schedule: current step, overall health decision, traffic quality, and per-metric effect sizes. Designed for CI pipeline integrations and monitoring dashboards that need a single call to determine whether it is safe to advance.
| id required | string |
curl -X GET 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/status' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "id": "string",
- "status": "string",
- "currentStepIndex": 0,
- "totalSteps": 0,
- "lockdownMode": "string",
- "startedAt": "string",
- "lastRollbackAt": "string",
- "lastRollbackReason": "string",
- "monitoring": {
- "enabled": true,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "currentStepMonitored": true,
- "nextSnapshotAt": "string",
- "safeRolloutId": "string"
}, - "healthSummary": {
- "safeToAdvance": true,
- "decision": "advance",
- "decisionReason": "string",
- "signals": [
- "guardrail-failing"
], - "snapshotAt": "string",
- "traffic": {
- "totalUsers": 0,
- "variationUnits": [
- 0
], - "srm": {
- "pValue": 0,
- "status": "ok"
}, - "multipleExposures": {
- "count": 0,
- "percent": 0,
- "status": "ok"
}
}, - "metrics": {
- "property1": {
- "id": "string",
- "name": "string",
- "status": "failing",
- "role": "guardrail",
- "relativeLift": 0,
- "absoluteLift": 0,
- "ciHarmBound": 0,
- "pValue": 0
}, - "property2": {
- "id": "string",
- "name": "string",
- "status": "failing",
- "role": "guardrail",
- "relativeLift": 0,
- "absoluteLift": 0,
- "ciHarmBound": 0,
- "pValue": 0
}
}
}
}Sets the user preference for ramp monitoring updates. In manual mode, automatic snapshot scheduling is disabled and operators must click Update manually. In auto mode, snapshots run automatically when the current step is monitored and the ramp is running.
| id required | string |
| monitoringMode required | string Enum: "auto" "manual"
|
{- "monitoringMode": "auto"
}{- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}Deprecated alias for setting monitoring mode. Prefer /actions/set-monitoring-mode.
| id required | string |
| enabled required | boolean Legacy alias for monitoring mode ( |
{- "enabled": true
}{- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}Replaces the monitoring configuration. Health-action thresholds (srmAction, noTrafficAction, etc.) can be updated at any time.
Once a linked SafeRollout has started, datasourceId, exposureQueryId, the metric IDs and the snapshot cadence are all locked — stop and recreate the schedule to change the data source.
Changes to guardrail or signal metric IDs take effect on the next analysis run.
| id required | string |
| datasourceId required | string |
| exposureQueryId required | string |
| guardrailMetricIds required | Array of strings non-empty |
| signalMetricIds | Array of strings |
number or null | |
| monitoringMode | string Enum: "auto" "manual" |
| autoUpdate | boolean |
| srmAction | string Enum: "rollback" "hold" "warn" |
| noTrafficAction | string Enum: "rollback" "hold" "warn" |
number or null How long to wait for traffic before applying | |
| multipleExposureAction | string Enum: "rollback" "hold" "warn" |
{- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}{- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}Sets the lockdown mode. locked prevents other users from publishing unrelated changes to the parent feature while the ramp is running — useful when you want to ensure no external edits interfere with a live rollout. It does not affect the ramp's own auto-advancement or monitoring behavior; use actions/pause to halt the ramp itself. none removes the publishing restriction.
| id required | string |
| mode required | string Enum: "none" "locked" |
{- "mode": "none"
}{- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}Fully replaces the steps array for a ramp schedule. Only allowed when the schedule is in a non-running, non-terminal state (ready, pending, or paused). Pause a running schedule first; restart a terminal schedule first.
Step actions (coverage/targeting patches) are not accepted here — they change the SDK payload and must go through a feature revision draft. Existing step actions are preserved for each position. Use PUT /v2/features/:id/revisions/:version/rules/:ruleId/ramp-schedule to modify coverage/targeting.
| id required | string |
required | Array of objects Full replacement of the steps array. Step-level coverage patches ( | ||||||||
Array
| |||||||||
{- "steps": [
- {
- "interval": 0,
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "approvalNotes": "string"
}
]
}{- "rampSchedule": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
}Queues a new analysis snapshot for the schedule's monitoring experiment.
The snapshot runs asynchronously — poll GET /ramp-schedules/:id/status
until snapshotAt advances to confirm results are ready.
Only available when the schedule is within its monitored step window:
completed or rolled-back).monitored: true.currentStepIndex is within [firstMonitoredStepIndex, lastMonitoredStepIndex].Violating any condition returns 409 Conflict with a descriptive message.
Requires the runQueries permission on the configured datasource (enforced via canRunExperimentQueries).
| id required | string |
curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/refresh-monitoring' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "rampSchedule": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
}| id required | string |
curl -X GET 'https://api.growthbook.io/api/v1/ramp-schedules/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "rampSchedule": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
}Permanently deletes a ramp schedule. This does not undo any rule patches that were already applied by completed steps.
| id required | string |
curl -X DELETE 'https://api.growthbook.io/api/v1/ramp-schedules/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "string"
}Updates the name, steps, endActions, startDate, or cutoffDate of a ramp schedule.
Only allowed when the schedule is in pending, ready, or paused status.
targetId shorthand: When providing steps or endActions, you may omit targetId
(or pass "t1") in each action. If the schedule has exactly one active target, the server
will resolve it automatically. For schedules with multiple targets, provide the explicit
target UUID from targets[].id.
Coverage on monitored steps: See the create endpoint description for details
on how coverage is interpreted for monitored steps (total enrollment, not
variation-1 exposure).
| id required | string |
| name | string |
Array of objects | |
Array of objects | |
Array of objects | |
string or null | |
string or null | |
object or null | |
| experimentHealthAction | string Enum: "rollback" "hold" "warn" |
object When mode is 'locked', blocks all feature edits while the ramp is actively running. |
{- "name": "string",
- "steps": [
- {
- "interval": 0,
- "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "approvalNotes": "string",
- "monitored": false,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "lockdownConfig": {
- "mode": "none"
}
}{- "rampSchedule": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "entityType": "feature",
- "entityId": "string",
- "targets": [
- {
- "id": "string",
- "entityType": "feature",
- "entityId": "string",
- "ruleId": "string",
- "environment": "string",
- "status": "pending-join",
- "activatingRevisionVersion": 0
}
], - "startActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "steps": [
- {
- "interval": 0,
- "approvalNotes": "string",
- "monitored": true,
- "holdConditions": {
- "minSampleSize": 0,
- "requiresApproval": true
}, - "actions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- null
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
]
}
], - "endActions": [
- {
- "targetType": "feature-rule",
- "targetId": "string",
- "patch": {
- "ruleId": "string",
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "force": null,
- "enabled": true
}
}
], - "startDate": "2019-08-24T14:15:22Z",
- "cutoffDate": "2019-08-24T14:15:22Z",
- "requiresStartApproval": true,
- "startApprovedAt": "2019-08-24T14:15:22Z",
- "status": "pending",
- "currentStepIndex": -1,
- "startedAt": "2019-08-24T14:15:22Z",
- "phaseStartedAt": "2019-08-24T14:15:22Z",
- "pausedAt": "2019-08-24T14:15:22Z",
- "nextStepAt": "2019-08-24T14:15:22Z",
- "nextProcessAt": "2019-08-24T14:15:22Z",
- "elapsedMs": 0,
- "lockdownConfig": {
- "mode": "none"
}, - "monitoringConfig": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "signalMetricIds": [
- "string"
], - "updateScheduleMinutes": 10,
- "monitoringMode": "auto",
- "autoUpdate": true,
- "srmAction": "rollback",
- "noTrafficAction": "rollback",
- "noTrafficGracePeriodHours": 0,
- "multipleExposureAction": "rollback"
}, - "experimentHealthAction": "rollback",
- "currentStepEnteredAt": "2019-08-24T14:15:22Z",
- "stepApproval": {
- "stepIndex": 0,
- "approvedAt": "2019-08-24T14:15:22Z",
- "approvedBy": "string",
- "context": "ui"
}, - "awaitingApproval": true,
- "monitoringStartDate": "2019-08-24T14:15:22Z",
- "lastRollbackAt": "2019-08-24T14:15:22Z",
- "lastRollbackReason": "string",
- "monitoringStatus": {
- "safeRolloutId": "string",
- "monitoringMode": "auto",
- "autoUpdate": true,
- "effectiveAutoUpdate": true,
- "blockedReason": "string",
- "nextSnapshotAt": "2019-08-24T14:15:22Z",
- "currentStepMonitored": true
}
}
}How GrowthBook connects and queries your data, including cached database schema metadata (information schemas) for tables and columns.
| limit | integer [ 1 .. 100 ] Default: 10 The number of items to return |
| offset | integer >= 0 Default: 0 How many items to skip (use in conjunction with limit for pagination) |
| projectId | string Filter by project id |
curl -X GET 'https://api.growthbook.io/api/v1/data-sources' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "dataSources": [
- {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "type": "string",
- "name": "string",
- "description": "string",
- "projectIds": [
- "string"
], - "eventTracker": "string",
- "identifierTypes": [
- {
- "id": "string",
- "description": "string"
}
], - "assignmentQueries": [
- {
- "id": "string",
- "name": "string",
- "description": "string",
- "identifierType": "string",
- "sql": "string",
- "includesNameColumns": true,
- "dimensionColumns": [
- "string"
]
}
], - "identifierJoinQueries": [
- {
- "identifierTypes": [
- "string"
], - "sql": "string"
}
], - "mixpanelSettings": {
- "viewedExperimentEventName": "string",
- "experimentIdProperty": "string",
- "variationIdProperty": "string",
- "extraUserIdProperty": "string"
}
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| id required | string The id of the requested resource |
curl -X GET 'https://api.growthbook.io/api/v1/data-sources/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "dataSource": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "type": "string",
- "name": "string",
- "description": "string",
- "projectIds": [
- "string"
], - "eventTracker": "string",
- "identifierTypes": [
- {
- "id": "string",
- "description": "string"
}
], - "assignmentQueries": [
- {
- "id": "string",
- "name": "string",
- "description": "string",
- "identifierType": "string",
- "sql": "string",
- "includesNameColumns": true,
- "dimensionColumns": [
- "string"
]
}
], - "identifierJoinQueries": [
- {
- "identifierTypes": [
- "string"
], - "sql": "string"
}
], - "mixpanelSettings": {
- "viewedExperimentEventName": "string",
- "experimentIdProperty": "string",
- "variationIdProperty": "string",
- "extraUserIdProperty": "string"
}
}
}Returns cached database schema metadata for a data source, including databases, schemas, and tables. The information schema is automatically created when a SQL-based data source is added. Not all data source types support information schemas.
| dataSourceId required | string The id of the data source |
curl -X GET 'https://api.growthbook.io/api/v1/data-sources/{dataSourceId}/information-schema' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "informationSchema": {
- "id": "string",
- "datasourceId": "string",
- "status": "PENDING",
- "error": {
- "errorType": "generic",
- "message": "string"
}, - "databases": [
- {
- "databaseName": "string",
- "path": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "schemas": [
- {
- "schemaName": "string",
- "path": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "tables": [
- {
- "tableName": "string",
- "path": "string",
- "id": "string",
- "numOfColumns": 0,
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z"
}
]
}
]
}
], - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z"
}
}Returns cached metadata for a specific table in the Data Source, including columns and their data types. Not all data source types support information schemas.
| tableId required | string The id of the information schema table |
curl -X GET 'https://api.growthbook.io/api/v1/information-schema-tables/{tableId}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "informationSchemaTable": {
- "id": "string",
- "datasourceId": "string",
- "informationSchemaId": "string",
- "tableName": "string",
- "tableSchema": "string",
- "databaseName": "string",
- "columns": [
- {
- "columnName": "string",
- "dataType": "string"
}
], - "refreshMS": 0,
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z"
}
}| limit | integer [ 1 .. 100 ] Default: 10 The number of items to return |
| offset | integer >= 0 Default: 0 How many items to skip (use in conjunction with limit for pagination) |
| datasourceId | string Filter by Data Source |
| projectId | string Filter by project id |
curl -X GET 'https://api.growthbook.io/api/v1/fact-tables' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "factTables": [
- {
- "id": "string",
- "name": "string",
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "projects": [
- "string"
], - "tags": [
- "string"
], - "datasource": "string",
- "userIdTypes": [
- "string"
], - "aggregatedFactTableSettings": {
- "idTypes": [
- "string"
], - "updateTime": {
- "time": "string",
- "timezone": "string"
}, - "lookbackWindow": 0,
- "restateChunkDays": 1
}, - "sql": "string",
- "eventName": "string",
- "columns": [
- {
- "column": "string",
- "datatype": "number",
- "dataTypeFromWarehouse": "number",
- "numberFormat": "",
- "jsonFields": {
- "property1": {
- "datatype": "number"
}, - "property2": {
- "datatype": "number"
}
}, - "name": "string",
- "description": "string",
- "alwaysInlineFilter": false,
- "deleted": false,
- "isAutoSliceColumn": false,
- "autoSlices": [
- "string"
], - "lockedAutoSlices": [
- "string"
], - "isVirtual": false,
- "sql": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z"
}
], - "columnsError": "string",
- "archived": true,
- "managedBy": "",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z"
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| name required | string |
| description | string <= 10000 characters Description of the fact table |
| owner | string 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. |
| projects | Array of strings List of associated project ids |
| tags | Array of strings List of associated tags |
| datasource required | string The datasource id |
| userIdTypes required | Array of strings List of identifier columns in this table. For example, "id" or "anonymous_id" |
object Settings for maintaining shared daily aggregated tables (a subset of userIdTypes plus the daily update time and restate lookback window) used to speed up CUPED. Requires the data pipeline (pipeline-mode) feature. | |
| sql required | string The SQL query for this fact table |
| eventName | string The event name used in SQL template variables |
Array of objects (FactTableColumnInput) Optional array of column definitions to store for this fact table. Supplied columns are stored as-is. Omit | |
| managedBy | string Enum: "" "api" "admin" Set this to "api" to disable editing in the GrowthBook UI |
{- "name": "string",
- "description": "string",
- "owner": "string",
- "projects": [
- "string"
], - "tags": [
- "string"
], - "datasource": "string",
- "userIdTypes": [
- "string"
], - "aggregatedFactTableSettings": {
- "idTypes": [
- "string"
], - "updateTime": {
- "time": "string",
- "timezone": "string"
}, - "lookbackWindow": 0,
- "restateChunkDays": 1
}, - "sql": "string",
- "eventName": "string",
- "columns": [
- {
- "column": "string",
- "datatype": "number",
- "numberFormat": "",
- "jsonFields": {
- "property1": {
- "datatype": "number"
}, - "property2": {
- "datatype": "number"
}
}, - "name": "string",
- "description": "string",
- "alwaysInlineFilter": false,
- "deleted": false,
- "isAutoSliceColumn": false,
- "autoSlices": [
- "string"
], - "lockedAutoSlices": [
- "string"
], - "isVirtual": false,
- "sql": "string"
}
], - "managedBy": ""
}{- "factTable": {
- "id": "string",
- "name": "string",
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "projects": [
- "string"
], - "tags": [
- "string"
], - "datasource": "string",
- "userIdTypes": [
- "string"
], - "aggregatedFactTableSettings": {
- "idTypes": [
- "string"
], - "updateTime": {
- "time": "string",
- "timezone": "string"
}, - "lookbackWindow": 0,
- "restateChunkDays": 1
}, - "sql": "string",