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=true to proceed anyway.The response body will be a JSON object with the following properties:
| 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",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "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": {
- "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. Rules are supplied as a top-level rules array; each rule includes allEnvironments / environments scope fields.
| 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. When omitted, it defaults to the user associated with the request's Personal Access Token (PAT), if one is being used. |
| project | string An associated project ID |
| 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 |
| 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 |
{- "id": "string",
- "archived": true,
- "description": "string",
- "owner": "string",
- "project": "string",
- "valueType": "boolean",
- "defaultValue": "string",
- "tags": [
- "string"
], - "rules": [
- {
- "description": "string",
- "condition": "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",
- "allEnvironments": true,
- "environments": [
- "string"
]
}
], - "environments": {
- "property1": {
- "enabled": true
}, - "property2": {
- "enabled": true
}
}, - "prerequisites": [
- "string"
], - "jsonSchema": "string",
- "customFields": {
- "property1": "string",
- "property2": "string"
}
}{- "feature": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "project": "string",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "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": {
- "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",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "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": {
- "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": [
- {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
]
}
}Updates any combination of a feature's metadata, default value, environment state, and rules. Other top-level fields are patch-merged: omit a field to leave it unchanged. The rules field, when supplied, replaces the entire rules array atomically in a single revision (v1 PUT applied per-environment patches; v2 swaps the full flat array). To preserve existing rules during a partial edit, GET the feature first, mutate the returned rules array, and PUT the full array back. Safe-rollout rules round-trip via their safeRolloutId; use POST /v2/features/:id/revisions/:version/rules to create new ones. Returns 403 if approval rules are enabled for an affected environment and the bypass setting is off.
| 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 |
| 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 |
| 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 |
{- "description": "string",
- "archived": true,
- "project": "string",
- "owner": "string",
- "defaultValue": "string",
- "tags": [
- "string"
], - "rules": [
- {
- "description": "string",
- "condition": "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",
- "allEnvironments": true,
- "environments": [
- "string"
]
}
], - "environments": {
- "property1": {
- "enabled": true
}, - "property2": {
- "enabled": true
}
}, - "prerequisites": [
- "string"
], - "jsonSchema": "string",
- "customFields": {
- "property1": "string",
- "property2": "string"
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}{- "feature": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "project": "string",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "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": {
- "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"
}
}
}Permanently deletes a feature and all of its revisions.
Archived features can be deleted freely. Deleting a live (non-archived) feature returns 403 unless the org setting "REST API always bypasses approval requirements" is enabled.
| 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 in one or more environments simultaneously. Accepts a map of environment name → boolean.
| 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",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "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": {
- "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"
}
}
}Creates a new revision whose rules and values match a previously-published revision, then immediately publishes it, leaving a clear audit trail of the revert in the revision history.
Returns 403 if the API key lacks permission, or if approval rules are enabled for an affected environment and neither the "REST API always bypasses approval requirements" nor the "Allow reverts without approval" org setting is enabled.
Returns 422 with a list of warnings if the restored values no longer validate against the feature's current value type or JSON schema (e.g. reverting to a config the current schema can no longer read). Re-submit with ?ignoreWarnings=true to revert anyway.
| id required | string The id of the requested resource |
| revision required | number |
| comment | string |
{- "revision": 0,
- "comment": "string"
}{- "feature": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "project": "string",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "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": {
- "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"
}
}
}| 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": [
- {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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": [
- {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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 |
{- "comment": "string",
- "title": "string"
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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 |
{- "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
}
]
}, - "date": null,
- "enabled": true
}
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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) |
| defaultValue 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. |
{- "defaultValue": "string",
- "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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. |
{- "prerequisites": [
- {
- "id": "string"
}
], - "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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. |
{- "holdout": {
- "id": "string",
- "value": "string"
}, - "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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. |
{- "archived": true,
- "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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. |
{- "environment": "string",
- "enabled": true,
- "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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) |
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. |
{- "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",
- "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"
}
}, - "schedule": {
- "startDate": "2019-08-24T14:15:22Z",
- "endDate": "2019-08-24T14:15:22Z"
}, - "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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 |
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. |
{- "rule": {
- "description": "string",
- "enabled": true,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "type": "force",
- "value": "string",
- "coverage": 1,
- "hashAttribute": "string",
- "seed": "string",
- "hashVersion": 1,
- "experimentId": "string",
- "variations": [
- {
- "variationId": "string",
- "value": "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"
}
}, - "schedule": {
- "startDate": "2019-08-24T14:15:22Z",
- "endDate": "2019-08-24T14:15:22Z"
}, - "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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. |
{- "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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. |
{- "ruleIds": [
- "string"
], - "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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.
| 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 | |
| environment | string Deprecated |
| 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. |
{- "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"
}, - "environment": "string",
- "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}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. |
{- "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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.
| id required | string |
| version required | integer |
| comment | string |
| autoPublishOnApproval | boolean |
{- "comment": "string",
- "autoPublishOnApproval": true
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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 |
{- "conflictResolutions": {
- "property1": "overwrite",
- "property2": "overwrite"
}, - "expectedLiveVersion": 0,
- "expectedDraftDateUpdated": "string"
}{- "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 |
{- "conflictResolutions": {
- "property1": "overwrite",
- "property2": "overwrite"
}, - "expectedLiveVersion": 0,
- "expectedDraftDateUpdated": "string"
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}Immediately publishes a draft revision, making it the live version of the feature. Any pending ramp actions (pendingRamp on rules) are executed atomically — ramp schedules are created or detached as queued.
| id required | string |
| version required | integer |
| comment | string |
| mergeNow | boolean When the org enforces same-base merges and the revision is behind the live version, set to true to force-merge the stale draft instead of rebasing first. This only takes effect for callers with bypass-approval permission; otherwise it is ignored and the revision must be rebased. |
{- "comment": "string",
- "mergeNow": true
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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 |
{ }{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "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 |
{- "strategy": "draft",
- "comment": "string",
- "title": "string"
}{- "revision": {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
}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",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "string"
}
], - "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
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "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
}
], - "type": "force",
- "value": "string"
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "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. When omitted, it defaults to the user associated with the request's Personal Access Token (PAT), if one is being used. |
| project | string An associated project ID |
| 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 |
| 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 |
{- "id": "string",
- "archived": true,
- "description": "string",
- "owner": "string",
- "project": "string",
- "valueType": "boolean",
- "defaultValue": "string",
- "tags": [
- "string"
], - "environments": {
- "property1": {
- "enabled": true,
- "rules": [
- {
- "description": "string",
- "condition": "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"
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "rules": [
- {
- "description": "string",
- "condition": "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"
}
], - "definition": "string"
}
}, - "property2": {
- "enabled": true,
- "rules": [
- {
- "description": "string",
- "condition": "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"
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "rules": [
- {
- "description": "string",
- "condition": "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"
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "jsonSchema": "string",
- "customFields": {
- "property1": "string",
- "property2": "string"
}
}{- "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",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "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",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "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": [
- {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
]
}
}Deprecated. Use POST /v2/features/:id instead.
Updates any combination of a feature's metadata (description, owner, tags, project), default value, environment settings (rules, kill switches, enabled state), prerequisites, holdout assignment, or JSON schema validation. All provided fields are merged into the existing feature and the result is immediately published as a new revision.
Returns 403 if the API key lacks permission or if approval rules are enabled for an affected environment and the org setting "REST API always bypasses approval requirements" is off.
| 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 |
| 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 |
| 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 |
{- "description": "string",
- "archived": true,
- "project": "string",
- "owner": "string",
- "defaultValue": "string",
- "tags": [
- "string"
], - "environments": {
- "property1": {
- "enabled": true,
- "rules": [
- {
- "description": "string",
- "condition": "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"
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "rules": [
- {
- "description": "string",
- "condition": "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"
}
], - "definition": "string"
}
}, - "property2": {
- "enabled": true,
- "rules": [
- {
- "description": "string",
- "condition": "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"
}
], - "definition": "string",
- "draft": {
- "enabled": true,
- "rules": [
- {
- "description": "string",
- "condition": "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"
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "jsonSchema": "string",
- "customFields": {
- "property1": "string",
- "property2": "string"
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}{- "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",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "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 DELETE /v2/features/:id instead.
Permanently deletes a feature and all of its revisions.
Archived features can be deleted freely. Deleting a live (non-archived) feature returns 403 unless the org setting "REST API always bypasses approval requirements" is enabled, or the API key lacks delete permission.
| 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 in one or more environments simultaneously. Accepts a map of environment name → boolean and immediately publishes the change.
Returns 403 if the API key lacks permission or if approval rules are enabled for an affected environment and the org setting "REST API always bypasses approval requirements" is off.
| 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",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "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 POST /v2/features/:id/revert instead.
Creates a new revision whose rules and values match a previously-published revision, then immediately publishes it. This leaves a clear audit trail of the revert action in the revision history.
Returns 403 if the API key lacks permission, or if approval rules are enabled for an affected environment and neither the "REST API always bypasses approval requirements" nor the "Allow reverts without approval" org setting is enabled.
Returns 422 with a list of warnings if the restored values no longer validate against the feature's current value type or JSON schema. Re-submit with ?ignoreWarnings=true to revert anyway.
| id required | string The id of the requested resource |
| revision required | number |
| comment | string |
{- "revision": 0,
- "comment": "string"
}{- "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",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "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/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": [
- {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
], - "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": [
- {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
], - "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 |
{- "comment": "string",
- "title": "string"
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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 |
{- "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
}
]
}, - "date": null,
- "enabled": true
}
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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 |
{- "defaultValue": "string",
- "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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 |
{- "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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 |
{- "holdout": {
- "id": "string",
- "value": "string"
}, - "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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 |
{- "archived": true,
- "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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 |
{- "environment": "string",
- "enabled": true,
- "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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 |
{- "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"
}
]
}, - "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"
}
}, - "schedule": {
- "startDate": "string",
- "endDate": "string"
}, - "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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 |
{- "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",
- "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"
}
}, - "schedule": {
- "startDate": "string",
- "endDate": "string"
}, - "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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 |
{- "environment": "string",
- "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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 |
{- "environment": "string",
- "ruleIds": [
- "string"
], - "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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 | |
| environment | string Deprecated |
| revisionTitle | string |
| revisionComment | string |
{- "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"
}, - "environment": "string",
- "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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 |
{- "environment": "string",
- "revisionTitle": "string",
- "revisionComment": "string"
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}, - "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"
], - "enabled": true,
- "scheduleRules": [
- {
- "timestamp": "string",
- "enabled": true
}
], - "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "scheduleType": "none",
- "type": "force",
- "value": "string"
}
], - "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 | |||
| |||
{- "conflictResolutions": {
- "property1": "overwrite",
- "property2": "overwrite"
}
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}Deprecated. Use POST /v2/features/:id/revisions/:version/publish instead.
Immediately publishes a draft revision, making it the live version of the feature. Blocked if the org requires approvals and bypassApprovalChecks is off.
| id required | string |
| version required | integer |
| comment | string |
| mergeNow | boolean When the org enforces same-base merges and the revision is behind the live version, set to true to force-merge the stale draft instead of rebasing first. This only takes effect for callers with bypass-approval permission; otherwise it is ignored and the revision must be rebased. |
{- "comment": "string",
- "mergeNow": true
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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 |
{- "strategy": "draft",
- "comment": "string",
- "title": "string"
}{- "revision": {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
}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",
- "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"
}, - "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 | |
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",
- "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",
- "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"
}, - "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",
- "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"
}, - "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",
- "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"
}, - "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",
- "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"
}, - "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",
- "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"
}, - "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",
- "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"
}, - "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",
- "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"
}, - "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",
- "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"
}, - "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
}
}
}Satisfies the holdConditions.requiresApproval gate on the current step of
a running schedule.
Approval is the final gate: it can only be granted once every other hold
on the step has already cleared. This endpoint rejects the request (400) if
the step is not yet ready for approval — for example while the interval timer
is still counting down, or (for monitored steps) before fresh analysis
covering the step is available or while a guardrail/health signal is failing.
Poll the /status endpoint and only call this once it reports the step is
awaiting approval.
Non-monitored steps: once the interval has elapsed, approving clears the last hold and the schedule advances immediately, chaining through any subsequent instant steps in the same request.
Monitored steps: once the interval has elapsed and fresh, healthy analysis is available, approving clears the last hold and the agenda advances the step on its next tick (re-checking the latest analysis once more 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 only if you want to bypass all remaining
holds entirely (including the interval timer).
Requires feature review 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",
- "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"
}, - "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",
- "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"
}, - "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
canBypassApprovalChecks 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",
- "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"
}, - "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",
- "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"
}, - "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",
- "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"
}, - "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. Metric IDs, snapshot cadence, and health-action thresholds (srmAction, noTrafficAction, etc.) can be updated at any time.
datasourceId and exposureQueryId are locked once monitoring starts — 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",
- "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"
}, - "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",
- "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"
}, - "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",
- "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"
}, - "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",
- "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"
}, - "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",
- "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"
}, - "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",
- "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"
}, - "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
}, - "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"
], - "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 |
| 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
}, - "sql": "string",
- "eventName": "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
}, - "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"
], - "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"
}
}| id required | string The id of the requested resource |
curl -X GET 'https://api.growthbook.io/api/v1/fact-tables/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "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
}, - "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"
], - "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"
}
}| id required | string The id of the requested resource |
| name | 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 |
| userIdTypes | 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 | string The SQL query for this fact table |
| eventName | string The event name used in SQL template variables |
Array of objects (FactTableColumn) Optional array of columns that you want to update. Only allows updating properties of existing columns. Cannot create new columns or delete existing ones. Columns cannot be added or deleted; column structure is determined by SQL parsing. Slice-related properties require an enterprise license. | |
string or null Error message if there was an issue parsing the SQL schema | |
| managedBy | string Enum: "" "api" "admin" Set this to "api" to disable editing in the GrowthBook UI |
| archived | boolean |
{- "name": "string",
- "description": "string",
- "owner": "string",
- "projects": [
- "string"
], - "tags": [
- "string"
], - "userIdTypes": [
- "string"
], - "aggregatedFactTableSettings": {
- "idTypes": [
- "string"
], - "updateTime": {
- "time": "string",
- "timezone": "string"
}, - "lookbackWindow": 0
}, - "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"
]
}
], - "columnsError": "string",
- "managedBy": "",
- "archived": true
}{- "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
}, - "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"
], - "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"
}
}| id required | string The id of the requested resource |
curl -X DELETE 'https://api.growthbook.io/api/v1/fact-tables/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "ftb_123abc"
}| factTableId required | string Specify a specific fact table |
| 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/fact-tables/abc123/filters' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "factTableFilters": [
- {
- "id": "string",
- "name": "string",
- "description": "string",
- "value": "string",
- "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
}| factTableId required | string Specify a specific fact table |
| name required | string |
| description | string <= 10000 characters Description of the fact table filter |
| value required | string The SQL expression for this filter. |
| managedBy | string Enum: "" "api" Set this to "api" to disable editing in the GrowthBook UI. Before you do this, the Fact Table itself must also be marked as "api" |
{- "name": "string",
- "description": "string",
- "value": "country = 'US'",
- "managedBy": ""
}{- "factTableFilter": {
- "id": "string",
- "name": "string",
- "description": "string",
- "value": "string",
- "managedBy": "",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z"
}
}| factTableId required | string Specify a specific fact table |
| id required | string The id of the requested resource |
curl -X GET 'https://api.growthbook.io/api/v1/fact-tables/abc123/filters/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "factTableFilter": {
- "id": "string",
- "name": "string",
- "description": "string",
- "value": "string",
- "managedBy": "",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z"
}
}| factTableId required | string Specify a specific fact table |
| id required | string The id of the requested resource |
| name | string |
| description | string <= 10000 characters Description of the fact table filter |
| value | string The SQL expression for this filter. |
| managedBy | string Enum: "" "api" Set this to "api" to disable editing in the GrowthBook UI. Before you do this, the Fact Table itself must also be marked as "api" |
{- "name": "string",
- "description": "string",
- "value": "country = 'US'",
- "managedBy": ""
}{- "factTableFilter": {
- "id": "string",
- "name": "string",
- "description": "string",
- "value": "string",
- "managedBy": "",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z"
}
}| factTableId required | string Specify a specific fact table |
| id required | string The id of the requested resource |
curl -X DELETE 'https://api.growthbook.io/api/v1/fact-tables/abc123/filters/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "flt_123abc"
}| id required | string The id of the requested resource |
curl -X GET 'https://api.growthbook.io/api/v1/fact-tables/abc123/aggregated-tables' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "aggregatedFactTables": [
- {
- "idType": "string",
- "status": "running",
- "tableFullName": "string",
- "firstEventDate": "2019-08-24T14:15:22Z",
- "lastEventDate": "2019-08-24T14:15:22Z",
- "lastMaxTimestamp": "2019-08-24T14:15:22Z",
- "lastError": "string",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "pendingRestate": true,
- "pendingRestateReason": "incomplete-write"
}
], - "nextScheduledUpdate": "2019-08-24T14:15:22Z"
}| id required | string The id of the requested resource |
| idType | string Limit the refresh to a single id type. If omitted, all of the fact table's aggregatedFactTableSettings.idTypes are refreshed. |
| fullRestate | boolean Drop and recreate the table, re-scanning the retained window. This is significantly more expensive than the default incremental append (it scans ~2-3 months of history). |
{- "idType": "string",
- "fullRestate": true
}{- "runs": [
- {
- "idType": "string",
- "runId": "string",
- "status": "started",
- "reason": "already-in-progress",
- "error": "string"
}
]
}| id required | string The id of the requested resource |
| idType | string Only return runs for this id type. When omitted, runs for all id types are returned. |
| 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/fact-tables/ftb_123/aggregated-tables/runs?idType=user_id' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "runs": [
- {
- "id": "string",
- "idType": "string",
- "mode": "incremental",
- "status": "queued",
- "runStarted": "2019-08-24T14:15:22Z",
- "dateCreated": "2019-08-24T14:15:22Z",
- "finishedAt": "2019-08-24T14:15:22Z",
- "error": "string",
- "queryIds": [
- "string"
]
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| id required | string The id of the fact table |
| runId required | string The id of the aggregated table run (e.g. aftr_...) |
curl -X GET 'https://api.growthbook.io/api/v1/fact-tables/abc123/aggregated-tables/runs/aftr_abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "run": {
- "id": "string",
- "idType": "string",
- "mode": "incremental",
- "status": "queued",
- "runStarted": "2019-08-24T14:15:22Z",
- "dateCreated": "2019-08-24T14:15:22Z",
- "finishedAt": "2019-08-24T14:15:22Z",
- "error": "string",
- "queryIds": [
- "string"
], - "factTableId": "string",
- "datasourceId": "string",
- "result": {
- "lastMaxTimestamp": "2019-08-24T14:15:22Z",
- "firstEventDate": "2019-08-24T14:15:22Z",
- "lastEventDate": "2019-08-24T14:15:22Z"
}
}
}Array of objects | |
Array of objects | |
Array of objects |
{- "factTables": [
- {
- "id": "string",
- "data": {
- "name": "string",
- "description": "string",
- "owner": "string",
- "projects": [
- "string"
], - "tags": [
- "string"
], - "datasource": "string",
- "userIdTypes": [
- "string"
], - "sql": "string",
- "eventName": "string",
- "managedBy": ""
}
}
], - "factTableFilters": [
- {
- "factTableId": "string",
- "id": "string",
- "data": {
- "name": "string",
- "description": "string",
- "value": "country = 'US'",
- "managedBy": ""
}
}
], - "factMetrics": [
- {
- "id": "string",
- "data": {
- "name": "string",
- "description": "string",
- "owner": "string",
- "projects": [
- "string"
], - "tags": [
- "string"
], - "metricType": "proportion",
- "numerator": {
- "factTableId": "string",
- "column": "string",
- "aggregation": "sum",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
], - "aggregateFilterColumn": "string",
- "aggregateFilter": "string"
}, - "denominator": {
- "factTableId": "string",
- "column": "string",
- "aggregation": "sum",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
]
}, - "inverse": true,
- "quantileSettings": {
- "type": "event",
- "ignoreZeros": true,
- "quantile": 0.001,
- "quantileEventCountColumn": "string"
}, - "cappingSettings": {
- "type": "none",
- "value": 0,
- "ignoreZeros": true
}, - "windowSettings": {
- "type": "none",
- "delayHours": 0,
- "delayValue": 0,
- "delayUnit": "minutes",
- "windowValue": 0,
- "windowUnit": "minutes"
}, - "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "regressionAdjustmentSettings": {
- "override": true,
- "enabled": true,
- "days": 0
}, - "riskThresholdSuccess": 0,
- "riskThresholdDanger": 0,
- "displayAsPercentage": true,
- "minPercentChange": 0,
- "maxPercentChange": 0,
- "minSampleSize": 0,
- "targetMDE": 0,
- "managedBy": "",
- "archived": true,
- "metricAutoSlices": [
- "string"
]
}
}
]
}{- "success": true,
- "factTablesAdded": 0,
- "factTablesUpdated": 0,
- "factTableFiltersAdded": 0,
- "factTableFiltersUpdated": 0,
- "factMetricsAdded": 0,
- "factMetricsUpdated": 0
}| 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 |
| factTableId | string Filter by Fact Table Id (for ratio metrics, we only look at the numerator) |
curl -X GET 'https://api.growthbook.io/api/v1/fact-metrics' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "factMetrics": [
- {
- "id": "string",
- "name": "string",
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "projects": [
- "string"
], - "tags": [
- "string"
], - "datasource": "string",
- "metricType": "proportion",
- "numerator": {
- "factTableId": "string",
- "column": "string",
- "aggregation": "sum",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
], - "aggregateFilterColumn": "string",
- "aggregateFilter": "string"
}, - "denominator": {
- "factTableId": "string",
- "column": "string",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
]
}, - "inverse": true,
- "quantileSettings": {
- "type": "event",
- "ignoreZeros": true,
- "quantile": 0.001,
- "quantileEventCountColumn": "string"
}, - "cappingSettings": {
- "type": "none",
- "value": 0,
- "ignoreZeros": true
}, - "windowSettings": {
- "type": "none",
- "delayValue": 0,
- "delayUnit": "minutes",
- "windowValue": 0,
- "windowUnit": "minutes"
}, - "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "regressionAdjustmentSettings": {
- "override": true,
- "enabled": true,
- "days": 0
}, - "riskThresholdSuccess": 0,
- "riskThresholdDanger": 0,
- "displayAsPercentage": true,
- "minPercentChange": 0,
- "maxPercentChange": 0,
- "minSampleSize": 0,
- "targetMDE": 0,
- "managedBy": "",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "metricAutoSlices": [
- "string"
]
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| name required | string |
| description | string <= 10000 characters |
| 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 |
| tags | Array of strings |
| metricType required | string Enum: "proportion" "retention" "mean" "quantile" "ratio" "dailyParticipation" |
required | object |
object Only when metricType is 'ratio' | |
| inverse | boolean Set to true for things like Bounce Rate, where you want the metric to decrease |
object Controls the settings for quantile metrics (mandatory if metricType is "quantile") | |
object Controls how outliers are handled | |
object Controls the conversion window for the metric | |
object Controls the bayesian prior for the metric. If omitted, organization defaults will be used. | |
object Controls the regression adjustment (CUPED) settings for the metric | |
| riskThresholdSuccess | number >= 0 Deprecated No longer used. Threshold for Risk to be considered low enough, as a proportion (e.g. put 0.0025 for 0.25%). |
| riskThresholdDanger | number >= 0 Deprecated No longer used. Threshold for Risk to be considered too high, as a proportion (e.g. put 0.0125 for 1.25%). |
| displayAsPercentage | boolean If true and the metric is a ratio or dailyParticipation metric, variation means will be displayed as a percentage. Defaults to true for dailyParticipation metrics and false for ratio metrics. |
| minPercentChange | number >= 0 Minimum percent change to consider uplift significant, as a proportion (e.g. put 0.005 for 0.5%) |
| maxPercentChange | number >= 0 Maximum percent change to consider uplift significant, as a proportion (e.g. put 0.5 for 50%) |
| minSampleSize | number >= 0 |
| targetMDE | number >= 0 The percentage change that you want to reliably detect before ending an experiment, as a proportion (e.g. put 0.1 for 10%). This is used to estimate the "Days Left" for running experiments. |
| managedBy | string Enum: "" "api" "admin" Set this to "api" to disable editing in the GrowthBook UI |
| metricAutoSlices | Array of strings Array of slice column names that will be automatically included in metric analysis. This is an enterprise feature. |
{- "name": "string",
- "description": "string",
- "owner": "string",
- "projects": [
- "string"
], - "tags": [
- "string"
], - "metricType": "proportion",
- "numerator": {
- "factTableId": "string",
- "column": "string",
- "aggregation": "sum",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
], - "aggregateFilterColumn": "string",
- "aggregateFilter": "string"
}, - "denominator": {
- "factTableId": "string",
- "column": "string",
- "aggregation": "sum",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
]
}, - "inverse": true,
- "quantileSettings": {
- "type": "event",
- "ignoreZeros": true,
- "quantile": 0.001,
- "quantileEventCountColumn": "string"
}, - "cappingSettings": {
- "type": "none",
- "value": 0,
- "ignoreZeros": true
}, - "windowSettings": {
- "type": "none",
- "delayHours": 0,
- "delayValue": 0,
- "delayUnit": "minutes",
- "windowValue": 0,
- "windowUnit": "minutes"
}, - "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "regressionAdjustmentSettings": {
- "override": true,
- "enabled": true,
- "days": 0
}, - "riskThresholdSuccess": 0,
- "riskThresholdDanger": 0,
- "displayAsPercentage": true,
- "minPercentChange": 0,
- "maxPercentChange": 0,
- "minSampleSize": 0,
- "targetMDE": 0,
- "managedBy": "",
- "metricAutoSlices": [
- "string"
]
}{- "factMetric": {
- "id": "string",
- "name": "string",
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "projects": [
- "string"
], - "tags": [
- "string"
], - "datasource": "string",
- "metricType": "proportion",
- "numerator": {
- "factTableId": "string",
- "column": "string",
- "aggregation": "sum",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
], - "aggregateFilterColumn": "string",
- "aggregateFilter": "string"
}, - "denominator": {
- "factTableId": "string",
- "column": "string",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
]
}, - "inverse": true,
- "quantileSettings": {
- "type": "event",
- "ignoreZeros": true,
- "quantile": 0.001,
- "quantileEventCountColumn": "string"
}, - "cappingSettings": {
- "type": "none",
- "value": 0,
- "ignoreZeros": true
}, - "windowSettings": {
- "type": "none",
- "delayValue": 0,
- "delayUnit": "minutes",
- "windowValue": 0,
- "windowUnit": "minutes"
}, - "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "regressionAdjustmentSettings": {
- "override": true,
- "enabled": true,
- "days": 0
}, - "riskThresholdSuccess": 0,
- "riskThresholdDanger": 0,
- "displayAsPercentage": true,
- "minPercentChange": 0,
- "maxPercentChange": 0,
- "minSampleSize": 0,
- "targetMDE": 0,
- "managedBy": "",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "metricAutoSlices": [
- "string"
]
}
}| id required | string The id of the requested resource |
curl -X GET 'https://api.growthbook.io/api/v1/fact-metrics/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "factMetric": {
- "id": "string",
- "name": "string",
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "projects": [
- "string"
], - "tags": [
- "string"
], - "datasource": "string",
- "metricType": "proportion",
- "numerator": {
- "factTableId": "string",
- "column": "string",
- "aggregation": "sum",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
], - "aggregateFilterColumn": "string",
- "aggregateFilter": "string"
}, - "denominator": {
- "factTableId": "string",
- "column": "string",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
]
}, - "inverse": true,
- "quantileSettings": {
- "type": "event",
- "ignoreZeros": true,
- "quantile": 0.001,
- "quantileEventCountColumn": "string"
}, - "cappingSettings": {
- "type": "none",
- "value": 0,
- "ignoreZeros": true
}, - "windowSettings": {
- "type": "none",
- "delayValue": 0,
- "delayUnit": "minutes",
- "windowValue": 0,
- "windowUnit": "minutes"
}, - "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "regressionAdjustmentSettings": {
- "override": true,
- "enabled": true,
- "days": 0
}, - "riskThresholdSuccess": 0,
- "riskThresholdDanger": 0,
- "displayAsPercentage": true,
- "minPercentChange": 0,
- "maxPercentChange": 0,
- "minSampleSize": 0,
- "targetMDE": 0,
- "managedBy": "",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "metricAutoSlices": [
- "string"
]
}
}| id required | string The id of the requested resource |
| name | string |
| description | string <= 10000 characters |
| 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 |
| tags | Array of strings |
| metricType | string Enum: "proportion" "retention" "mean" "quantile" "ratio" "dailyParticipation" |
object | |
object Only when metricType is 'ratio' | |
| inverse | boolean Set to true for things like Bounce Rate, where you want the metric to decrease |
object Controls the settings for quantile metrics (mandatory if metricType is "quantile") | |
object Controls how outliers are handled | |
object Controls the conversion window for the metric | |
object Controls the bayesian prior for the metric. If omitted, organization defaults will be used. | |
object Controls the regression adjustment (CUPED) settings for the metric | |
| riskThresholdSuccess | number >= 0 Deprecated No longer used. Threshold for Risk to be considered low enough, as a proportion (e.g. put 0.0025 for 0.25%). |
| riskThresholdDanger | number >= 0 Deprecated No longer used. Threshold for Risk to be considered too high, as a proportion (e.g. put 0.0125 for 1.25%). |
| displayAsPercentage | boolean If true and the metric is a ratio or dailyParticipation metric, variation means will be displayed as a percentage. Defaults to true for dailyParticipation metrics and false for ratio metrics. |
| minPercentChange | number >= 0 Minimum percent change to consider uplift significant, as a proportion (e.g. put 0.005 for 0.5%) |
| maxPercentChange | number >= 0 Maximum percent change to consider uplift significant, as a proportion (e.g. put 0.5 for 50%) |
| minSampleSize | number >= 0 |
| targetMDE | number >= 0 |
| managedBy | string Enum: "" "api" "admin" Set this to "api" to disable editing in the GrowthBook UI |
| archived | boolean |
| metricAutoSlices | Array of strings Array of slice column names that will be automatically included in metric analysis. This is an enterprise feature. |
{- "name": "string",
- "description": "string",
- "owner": "string",
- "projects": [
- "string"
], - "tags": [
- "string"
], - "metricType": "proportion",
- "numerator": {
- "factTableId": "string",
- "column": "string",
- "aggregation": "sum",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
], - "aggregateFilterColumn": "string",
- "aggregateFilter": "string"
}, - "denominator": {
- "factTableId": "string",
- "column": "string",
- "aggregation": "sum",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
]
}, - "inverse": true,
- "quantileSettings": {
- "type": "event",
- "ignoreZeros": true,
- "quantile": 0.001,
- "quantileEventCountColumn": "string"
}, - "cappingSettings": {
- "type": "none",
- "value": 0,
- "ignoreZeros": true
}, - "windowSettings": {
- "type": "none",
- "delayHours": 0,
- "delayValue": 0,
- "delayUnit": "minutes",
- "windowValue": 0,
- "windowUnit": "minutes"
}, - "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "regressionAdjustmentSettings": {
- "override": true,
- "enabled": true,
- "days": 0
}, - "riskThresholdSuccess": 0,
- "riskThresholdDanger": 0,
- "displayAsPercentage": true,
- "minPercentChange": 0,
- "maxPercentChange": 0,
- "minSampleSize": 0,
- "targetMDE": 0,
- "managedBy": "",
- "archived": true,
- "metricAutoSlices": [
- "string"
]
}{- "factMetric": {
- "id": "string",
- "name": "string",
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "projects": [
- "string"
], - "tags": [
- "string"
], - "datasource": "string",
- "metricType": "proportion",
- "numerator": {
- "factTableId": "string",
- "column": "string",
- "aggregation": "sum",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
], - "aggregateFilterColumn": "string",
- "aggregateFilter": "string"
}, - "denominator": {
- "factTableId": "string",
- "column": "string",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
]
}, - "inverse": true,
- "quantileSettings": {
- "type": "event",
- "ignoreZeros": true,
- "quantile": 0.001,
- "quantileEventCountColumn": "string"
}, - "cappingSettings": {
- "type": "none",
- "value": 0,
- "ignoreZeros": true
}, - "windowSettings": {
- "type": "none",
- "delayValue": 0,
- "delayUnit": "minutes",
- "windowValue": 0,
- "windowUnit": "minutes"
}, - "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "regressionAdjustmentSettings": {
- "override": true,
- "enabled": true,
- "days": 0
}, - "riskThresholdSuccess": 0,
- "riskThresholdDanger": 0,
- "displayAsPercentage": true,
- "minPercentChange": 0,
- "maxPercentChange": 0,
- "minSampleSize": 0,
- "targetMDE": 0,
- "managedBy": "",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "metricAutoSlices": [
- "string"
]
}
}| id required | string The id of the requested resource |
curl -X DELETE 'https://api.growthbook.io/api/v1/fact-metrics/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "fact__123abc"
}| id required | string The fact metric id to analyze |
| userIdType | string The identifier type to use for the analysis. If not provided, defaults to the first available identifier type in the fact table. |
| lookbackDays | number [ 1 .. 999999 ] Number of days to look back for the analysis. Defaults to 30. |
| populationType | string Enum: "factTable" "segment" The type of population to analyze. Defaults to 'factTable', meaning the analysis will return the metric value for all units found in the fact table. |
string or null The ID of the population (e.g., segment ID) when populationType is not 'factTable'. Defaults to null. | |
| additionalNumeratorFilters | Array of strings We support passing in adhoc filters for an analysis that don't live on the metric itself. These are in addition to the metric's filters. To use this, you can pass in an array of Fact Table Filter Ids. |
| additionalDenominatorFilters | Array of strings We support passing in adhoc filters for an analysis that don't live on the metric itself. These are in addition to the metric's filters. To use this, you can pass in an array of Fact Table Filter Ids. |
| useCache | boolean Whether to use a cached query if one exists. Defaults to true. |
{- "userIdType": "string",
- "lookbackDays": 1,
- "populationType": "factTable",
- "populationId": "string",
- "additionalNumeratorFilters": [
- "string"
], - "additionalDenominatorFilters": [
- "string"
], - "useCache": true
}{- "metricAnalysis": {
- "id": "string",
- "status": "string",
- "settings": {
- "property1": null,
- "property2": null
}
}
}| 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 |
| datasourceId | string Filter by Data Source |
curl -X GET 'https://api.growthbook.io/api/v1/metrics' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "metrics": [
- {
- "id": "string",
- "managedBy": "",
- "dateCreated": "string",
- "dateUpdated": "string",
- "owner": "string",
- "ownerEmail": "string",
- "datasourceId": "string",
- "name": "string",
- "description": "string",
- "type": "binomial",
- "tags": [
- "string"
], - "projects": [
- "string"
], - "archived": true,
- "behavior": {
- "goal": "increase",
- "cappingSettings": {
- "type": "none",
- "value": 0,
- "ignoreZeros": true
}, - "cap": 0,
- "capping": "absolute",
- "capValue": 0,
- "windowSettings": {
- "type": "none",
- "delayValue": 0,
- "delayUnit": "minutes",
- "windowValue": 0,
- "windowUnit": "minutes"
}, - "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "conversionWindowStart": 0,
- "conversionWindowEnd": 0,
- "riskThresholdSuccess": 0,
- "riskThresholdDanger": 0,
- "minPercentChange": 0,
- "maxPercentChange": 0,
- "minSampleSize": 0,
- "targetMDE": 0
}, - "sql": {
- "identifierTypes": [
- "string"
], - "conversionSQL": "string",
- "userAggregationSQL": "string",
- "denominatorMetricId": "string"
}, - "sqlBuilder": {
- "identifierTypeColumns": [
- {
- "identifierType": "string",
- "columnName": "string"
}
], - "tableName": "string",
- "valueColumnName": "string",
- "timestampColumnName": "string",
- "conditions": [
- {
- "column": "string",
- "operator": "string",
- "value": "string"
}
]
}, - "mixpanel": {
- "eventName": "string",
- "eventValue": "string",
- "userAggregation": "string",
- "conditions": [
- {
- "property": "string",
- "operator": "string",
- "value": "string"
}
]
}
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| datasourceId required | string ID for the DataSource |
| managedBy | string Enum: "" "api" Where this metric must be managed from. If not set (empty string), it can be managed from anywhere. If set to "api", it can be managed via the API only. |
| 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. |
| name required | string Name of the metric |
| description | string <= 10000 characters Description of the metric |
| type required | |
| tags | Array of strings List of tags |
| projects | Array of strings List of project IDs for projects that can access this metric |
| archived | boolean |
object | |
object Preferred way to define SQL. Only one of | |
object An alternative way to specify a SQL metric, rather than a full query. Using | |
object Only use for MixPanel (non-SQL) Data Sources. Only one of |
{- "datasourceId": "string",
- "managedBy": "",
- "owner": "string",
- "name": "string",
- "description": "string",
- "type": "binomial",
- "tags": [
- "string"
], - "projects": [
- "string"
], - "archived": true,
- "behavior": {
- "goal": "increase",
- "cappingSettings": {
- "type": "none",
- "value": 0,
- "ignoreZeros": true
}, - "cap": 0,
- "capping": "absolute",
- "capValue": 0,
- "windowSettings": {
- "type": "none",
- "delayHours": 0,
- "delayValue": 0,
- "delayUnit": "minutes",
- "windowValue": 0,
- "windowUnit": "minutes"
}, - "conversionWindowStart": 0,
- "conversionWindowEnd": 0,
- "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "riskThresholdSuccess": 0,
- "riskThresholdDanger": 0,
- "minPercentChange": 0,
- "maxPercentChange": 0,
- "minSampleSize": 0,
- "targetMDE": 0
}, - "sql": {
- "identifierTypes": [
- "string"
], - "conversionSQL": "string",
- "userAggregationSQL": "string",
- "denominatorMetricId": "string"
}, - "sqlBuilder": {
- "identifierTypeColumns": [
- {
- "identifierType": "string",
- "columnName": "string"
}
], - "tableName": "string",
- "valueColumnName": "string",
- "timestampColumnName": "string",
- "conditions": [
- {
- "column": "string",
- "operator": "string",
- "value": "string"
}
]
}, - "mixpanel": {
- "eventName": "string",
- "eventValue": "string",
- "userAggregation": "string",
- "conditions": [
- {
- "property": "string",
- "operator": "string",
- "value": "string"
}
]
}
}{- "metric": {
- "id": "string",
- "managedBy": "",
- "dateCreated": "string",
- "dateUpdated": "string",
- "owner": "string",
- "ownerEmail": "string",
- "datasourceId": "string",
- "name": "string",
- "description": "string",
- "type": "binomial",
- "tags": [
- "string"
], - "projects": [
- "string"
], - "archived": true,
- "behavior": {
- "goal": "increase",
- "cappingSettings": {
- "type": "none",
- "value": 0,
- "ignoreZeros": true
}, - "cap": 0,
- "capping": "absolute",
- "capValue": 0,
- "windowSettings": {
- "type": "none",
- "delayValue": 0,
- "delayUnit": "minutes",
- "windowValue": 0,
- "windowUnit": "minutes"
}, - "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "conversionWindowStart": 0,
- "conversionWindowEnd": 0,
- "riskThresholdSuccess": 0,
- "riskThresholdDanger": 0,
- "minPercentChange": 0,
- "maxPercentChange": 0,
- "minSampleSize": 0,
- "targetMDE": 0
}, - "sql": {
- "identifierTypes": [
- "string"
], - "conversionSQL": "string",
- "userAggregationSQL": "string",
- "denominatorMetricId": "string"
}, - "sqlBuilder": {
- "identifierTypeColumns": [
- {
- "identifierType": "string",
- "columnName": "string"
}
], - "tableName": "string",
- "valueColumnName": "string",
- "timestampColumnName": "string",
- "conditions": [
- {
- "column": "string",
- "operator": "string",
- "value": "string"
}
]
}, - "mixpanel": {
- "eventName": "string",
- "eventValue": "string",
- "userAggregation": "string",
- "conditions": [
- {
- "property": "string",
- "operator": "string",
- "value": "string"
}
]
}
}
}| id required | string The id of the requested resource |
curl -X GET 'https://api.growthbook.io/api/v1/metrics/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "metric": {
- "id": "string",
- "managedBy": "",
- "dateCreated": "string",
- "dateUpdated": "string",
- "owner": "string",
- "ownerEmail": "string",
- "datasourceId": "string",
- "name": "string",
- "description": "string",
- "type": "binomial",
- "tags": [
- "string"
], - "projects": [
- "string"
], - "archived": true,
- "behavior": {
- "goal": "increase",
- "cappingSettings": {
- "type": "none",
- "value": 0,
- "ignoreZeros": true
}, - "cap": 0,
- "capping": "absolute",
- "capValue": 0,
- "windowSettings": {
- "type": "none",
- "delayValue": 0,
- "delayUnit": "minutes",
- "windowValue": 0,
- "windowUnit": "minutes"
}, - "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "conversionWindowStart": 0,
- "conversionWindowEnd": 0,
- "riskThresholdSuccess": 0,
- "riskThresholdDanger": 0,
- "minPercentChange": 0,
- "maxPercentChange": 0,
- "minSampleSize": 0,
- "targetMDE": 0
}, - "sql": {
- "identifierTypes": [
- "string"
], - "conversionSQL": "string",
- "userAggregationSQL": "string",
- "denominatorMetricId": "string"
}, - "sqlBuilder": {
- "identifierTypeColumns": [
- {
- "identifierType": "string",
- "columnName": "string"
}
], - "tableName": "string",
- "valueColumnName": "string",
- "timestampColumnName": "string",
- "conditions": [
- {
- "column": "string",
- "operator": "string",
- "value": "string"
}
]
}, - "mixpanel": {
- "eventName": "string",
- "eventValue": "string",
- "userAggregation": "string",
- "conditions": [
- {
- "property": "string",
- "operator": "string",
- "value": "string"
}
]
}
}
}| id required | string The id of the requested resource |
| managedBy | string Enum: "" "api" "admin" Where this metric must be managed from. If not set (empty string), it can be managed from anywhere. If set to "api", it can be managed via the API only. Please note that we have deprecated support for setting the managedBy property to "admin". Your existing Legacy Metrics with this value will continue to work, but we suggest migrating to Fact Metrics instead. |
| 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. |
| name | string Name of the metric |
| description | string <= 10000 characters Description of the metric |
| type | |
| tags | Array of strings List of tags |
| projects | Array of strings List of project IDs for projects that can access this metric |
| archived | boolean |
object | |
object Preferred way to define SQL. Only one of | |
object An alternative way to specify a SQL metric, rather than a full query. Using | |
object Only use for MixPanel (non-SQL) Data Sources. Only one of |
{- "managedBy": "",
- "owner": "string",
- "name": "string",
- "description": "string",
- "type": "binomial",
- "tags": [
- "string"
], - "projects": [
- "string"
], - "archived": true,
- "behavior": {
- "goal": "increase",
- "cappingSettings": {
- "type": "none",
- "value": 0,
- "ignoreZeros": true
}, - "cap": 0,
- "capping": "absolute",
- "capValue": 0,
- "windowSettings": {
- "type": "none",
- "delayHours": 0,
- "delayValue": 0,
- "delayUnit": "minutes",
- "windowValue": 0,
- "windowUnit": "minutes"
}, - "conversionWindowStart": 0,
- "conversionWindowEnd": 0,
- "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "riskThresholdSuccess": 0,
- "riskThresholdDanger": 0,
- "minPercentChange": 0,
- "maxPercentChange": 0,
- "minSampleSize": 0,
- "targetMDE": 0
}, - "sql": {
- "identifierTypes": [
- "string"
], - "conversionSQL": "string",
- "userAggregationSQL": "string",
- "denominatorMetricId": "string"
}, - "sqlBuilder": {
- "identifierTypeColumns": [
- {
- "identifierType": "string",
- "columnName": "string"
}
], - "tableName": "string",
- "valueColumnName": "string",
- "timestampColumnName": "string",
- "conditions": [
- {
- "column": "string",
- "operator": "string",
- "value": "string"
}
]
}, - "mixpanel": {
- "eventName": "string",
- "eventValue": "string",
- "userAggregation": "string",
- "conditions": [
- {
- "property": "string",
- "operator": "string",
- "value": "string"
}
]
}
}{- "updatedId": "string"
}| id required | string The id of the requested resource |
curl -X DELETE 'https://api.growthbook.io/api/v1/metrics/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "string"
}| 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 |
| datasourceId | string Filter by Data Source |
| trackingKey | string Filter by experiment tracking key |
| experimentId | string Deprecated Filter the returned list by the experiment tracking key (not the internal experiment ID). Note, this was deprecated to help reduce confusion, consider using |
| status | string Enum: "draft" "running" "stopped" |
curl -X GET 'https://api.growthbook.io/api/v1/experiments' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "experiments": [
- {
- "id": "string",
- "trackingKey": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "type": "standard",
- "project": "string",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "owner": "string",
- "ownerEmail": "string",
- "archived": true,
- "status": "string",
- "autoRefresh": true,
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "hashVersion": 1,
- "disableStickyBucketing": true,
- "bucketVersion": 0,
- "minBucketVersion": 0,
- "variations": [
- {
- "variationId": "string",
- "key": "string",
- "name": "string",
- "description": "string",
- "screenshots": [
- "string"
]
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "reasonForStopping": "string",
- "seed": "string",
- "coverage": 0,
- "trafficSplit": [
- {
- "variationId": "string",
- "weight": 0
}
], - "namespace": {
- "namespaceId": "string",
- "enabled": true,
- "range": [
- 0,
- 0
], - "ranges": [
- [
- 0,
- 0
]
]
}, - "targetingCondition": "string",
- "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
]
}
], - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "resultSummary": {
- "status": "string",
- "winner": "string",
- "conclusions": "string",
- "releasedVariationId": "string",
- "excludeFromPayload": true
}, - "shareLevel": "public",
- "publicUrl": "string",
- "banditScheduleValue": 0,
- "banditScheduleUnit": "days",
- "banditBurnInValue": 0,
- "banditBurnInUnit": "days",
- "banditConversionWindowValue": 0,
- "banditConversionWindowUnit": "days",
- "linkedFeatures": [
- "string"
], - "hasVisualChangesets": true,
- "hasURLRedirects": true,
- "customFields": {
- "property1": null,
- "property2": null
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "precomputedUnitDimensionIds": [
- "string"
], - "defaultDashboardId": "string",
- "templateId": "string",
- "statusUpdateSchedule": {
- "startAt": "2019-08-24T14:15:22Z"
}, - "nextScheduledStatusUpdate": {
- "type": "start",
- "date": "2019-08-24T14:15:22Z"
}
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| datasourceId | string ID for the DataSource. Can only be set if a templateId is not provided. |
| assignmentQueryId | string The ID property of one of the assignment query objects associated with the datasource. Can only be set if a templateId is not provided. |
| trackingKey required | string |
| bypassDuplicateKeyCheck | boolean If true, allow creating an experiment even if another experiment with the same tracking key already exists. This is ignored if the organization requires unique tracking keys as a rule. |
| name required | string Name of the experiment |
| type | string Enum: "standard" "multi-armed-bandit" |
| project | string Project ID which the experiment belongs to |
| templateId | string ID of the ExperimentTemplate this experiment was created from. Template fields are applied by default and overridden by explicitly provided payload fields. |
| hypothesis | string Hypothesis of the experiment |
| description | string <= 10000 characters Description of the experiment |
| tags | Array of strings |
| metrics | Array of strings |
| secondaryMetrics | Array of strings |
| guardrailMetrics | Array of strings |
| activationMetric | string Users must convert on this metric before being included |
| segmentId | string Only users in this segment will be included |
| queryFilter | string WHERE clause to add to the default experiment query |
| 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. When omitted, it defaults to the user associated with the request's Personal Access Token (PAT), if one is being used. |
| archived | boolean |
| status | string Enum: "draft" "running" "stopped" |
| autoRefresh | boolean |
| hashAttribute | string |
| fallbackAttribute | string |
1 (number) or 2 (number) | |
| disableStickyBucketing | boolean |
| bucketVersion | number |
| minBucketVersion | number |
| releasedVariationId | string |
| excludeFromPayload | boolean |
| inProgressConversions | string Enum: "loose" "strict" |
| attributionModel | string Enum: "firstExposure" "experimentDuration" "lookbackOverride" Setting attribution model to |
object Controls the lookback override for the experiment. For type "window", value must be a non-negative number and valueUnit is required. | |
| statsEngine | string Enum: "bayesian" "frequentist" |
required | Array of objects >= 2 items |
Array of objects | |
| regressionAdjustmentEnabled | boolean Controls whether regression adjustment (CUPED) is enabled for experiment analyses |
| sequentialTestingEnabled | boolean Only applicable to frequentist analyses |
| sequentialTestingTuningParameter | number |
| shareLevel | string Enum: "public" "organization" |
| banditScheduleValue | number |
| banditScheduleUnit | string Enum: "days" "hours" |
| banditBurnInValue | number |
| banditBurnInUnit | string Enum: "days" "hours" |
| banditConversionWindowValue | number |
| banditConversionWindowUnit | string Enum: "days" "hours" |
boolean or null When null, the organization default is used. | |
object Controls the decision framework and metric overrides for the experiment. Replaces the entire stored object on update (does not patch individual fields). | |
Array of objects Per-metric analysis overrides for this experiment. Replaces the entire stored array (does not patch individual entries). | |
| defaultDashboardId | string ID of the default dashboard for this experiment. |
object | |
Array of objects Custom slices that apply to ALL applicable metrics in the experiment | |
| precomputedUnitDimensionIds | Array of strings <= 3 items |
object Schedule a future start for a draft experiment. Only |
{- "datasourceId": "string",
- "assignmentQueryId": "string",
- "trackingKey": "string",
- "bypassDuplicateKeyCheck": true,
- "name": "string",
- "type": "standard",
- "project": "string",
- "templateId": "string",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "metrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "owner": "string",
- "archived": true,
- "status": "draft",
- "autoRefresh": true,
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "hashVersion": 1,
- "disableStickyBucketing": true,
- "bucketVersion": 0,
- "minBucketVersion": 0,
- "releasedVariationId": "string",
- "excludeFromPayload": true,
- "inProgressConversions": "loose",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "variations": [
- {
- "id": "string",
- "key": "string",
- "name": "string",
- "description": "string",
- "screenshots": [
- {
- "path": "string",
- "width": 0,
- "height": 0,
- "description": "string"
}
]
}, - {
- "id": "string",
- "key": "string",
- "name": "string",
- "description": "string",
- "screenshots": [
- {
- "path": "string",
- "width": 0,
- "height": 0,
- "description": "string"
}
]
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "2019-08-24T14:15:22Z",
- "dateEnded": "2019-08-24T14:15:22Z",
- "reasonForStopping": "string",
- "seed": "string",
- "coverage": 0,
- "namespace": {
- "namespaceId": "string",
- "enabled": true,
- "range": [
- 0,
- 0
], - "ranges": [
- [
- 0,
- 0
]
]
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "reason": "string",
- "condition": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "variationWeights": [
- 0
]
}
], - "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "shareLevel": "public",
- "banditScheduleValue": 0,
- "banditScheduleUnit": "days",
- "banditBurnInValue": 0,
- "banditBurnInUnit": "days",
- "banditConversionWindowValue": 0,
- "banditConversionWindowUnit": "days",
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "defaultDashboardId": "string",
- "customFields": {
- "property1": "string",
- "property2": "string"
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "precomputedUnitDimensionIds": [
- "string"
], - "statusUpdateSchedule": {
- "startAt": "2019-08-24T14:15:22Z"
}
}{- "experiment": {
- "id": "string",
- "trackingKey": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "type": "standard",
- "project": "string",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "owner": "string",
- "ownerEmail": "string",
- "archived": true,
- "status": "string",
- "autoRefresh": true,
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "hashVersion": 1,
- "disableStickyBucketing": true,
- "bucketVersion": 0,
- "minBucketVersion": 0,
- "variations": [
- {
- "variationId": "string",
- "key": "string",
- "name": "string",
- "description": "string",
- "screenshots": [
- "string"
]
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "reasonForStopping": "string",
- "seed": "string",
- "coverage": 0,
- "trafficSplit": [
- {
- "variationId": "string",
- "weight": 0
}
], - "namespace": {
- "namespaceId": "string",
- "enabled": true,
- "range": [
- 0,
- 0
], - "ranges": [
- [
- 0,
- 0
]
]
}, - "targetingCondition": "string",
- "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
]
}
], - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "resultSummary": {
- "status": "string",
- "winner": "string",
- "conclusions": "string",
- "releasedVariationId": "string",
- "excludeFromPayload": true
}, - "shareLevel": "public",
- "publicUrl": "string",
- "banditScheduleValue": 0,
- "banditScheduleUnit": "days",
- "banditBurnInValue": 0,
- "banditBurnInUnit": "days",
- "banditConversionWindowValue": 0,
- "banditConversionWindowUnit": "days",
- "linkedFeatures": [
- "string"
], - "hasVisualChangesets": true,
- "hasURLRedirects": true,
- "customFields": {
- "property1": null,
- "property2": null
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "precomputedUnitDimensionIds": [
- "string"
], - "defaultDashboardId": "string",
- "templateId": "string",
- "statusUpdateSchedule": {
- "startAt": "2019-08-24T14:15:22Z"
}, - "nextScheduledStatusUpdate": {
- "type": "start",
- "date": "2019-08-24T14:15:22Z"
}
}
}Returns the latest non-dimension snapshot for each experiment matching the filters. Use this to scan results across a portfolio in one call.
Pagination semantics:
total is the count of experiments matching the filters.count is the length of the returned experimentResults array.experimentResults, so count may be less than the page slice and a page may legitimately return count: 0 while hasMore: true.hasMore and nextOffset advance over experiments matching the filters, not over returned results.Use the per-experiment GET /experiments/{id}/results endpoint to inspect specific phases or dimensions.
| 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 |
| datasourceId | string Filter by Data Source |
| trackingKey | string Filter by experiment tracking key |
| status | string Enum: "draft" "running" "stopped" |
curl -X GET 'https://api.growthbook.io/api/v1/experiments/results' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "experimentResults": [
- {
- "id": "string",
- "dateUpdated": "string",
- "experimentId": "string",
- "phase": "string",
- "dateStart": "string",
- "dateEnd": "string",
- "dimension": {
- "type": "string",
- "id": "string"
}, - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "queryIds": [
- "string"
], - "results": [
- {
- "dimension": "string",
- "totalUsers": 0,
- "checks": {
- "srm": 0
}, - "metrics": [
- {
- "metricId": "string",
- "metricName": "string",
- "variations": [
- {
- "variationId": "string",
- "variationName": "string",
- "users": 0,
- "analyses": [
- { }
]
}
]
}
]
}
]
}
], - "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/experiments/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "experiment": {
- "id": "string",
- "trackingKey": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "type": "standard",
- "project": "string",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "owner": "string",
- "ownerEmail": "string",
- "archived": true,
- "status": "string",
- "autoRefresh": true,
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "hashVersion": 1,
- "disableStickyBucketing": true,
- "bucketVersion": 0,
- "minBucketVersion": 0,
- "variations": [
- {
- "variationId": "string",
- "key": "string",
- "name": "string",
- "description": "string",
- "screenshots": [
- "string"
]
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "reasonForStopping": "string",
- "seed": "string",
- "coverage": 0,
- "trafficSplit": [
- {
- "variationId": "string",
- "weight": 0
}
], - "namespace": {
- "namespaceId": "string",
- "enabled": true,
- "range": [
- 0,
- 0
], - "ranges": [
- [
- 0,
- 0
]
]
}, - "targetingCondition": "string",
- "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
]
}
], - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "resultSummary": {
- "status": "string",
- "winner": "string",
- "conclusions": "string",
- "releasedVariationId": "string",
- "excludeFromPayload": true
}, - "shareLevel": "public",
- "publicUrl": "string",
- "banditScheduleValue": 0,
- "banditScheduleUnit": "days",
- "banditBurnInValue": 0,
- "banditBurnInUnit": "days",
- "banditConversionWindowValue": 0,
- "banditConversionWindowUnit": "days",
- "linkedFeatures": [
- "string"
], - "hasVisualChangesets": true,
- "hasURLRedirects": true,
- "customFields": {
- "property1": null,
- "property2": null
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "precomputedUnitDimensionIds": [
- "string"
], - "defaultDashboardId": "string",
- "templateId": "string",
- "statusUpdateSchedule": {
- "startAt": "2019-08-24T14:15:22Z"
}, - "nextScheduledStatusUpdate": {
- "type": "start",
- "date": "2019-08-24T14:15:22Z"
}, - "enhancedStatus": {
- "status": "Running",
- "detailedStatus": "string"
}
}
}| id required | string The id of the requested resource |
| datasourceId | string Can only be set if existing experiment does not have a datasource |
| assignmentQueryId | string |
| trackingKey | string |
| bypassDuplicateKeyCheck | boolean If true, allow updating the tracking key even if another experiment with the same tracking key already exist. This is ignored if the organization requires unique tracking keys as a rule. |
| name | string Name of the experiment |
| type | string Enum: "standard" "multi-armed-bandit" |
| project | string Project ID which the experiment belongs to |
| hypothesis | string Hypothesis of the experiment |
| description | string <= 10000 characters Description of the experiment |
| tags | Array of strings |
| metrics | Array of strings |
| secondaryMetrics | Array of strings |
| guardrailMetrics | Array of strings |
| activationMetric | string Users must convert on this metric before being included |
| segmentId | string Only users in this segment will be included |
| queryFilter | string WHERE clause to add to the default experiment query |
| 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. |
| archived | boolean |
| status | string Enum: "draft" "running" "stopped" |
| autoRefresh | boolean |
| hashAttribute | string |
| fallbackAttribute | string |
1 (number) or 2 (number) | |
| disableStickyBucketing | boolean |
| bucketVersion | number |
| minBucketVersion | number |
| results | string Enum: "dnf" "won" "lost" "inconclusive" The result status of the experiment. Maps to resultSummary.status in the GET response. |
| winner | number The index of the winning variation (0-indexed). Maps to resultSummary.winner (variation ID) in the GET response. |
| analysis | string Analysis summary or conclusions for the experiment. Maps to resultSummary.conclusions in the GET response. |
| releasedVariationId | string The ID of the released variation. Maps to resultSummary.releasedVariationId in the GET response. |
| excludeFromPayload | boolean If true, the experiment is excluded from the SDK payload. Maps to resultSummary.excludeFromPayload in the GET response. |
| inProgressConversions | string Enum: "loose" "strict" |
| attributionModel | string Enum: "firstExposure" "experimentDuration" "lookbackOverride" Setting attribution model to |
object Controls the lookback override for the experiment. For type "window", value must be a non-negative number and valueUnit is required. | |
| statsEngine | string Enum: "bayesian" "frequentist" |
Array of objects >= 2 items | |
Array of objects | |
| regressionAdjustmentEnabled | boolean Controls whether regression adjustment (CUPED) is enabled for experiment analyses |
| sequentialTestingEnabled | boolean Only applicable to frequentist analyses |
| sequentialTestingTuningParameter | number |
| shareLevel | string Enum: "public" "organization" |
| banditScheduleValue | number |
| banditScheduleUnit | string Enum: "days" "hours" |
| banditBurnInValue | number |
| banditBurnInUnit | string Enum: "days" "hours" |
| banditConversionWindowValue | number |
| banditConversionWindowUnit | string Enum: "days" "hours" |
boolean or null When null, the organization default is used. | |
object Controls the decision framework and metric overrides for the experiment. Replaces the entire stored object on update (does not patch individual fields). | |
Array of objects Per-metric analysis overrides for this experiment. Replaces the entire stored array (does not patch individual entries). | |
| defaultDashboardId | string ID of the default dashboard for this experiment. |
object | |
Array of objects Custom slices that apply to ALL applicable metrics in the experiment | |
object or null | |
| precomputedUnitDimensionIds | Array of strings <= 3 items |
{- "datasourceId": "string",
- "assignmentQueryId": "string",
- "trackingKey": "string",
- "bypassDuplicateKeyCheck": true,
- "name": "string",
- "type": "standard",
- "project": "string",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "metrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "owner": "string",
- "archived": true,
- "status": "draft",
- "autoRefresh": true,
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "hashVersion": 1,
- "disableStickyBucketing": true,
- "bucketVersion": 0,
- "minBucketVersion": 0,
- "results": "dnf",
- "winner": 0,
- "analysis": "string",
- "releasedVariationId": "string",
- "excludeFromPayload": true,
- "inProgressConversions": "loose",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "variations": [
- {
- "id": "string",
- "key": "string",
- "name": "string",
- "description": "string",
- "screenshots": [
- {
- "path": "string",
- "width": 0,
- "height": 0,
- "description": "string"
}
]
}, - {
- "id": "string",
- "key": "string",
- "name": "string",
- "description": "string",
- "screenshots": [
- {
- "path": "string",
- "width": 0,
- "height": 0,
- "description": "string"
}
]
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "2019-08-24T14:15:22Z",
- "dateEnded": "2019-08-24T14:15:22Z",
- "reasonForStopping": "string",
- "seed": "string",
- "coverage": 0,
- "namespace": {
- "namespaceId": "string",
- "range": [
- 0,
- 0
], - "enabled": true
}, - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "reason": "string",
- "condition": "string",
- "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
], - "variationWeights": [
- 0
]
}
], - "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "shareLevel": "public",
- "banditScheduleValue": 0,
- "banditScheduleUnit": "days",
- "banditBurnInValue": 0,
- "banditBurnInUnit": "days",
- "banditConversionWindowValue": 0,
- "banditConversionWindowUnit": "days",
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "defaultDashboardId": "string",
- "customFields": {
- "property1": "string",
- "property2": "string"
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "statusUpdateSchedule": {
- "startAt": "2019-08-24T14:15:22Z"
}, - "precomputedUnitDimensionIds": [
- "string"
]
}{- "experiment": {
- "id": "string",
- "trackingKey": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "type": "standard",
- "project": "string",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "owner": "string",
- "ownerEmail": "string",
- "archived": true,
- "status": "string",
- "autoRefresh": true,
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "hashVersion": 1,
- "disableStickyBucketing": true,
- "bucketVersion": 0,
- "minBucketVersion": 0,
- "variations": [
- {
- "variationId": "string",
- "key": "string",
- "name": "string",
- "description": "string",
- "screenshots": [
- "string"
]
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "reasonForStopping": "string",
- "seed": "string",
- "coverage": 0,
- "trafficSplit": [
- {
- "variationId": "string",
- "weight": 0
}
], - "namespace": {
- "namespaceId": "string",
- "enabled": true,
- "range": [
- 0,
- 0
], - "ranges": [
- [
- 0,
- 0
]
]
}, - "targetingCondition": "string",
- "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
]
}
], - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "resultSummary": {
- "status": "string",
- "winner": "string",
- "conclusions": "string",
- "releasedVariationId": "string",
- "excludeFromPayload": true
}, - "shareLevel": "public",
- "publicUrl": "string",
- "banditScheduleValue": 0,
- "banditScheduleUnit": "days",
- "banditBurnInValue": 0,
- "banditBurnInUnit": "days",
- "banditConversionWindowValue": 0,
- "banditConversionWindowUnit": "days",
- "linkedFeatures": [
- "string"
], - "hasVisualChangesets": true,
- "hasURLRedirects": true,
- "customFields": {
- "property1": null,
- "property2": null
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "precomputedUnitDimensionIds": [
- "string"
], - "defaultDashboardId": "string",
- "templateId": "string",
- "statusUpdateSchedule": {
- "startAt": "2019-08-24T14:15:22Z"
}, - "nextScheduledStatusUpdate": {
- "type": "start",
- "date": "2019-08-24T14:15:22Z"
}
}
}| id required | string The id of the requested resource |
curl -X GET 'https://api.growthbook.io/api/v1/experiments/exp_abc123/start-checklist' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "checklistItems": [
- {
- "key": "string",
- "required": true,
- "status": "complete",
- "manual": true,
- "reason": "string"
}
], - "status": "ready"
}| id required | string The id of the requested resource |
| phase | string |
| dimension | string |
curl -X GET 'https://api.growthbook.io/api/v1/experiments/{id}/results' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "experiment": {
- "id": "string",
- "trackingKey": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "type": "standard",
- "project": "string",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "owner": "string",
- "ownerEmail": "string",
- "archived": true,
- "status": "string",
- "autoRefresh": true,
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "hashVersion": 1,
- "disableStickyBucketing": true,
- "bucketVersion": 0,
- "minBucketVersion": 0,
- "variations": [
- {
- "variationId": "string",
- "key": "string",
- "name": "string",
- "description": "string",
- "screenshots": [
- "string"
]
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "reasonForStopping": "string",
- "seed": "string",
- "coverage": 0,
- "trafficSplit": [
- {
- "variationId": "string",
- "weight": 0
}
], - "namespace": {
- "namespaceId": "string",
- "enabled": true,
- "range": [
- 0,
- 0
], - "ranges": [
- [
- 0,
- 0
]
]
}, - "targetingCondition": "string",
- "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
]
}
], - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "resultSummary": {
- "status": "string",
- "winner": "string",
- "conclusions": "string",
- "releasedVariationId": "string",
- "excludeFromPayload": true
}, - "shareLevel": "public",
- "publicUrl": "string",
- "banditScheduleValue": 0,
- "banditScheduleUnit": "days",
- "banditBurnInValue": 0,
- "banditBurnInUnit": "days",
- "banditConversionWindowValue": 0,
- "banditConversionWindowUnit": "days",
- "linkedFeatures": [
- "string"
], - "hasVisualChangesets": true,
- "hasURLRedirects": true,
- "customFields": {
- "property1": null,
- "property2": null
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "precomputedUnitDimensionIds": [
- "string"
], - "defaultDashboardId": "string",
- "templateId": "string",
- "statusUpdateSchedule": {
- "startAt": "2019-08-24T14:15:22Z"
}, - "nextScheduledStatusUpdate": {
- "type": "start",
- "date": "2019-08-24T14:15:22Z"
}
}, - "result": {
- "id": "string",
- "dateUpdated": "string",
- "experimentId": "string",
- "phase": "string",
- "dateStart": "string",
- "dateEnd": "string",
- "dimension": {
- "type": "string",
- "id": "string"
}, - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "queryIds": [
- "string"
], - "results": [
- {
- "dimension": "string",
- "totalUsers": 0,
- "checks": {
- "srm": 0
}, - "metrics": [
- {
- "metricId": "string",
- "metricName": "string",
- "variations": [
- {
- "variationId": "string",
- "variationName": "string",
- "users": 0,
- "analyses": [
- {
- "engine": null,
- "numerator": null,
- "denominator": null,
- "mean": null,
- "stddev": null,
- "percentChange": null,
- "ciLow": null,
- "ciHigh": null,
- "pValue": null,
- "risk": null,
- "chanceToBeatControl": null
}
]
}
]
}
]
}
]
}
}Starts an experiment or stages it for a future start if a statusUpdateSchedule is set on the experiment.
| id required | string The id of the requested resource |
| skipChecklist | boolean If true, skips validating the experiment satisifies all pre-launch checklist items |
{- "skipChecklist": true
}{- "experiment": {
- "id": "string",
- "trackingKey": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "type": "standard",
- "project": "string",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "owner": "string",
- "ownerEmail": "string",
- "archived": true,
- "status": "string",
- "autoRefresh": true,
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "hashVersion": 1,
- "disableStickyBucketing": true,
- "bucketVersion": 0,
- "minBucketVersion": 0,
- "variations": [
- {
- "variationId": "string",
- "key": "string",
- "name": "string",
- "description": "string",
- "screenshots": [
- "string"
]
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "reasonForStopping": "string",
- "seed": "string",
- "coverage": 0,
- "trafficSplit": [
- {
- "variationId": "string",
- "weight": 0
}
], - "namespace": {
- "namespaceId": "string",
- "enabled": true,
- "range": [
- 0,
- 0
], - "ranges": [
- [
- 0,
- 0
]
]
}, - "targetingCondition": "string",
- "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
]
}
], - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "resultSummary": {
- "status": "string",
- "winner": "string",
- "conclusions": "string",
- "releasedVariationId": "string",
- "excludeFromPayload": true
}, - "shareLevel": "public",
- "publicUrl": "string",
- "banditScheduleValue": 0,
- "banditScheduleUnit": "days",
- "banditBurnInValue": 0,
- "banditBurnInUnit": "days",
- "banditConversionWindowValue": 0,
- "banditConversionWindowUnit": "days",
- "linkedFeatures": [
- "string"
], - "hasVisualChangesets": true,
- "hasURLRedirects": true,
- "customFields": {
- "property1": null,
- "property2": null
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "precomputedUnitDimensionIds": [
- "string"
], - "defaultDashboardId": "string",
- "templateId": "string",
- "statusUpdateSchedule": {
- "startAt": "2019-08-24T14:15:22Z"
}, - "nextScheduledStatusUpdate": {
- "type": "start",
- "date": "2019-08-24T14:15:22Z"
}, - "enhancedStatus": {
- "status": "Running",
- "detailedStatus": "string"
}
}, - "message": "string"
}| id required | string The id of the requested resource |
| keys required | Array of strings non-empty Manual pre-launch checklist item keys to mark as complete (auto-computed items cannot be updated via this endpoint). |
{- "keys": [
- "string"
]
}{- "checklistItems": [
- {
- "key": "string",
- "required": true,
- "status": "complete",
- "manual": true,
- "reason": "string"
}
], - "status": "ready"
}| id required | string The id of the requested resource |
| results required | string Enum: "dnf" "won" "lost" "inconclusive" The experiment conclusion status. |
| enableTemporaryRollout | boolean If true, include this stopped experiment in SDK payload and force the release variation ( |
| releasedVariationId | string Required if enableTemporaryRollout is true. Variation ID (e.g. var_abc123) to release to 100% of traffic eligible for this experiment. |
| winnerVariationId | string Variation ID (e.g. var_abc123) of the winning variation. Used only as metadata. Required if results is 'won' and there are multiple test variations. Otherwise, defaults to the test variation when results is 'won' and to the baseline variation for other results. |
| analysis | string Optional markdown summary displayed on the experiment results page. |
| reason | string Optional reason for ending the phase stored on the latest phase metadata. |
| dateEnded | string Optional ISO datetime for ending the latest phase. Defaults to the current date and time. |
{- "results": "dnf",
- "enableTemporaryRollout": true,
- "releasedVariationId": "string",
- "winnerVariationId": "string",
- "analysis": "string",
- "reason": "string",
- "dateEnded": "string"
}{- "experiment": {
- "id": "string",
- "trackingKey": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "type": "standard",
- "project": "string",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "owner": "string",
- "ownerEmail": "string",
- "archived": true,
- "status": "string",
- "autoRefresh": true,
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "hashVersion": 1,
- "disableStickyBucketing": true,
- "bucketVersion": 0,
- "minBucketVersion": 0,
- "variations": [
- {
- "variationId": "string",
- "key": "string",
- "name": "string",
- "description": "string",
- "screenshots": [
- "string"
]
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "reasonForStopping": "string",
- "seed": "string",
- "coverage": 0,
- "trafficSplit": [
- {
- "variationId": "string",
- "weight": 0
}
], - "namespace": {
- "namespaceId": "string",
- "enabled": true,
- "range": [
- 0,
- 0
], - "ranges": [
- [
- 0,
- 0
]
]
}, - "targetingCondition": "string",
- "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
]
}
], - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "resultSummary": {
- "status": "string",
- "winner": "string",
- "conclusions": "string",
- "releasedVariationId": "string",
- "excludeFromPayload": true
}, - "shareLevel": "public",
- "publicUrl": "string",
- "banditScheduleValue": 0,
- "banditScheduleUnit": "days",
- "banditBurnInValue": 0,
- "banditBurnInUnit": "days",
- "banditConversionWindowValue": 0,
- "banditConversionWindowUnit": "days",
- "linkedFeatures": [
- "string"
], - "hasVisualChangesets": true,
- "hasURLRedirects": true,
- "customFields": {
- "property1": null,
- "property2": null
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "precomputedUnitDimensionIds": [
- "string"
], - "defaultDashboardId": "string",
- "templateId": "string",
- "statusUpdateSchedule": {
- "startAt": "2019-08-24T14:15:22Z"
}, - "nextScheduledStatusUpdate": {
- "type": "start",
- "date": "2019-08-24T14:15:22Z"
}, - "enhancedStatus": {
- "status": "Running",
- "detailedStatus": "string"
}
}
}| id required | string The id of the requested resource |
| enableTemporaryRollout required | boolean If true, keep the stopped experiment in SDK payload and force traffic to the winner variation. If false, end temporary rollout and remove from SDK payload. |
| releasedVariationId | string Variation ID (e.g. var_abc123) to release to 100% of traffic eligible for this experiment. Required if enableTemporaryRollout is true. |
{- "enableTemporaryRollout": true,
- "releasedVariationId": "string"
}{- "experiment": {
- "id": "string",
- "trackingKey": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "type": "standard",
- "project": "string",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "owner": "string",
- "ownerEmail": "string",
- "archived": true,
- "status": "string",
- "autoRefresh": true,
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "hashVersion": 1,
- "disableStickyBucketing": true,
- "bucketVersion": 0,
- "minBucketVersion": 0,
- "variations": [
- {
- "variationId": "string",
- "key": "string",
- "name": "string",
- "description": "string",
- "screenshots": [
- "string"
]
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "reasonForStopping": "string",
- "seed": "string",
- "coverage": 0,
- "trafficSplit": [
- {
- "variationId": "string",
- "weight": 0
}
], - "namespace": {
- "namespaceId": "string",
- "enabled": true,
- "range": [
- 0,
- 0
], - "ranges": [
- [
- 0,
- 0
]
]
}, - "targetingCondition": "string",
- "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
]
}
], - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "resultSummary": {
- "status": "string",
- "winner": "string",
- "conclusions": "string",
- "releasedVariationId": "string",
- "excludeFromPayload": true
}, - "shareLevel": "public",
- "publicUrl": "string",
- "banditScheduleValue": 0,
- "banditScheduleUnit": "days",
- "banditBurnInValue": 0,
- "banditBurnInUnit": "days",
- "banditConversionWindowValue": 0,
- "banditConversionWindowUnit": "days",
- "linkedFeatures": [
- "string"
], - "hasVisualChangesets": true,
- "hasURLRedirects": true,
- "customFields": {
- "property1": null,
- "property2": null
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "precomputedUnitDimensionIds": [
- "string"
], - "defaultDashboardId": "string",
- "templateId": "string",
- "statusUpdateSchedule": {
- "startAt": "2019-08-24T14:15:22Z"
}, - "nextScheduledStatusUpdate": {
- "type": "start",
- "date": "2019-08-24T14:15:22Z"
}, - "enhancedStatus": {
- "status": "Running",
- "detailedStatus": "string"
}
}
}| id required | string The experiment id of the experiment to update |
| triggeredBy | string Enum: "manual" "schedule" Set to "schedule" if you want this request to trigger notifications and other events as it if were a scheduled update. Defaults to manual. |
| dimension | string Dimension to break results down by. For Unit Dimensions, use the dimension id (e.g. "dim_abc123"). For Experiment Dimensions, use "exp: |
| phase | integer >= 0 Zero-based phase index to snapshot, where 0 is the first experiment phase. Defaults to the latest phase. |
{- "triggeredBy": "manual",
- "dimension": "string",
- "phase": 0
}{- "snapshot": {
- "id": "string",
- "experiment": "string",
- "status": "string"
}
}| id required | string |
| variationId required | string |
| screenshot required | string <base64> Base64-encoded screenshot data |
| contentType required | string Enum: "image/png" "image/jpeg" "image/gif" MIME type of the screenshot |
| description | string Optional description for the screenshot |
{- "screenshot": "string",
- "contentType": "image/png",
- "description": "string"
}{- "screenshot": {
- "path": "string",
- "description": "string"
}
}| id required | string |
| variationId required | string |
| path required | string The screenshot path/URL to delete (from upload response) |
{- "path": "string"
}{ }| projectId | string Filter by project id |
curl -X GET 'https://api.growthbook.io/api/v1/experiment-names' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "experiments": [
- {
- "id": "string",
- "name": "string"
}
]
}Namespaces partition your user population into buckets so that experiments using the same hash attribute do not overlap unintentionally. Each namespace defines a 0–1 range and individual experiments claim sub-ranges within it.
| 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/namespaces' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "namespaces": [
- {
- "id": "string",
- "displayName": "string",
- "description": "string",
- "status": "active",
- "format": "legacy",
- "hashAttribute": "string",
- "seed": "string"
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| displayName required | string Human-readable display name. Must be unique within the organization. |
| description | string |
| status | string Enum: "active" "inactive" |
| format | string Enum: "legacy" "multiRange" Namespace format. Defaults to 'multiRange', which supports multiple ranges per experiment and a configurable hash attribute. |
| hashAttribute | string Required when format is 'multiRange'. The user attribute (e.g. 'id', 'device_id') used to assign users to namespace buckets. |
{- "displayName": "string",
- "description": "string",
- "status": "active",
- "format": "legacy",
- "hashAttribute": "string"
}{- "namespace": {
- "id": "string",
- "displayName": "string",
- "description": "string",
- "status": "active",
- "format": "legacy",
- "hashAttribute": "string",
- "seed": "string"
}
}| id required | string The unique id of the namespace |
curl -X GET 'https://api.growthbook.io/api/v1/namespaces/ns-abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "namespace": {
- "id": "string",
- "displayName": "string",
- "description": "string",
- "status": "active",
- "format": "legacy",
- "hashAttribute": "string",
- "seed": "string"
}
}| id required | string The unique id of the namespace |
| displayName | string Human-readable display name. |
| description | string Namespace description. |
| status | string Enum: "active" "inactive" Set to 'inactive' to disable the namespace. |
| hashAttribute | string Only applies to multiRange namespaces. Changes which user attribute is used for bucket hashing going forward. |
{- "displayName": "string",
- "description": "string",
- "status": "active",
- "hashAttribute": "string"
}{- "namespace": {
- "id": "string",
- "displayName": "string",
- "description": "string",
- "status": "active",
- "format": "legacy",
- "hashAttribute": "string",
- "seed": "string"
}
}Permanently removes a namespace from the organization. Returns a 409 error if any active experiments currently reference this namespace — disable or remove those references first.
| id required | string The unique id of the namespace |
curl -X DELETE 'https://api.growthbook.io/api/v1/namespaces/ns-abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "ns-abc123"
}| id required | string The unique id of the namespace |
| 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/namespaces/ns-abc123/memberships' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "experiments": [
- {
- "id": "string",
- "name": "string",
- "trackingKey": "string",
- "status": "draft",
- "ranges": [
- [
- 0,
- 0
]
]
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}⚠️ Dangerous: sets a new seed for a multiRange namespace. Every user's bucket position within the namespace is re-computed immediately, which re-randomizes traffic eligibility for all experiments currently using this namespace. Only do this if you intentionally want to reshuffle all allocations across experiments. This could be useful when re-using a namespace for a new set of experiments.
| id required | string The unique id of the namespace |
| seed | string A specific value to use as the new seed. If omitted, a random value is generated. |
{- "seed": "string"
}{- "namespace": {
- "id": "string",
- "displayName": "string",
- "description": "string",
- "status": "active",
- "format": "legacy",
- "hashAttribute": "string",
- "seed": "string"
}
}| id required | string The experiment id of the experiment to update |
| triggeredBy | string Enum: "manual" "schedule" Set to "schedule" if you want this request to trigger notifications and other events as it if were a scheduled update. Defaults to manual. |
| dimension | string Dimension to break results down by. For Unit Dimensions, use the dimension id (e.g. "dim_abc123"). For Experiment Dimensions, use "exp: |
| phase | integer >= 0 Zero-based phase index to snapshot, where 0 is the first experiment phase. Defaults to the latest phase. |
{- "triggeredBy": "manual",
- "dimension": "string",
- "phase": 0
}{- "snapshot": {
- "id": "string",
- "experiment": "string",
- "status": "string"
}
}| id required | string The id of the requested resource (a snapshot ID, not experiment ID) |
curl -X GET 'https://api.growthbook.io/api/v1/snapshots/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "snapshot": {
- "id": "string",
- "experiment": "string",
- "status": "string"
}
}| 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 |
curl -X GET 'https://api.growthbook.io/api/v1/dimensions' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "dimensions": [
- {
- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "owner": "string",
- "ownerEmail": "string",
- "datasourceId": "string",
- "identifierType": "string",
- "name": "string",
- "description": "string",
- "query": "string",
- "managedBy": ""
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| name required | string Name of the dimension |
| description | string <= 10000 characters Description of the dimension |
| 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. |
| datasourceId required | string ID of the datasource this dimension belongs to |
| identifierType required | string Type of identifier (user, anonymous, etc.) |
| query required | string SQL query or equivalent for the dimension |
| managedBy | string Enum: "" "api" Where this dimension must be managed from. If not set (empty string), it can be managed from anywhere. |
{- "name": "string",
- "description": "string",
- "owner": "string",
- "datasourceId": "string",
- "identifierType": "string",
- "query": "string",
- "managedBy": ""
}{- "dimension": {
- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "owner": "string",
- "ownerEmail": "string",
- "datasourceId": "string",
- "identifierType": "string",
- "name": "string",
- "description": "string",
- "query": "string",
- "managedBy": ""
}
}| id required | string The id of the requested resource |
curl -X GET 'https://api.growthbook.io/api/v1/dimensions/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "dimension": {
- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "owner": "string",
- "ownerEmail": "string",
- "datasourceId": "string",
- "identifierType": "string",
- "name": "string",
- "description": "string",
- "query": "string",
- "managedBy": ""
}
}| id required | string The id of the requested resource |
| name | string Name of the dimension |
| description | string <= 10000 characters Description of the dimension |
| 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. |
| datasourceId | string ID of the datasource this dimension belongs to |
| identifierType | string Type of identifier (user, anonymous, etc.) |
| query | string SQL query or equivalent for the dimension |
| managedBy | string Enum: "" "api" Where this dimension must be managed from. If not set (empty string), it can be managed from anywhere. |
{- "name": "string",
- "description": "string",
- "owner": "string",
- "datasourceId": "string",
- "identifierType": "string",
- "query": "string",
- "managedBy": ""
}{- "dimension": {
- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "owner": "string",
- "ownerEmail": "string",
- "datasourceId": "string",
- "identifierType": "string",
- "name": "string",
- "description": "string",
- "query": "string",
- "managedBy": ""
}
}| id required | string The id of the requested resource |
curl -X DELETE 'https://api.growthbook.io/api/v1/dimensions/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "dim_123abc"
}| 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 |
curl -X GET 'https://api.growthbook.io/api/v1/segments' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "segments": [
- {
- "id": "string",
- "owner": "string",
- "ownerEmail": "string",
- "datasourceId": "string",
- "identifierType": "string",
- "name": "string",
- "description": "string",
- "query": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "managedBy": "",
- "type": "SQL",
- "factTableId": "string",
- "filters": [
- "string"
], - "projects": [
- "string"
]
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| name required | string Name of the segment |
| 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. |
| description | string <= 10000 characters Description of the segment |
| datasourceId required | string ID of the datasource this segment belongs to |
| identifierType required | string Type of identifier (user, anonymous, etc.) |
| projects | Array of strings List of project IDs for projects that can access this segment |
| managedBy | string Enum: "" "api" Where this Segment must be managed from. If not set (empty string), it can be managed from anywhere. |
| type required | string Enum: "SQL" "FACT" GrowthBook supports two types of Segments, SQL and FACT. SQL segments are defined by a SQL query, and FACT segments are defined by a fact table and filters. |
| query | string SQL query that defines the Segment. This is required for SQL segments. |
| factTableId | string ID of the fact table this segment belongs to. This is required for FACT segments. |
| filters | Array of strings Optional array of fact table filter ids that can further define the Fact Table based Segment. |
{- "name": "string",
- "owner": "string",
- "description": "string",
- "datasourceId": "string",
- "identifierType": "string",
- "projects": [
- "string"
], - "managedBy": "",
- "type": "SQL",
- "query": "string",
- "factTableId": "string",
- "filters": [
- "string"
]
}{- "segment": {
- "id": "string",
- "owner": "string",
- "ownerEmail": "string",
- "datasourceId": "string",
- "identifierType": "string",
- "name": "string",
- "description": "string",
- "query": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "managedBy": "",
- "type": "SQL",
- "factTableId": "string",
- "filters": [
- "string"
], - "projects": [
- "string"
]
}
}| id required | string The id of the requested resource |
curl -X GET 'https://api.growthbook.io/api/v1/segments/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "segment": {
- "id": "string",
- "owner": "string",
- "ownerEmail": "string",
- "datasourceId": "string",
- "identifierType": "string",
- "name": "string",
- "description": "string",
- "query": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "managedBy": "",
- "type": "SQL",
- "factTableId": "string",
- "filters": [
- "string"
], - "projects": [
- "string"
]
}
}| id required | string The id of the requested resource |
| name | string Name of the segment |
| 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. |
| description | string <= 10000 characters Description of the segment |
| datasourceId | string ID of the datasource this segment belongs to |
| identifierType | string Type of identifier (user, anonymous, etc.) |
| projects | Array of strings List of project IDs for projects that can access this segment |
| managedBy | string Enum: "" "api" Where this Segment must be managed from. If not set (empty string), it can be managed from anywhere. |
| type | string Enum: "SQL" "FACT" GrowthBook supports two types of Segments, SQL and FACT. SQL segments are defined by a SQL query, and FACT segments are defined by a fact table and filters. |
| query | string SQL query that defines the Segment. This is required for SQL segments. |
| factTableId | string ID of the fact table this segment belongs to. This is required for FACT segments. |
| filters | Array of strings Optional array of fact table filter ids that can further define the Fact Table based Segment. |
{- "name": "string",
- "owner": "string",
- "description": "string",
- "datasourceId": "string",
- "identifierType": "string",
- "projects": [
- "string"
], - "managedBy": "",
- "type": "SQL",
- "query": "string",
- "factTableId": "string",
- "filters": [
- "string"
]
}{- "segment": {
- "id": "string",
- "owner": "string",
- "ownerEmail": "string",
- "datasourceId": "string",
- "identifierType": "string",
- "name": "string",
- "description": "string",
- "query": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "managedBy": "",
- "type": "SQL",
- "factTableId": "string",
- "filters": [
- "string"
], - "projects": [
- "string"
]
}
}| id required | string The id of the requested resource |
curl -X DELETE 'https://api.growthbook.io/api/v1/segments/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "seg_123abc"
}Custom analysis reports built on top of experiment snapshots. Reports let you re-run analysis with different metrics, date ranges, stats engines, and other settings without modifying the underlying experiment.
| 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) |
| experimentId | string Filter reports by experiment id |
curl -X GET 'https://api.growthbook.io/api/v1/reports' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "reports": [
- {
- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "title": "string",
- "description": "string",
- "type": "experiment-snapshot",
- "status": "published",
- "shareLevel": "public",
- "shareUrl": "string",
- "experimentId": "string",
- "snapshotId": "string",
- "snapshotStatus": "running",
- "snapshotError": "string",
- "analysisSettings": {
- "statsEngine": "bayesian",
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "winRisk": 0,
- "loseRisk": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "dimension": "string",
- "differenceType": "relative",
- "dateStarted": "2019-08-24T14:15:22Z",
- "dateEnded": "2019-08-24T14:15:22Z",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": null
}, - "trackingKey": "string",
- "exposureQueryId": "string",
- "segment": "string",
- "queryFilter": "string",
- "skipPartialData": true
}, - "experimentMetadata": {
- "type": "standard",
- "variations": [
- {
- "id": "string",
- "name": "string",
- "key": "string",
- "weight": 0
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "coverage": 0
}
]
}, - "results": {
- "id": "string",
- "dateUpdated": "string",
- "experimentId": "string",
- "phase": "string",
- "dateStart": "string",
- "dateEnd": "string",
- "dimension": {
- "type": "string",
- "id": "string"
}, - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "queryIds": [
- "string"
], - "results": [
- {
- "dimension": "string",
- "totalUsers": 0,
- "checks": {
- "srm": 0
}, - "metrics": [
- {
- "metricId": "string",
- "metricName": "string",
- "variations": [
- {
- "variationId": null,
- "variationName": null,
- "users": null,
- "analyses": [ ]
}
]
}
]
}
]
}
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| experimentId required | string The experiment to create a report for |
| title | string Report title (defaults to experiment name) |
| description | string Report description |
| statsEngine | string Enum: "bayesian" "frequentist" Stats engine override |
| goalMetrics | Array of strings Goal metric IDs (defaults to experiment's goal metrics) |
| secondaryMetrics | Array of strings Secondary metric IDs (defaults to experiment's secondary metrics) |
| guardrailMetrics | Array of strings Guardrail metric IDs (defaults to experiment's guardrail metrics) |
| activationMetric | string Activation metric ID |
| dimension | string Dimension to cut results by |
| dateStarted | string <date-time> Analysis start date (ISO 8601) |
| dateEnded | string <date-time> Analysis end date (ISO 8601) |
| regressionAdjustmentEnabled | boolean Enable CUPED regression adjustment |
| sequentialTestingEnabled | boolean Enable sequential testing |
| sequentialTestingTuningParameter | number Tuning parameter for sequential testing (frequentist only) |
| differenceType | string Enum: "relative" "absolute" "scaled" How lifts are expressed in results. Defaults to experiment setting. |
| attributionModel | string Enum: "firstExposure" "experimentDuration" "lookbackOverride" Metric conversion window attribution model. Defaults to experiment setting. |
object or object Lookback window when | |
Array of objects Per-metric window, risk, and regression-adjustment overrides | |
Array of objects Custom metric slice definitions | |
| segment | string Segment ID to filter users by. Defaults to experiment setting. |
| queryFilter | string Raw SQL WHERE clause added to the exposure query. Defaults to experiment setting. |
| skipPartialData | boolean When true, exclude users who have not completed the full conversion window. |
| shareLevel | string Enum: "public" "organization" "private" Visibility of the created report. Defaults to |
{- "experimentId": "string",
- "title": "string",
- "description": "string",
- "statsEngine": "bayesian",
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "dimension": "string",
- "dateStarted": "2019-08-24T14:15:22Z",
- "dateEnded": "2019-08-24T14:15:22Z",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "differenceType": "relative",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": null
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "winRisk": 0,
- "loseRisk": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "segment": "string",
- "queryFilter": "string",
- "skipPartialData": true,
- "shareLevel": "public"
}{- "report": {
- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "title": "string",
- "description": "string",
- "type": "experiment-snapshot",
- "status": "published",
- "shareLevel": "public",
- "shareUrl": "string",
- "experimentId": "string",
- "snapshotId": "string",
- "snapshotStatus": "running",
- "snapshotError": "string",
- "analysisSettings": {
- "statsEngine": "bayesian",
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "winRisk": 0,
- "loseRisk": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "dimension": "string",
- "differenceType": "relative",
- "dateStarted": "2019-08-24T14:15:22Z",
- "dateEnded": "2019-08-24T14:15:22Z",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": null
}, - "trackingKey": "string",
- "exposureQueryId": "string",
- "segment": "string",
- "queryFilter": "string",
- "skipPartialData": true
}, - "experimentMetadata": {
- "type": "standard",
- "variations": [
- {
- "id": "string",
- "name": "string",
- "key": "string",
- "weight": 0
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "coverage": 0
}
]
}, - "results": {
- "id": "string",
- "dateUpdated": "string",
- "experimentId": "string",
- "phase": "string",
- "dateStart": "string",
- "dateEnd": "string",
- "dimension": {
- "type": "string",
- "id": "string"
}, - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "queryIds": [
- "string"
], - "results": [
- {
- "dimension": "string",
- "totalUsers": 0,
- "checks": {
- "srm": 0
}, - "metrics": [
- {
- "metricId": "string",
- "metricName": "string",
- "variations": [
- {
- "variationId": "string",
- "variationName": "string",
- "users": 0,
- "analyses": [
- { }
]
}
]
}
]
}
]
}
}
}| id required | string The id of the requested resource |
curl -X GET 'https://api.growthbook.io/api/v1/reports/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "report": {
- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "title": "string",
- "description": "string",
- "type": "experiment-snapshot",
- "status": "published",
- "shareLevel": "public",
- "shareUrl": "string",
- "experimentId": "string",
- "snapshotId": "string",
- "snapshotStatus": "running",
- "snapshotError": "string",
- "analysisSettings": {
- "statsEngine": "bayesian",
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "winRisk": 0,
- "loseRisk": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "dimension": "string",
- "differenceType": "relative",
- "dateStarted": "2019-08-24T14:15:22Z",
- "dateEnded": "2019-08-24T14:15:22Z",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": null
}, - "trackingKey": "string",
- "exposureQueryId": "string",
- "segment": "string",
- "queryFilter": "string",
- "skipPartialData": true
}, - "experimentMetadata": {
- "type": "standard",
- "variations": [
- {
- "id": "string",
- "name": "string",
- "key": "string",
- "weight": 0
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "coverage": 0
}
]
}, - "results": {
- "id": "string",
- "dateUpdated": "string",
- "experimentId": "string",
- "phase": "string",
- "dateStart": "string",
- "dateEnd": "string",
- "dimension": {
- "type": "string",
- "id": "string"
}, - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "queryIds": [
- "string"
], - "results": [
- {
- "dimension": "string",
- "totalUsers": 0,
- "checks": {
- "srm": 0
}, - "metrics": [
- {
- "metricId": "string",
- "metricName": "string",
- "variations": [
- {
- "variationId": "string",
- "variationName": "string",
- "users": 0,
- "analyses": [
- { }
]
}
]
}
]
}
]
}
}
}| id required | string The id of the requested resource |
curl -X POST 'https://api.growthbook.io/api/v1/reports/{id}/refresh' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "report": {
- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "title": "string",
- "description": "string",
- "type": "experiment-snapshot",
- "status": "published",
- "shareLevel": "public",
- "shareUrl": "string",
- "experimentId": "string",
- "snapshotId": "string",
- "snapshotStatus": "running",
- "snapshotError": "string",
- "analysisSettings": {
- "statsEngine": "bayesian",
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "winRisk": 0,
- "loseRisk": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "dimension": "string",
- "differenceType": "relative",
- "dateStarted": "2019-08-24T14:15:22Z",
- "dateEnded": "2019-08-24T14:15:22Z",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": null
}, - "trackingKey": "string",
- "exposureQueryId": "string",
- "segment": "string",
- "queryFilter": "string",
- "skipPartialData": true
}, - "experimentMetadata": {
- "type": "standard",
- "variations": [
- {
- "id": "string",
- "name": "string",
- "key": "string",
- "weight": 0
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "coverage": 0
}
]
}, - "results": {
- "id": "string",
- "dateUpdated": "string",
- "experimentId": "string",
- "phase": "string",
- "dateStart": "string",
- "dateEnd": "string",
- "dimension": {
- "type": "string",
- "id": "string"
}, - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "queryIds": [
- "string"
], - "results": [
- {
- "dimension": "string",
- "totalUsers": 0,
- "checks": {
- "srm": 0
}, - "metrics": [
- {
- "metricId": "string",
- "metricName": "string",
- "variations": [
- {
- "variationId": "string",
- "variationName": "string",
- "users": 0,
- "analyses": [
- { }
]
}
]
}
]
}
]
}
}
}| id required | string The id of the requested resource |
| title | string Report title |
| description | string Report description |
| status | string Enum: "published" "private" UI lifecycle marker for the report |
| shareLevel | string Enum: "public" "organization" "private" Visibility of the report. Setting to |
| editLevel | string Enum: "organization" "private" Who can edit the report in the GrowthBook UI. |
{- "title": "string",
- "description": "string",
- "status": "published",
- "shareLevel": "public",
- "editLevel": "organization"
}{- "report": {
- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "title": "string",
- "description": "string",
- "type": "experiment-snapshot",
- "status": "published",
- "shareLevel": "public",
- "shareUrl": "string",
- "experimentId": "string",
- "snapshotId": "string",
- "snapshotStatus": "running",
- "snapshotError": "string",
- "analysisSettings": {
- "statsEngine": "bayesian",
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "winRisk": 0,
- "loseRisk": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "dimension": "string",
- "differenceType": "relative",
- "dateStarted": "2019-08-24T14:15:22Z",
- "dateEnded": "2019-08-24T14:15:22Z",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": null
}, - "trackingKey": "string",
- "exposureQueryId": "string",
- "segment": "string",
- "queryFilter": "string",
- "skipPartialData": true
}, - "experimentMetadata": {
- "type": "standard",
- "variations": [
- {
- "id": "string",
- "name": "string",
- "key": "string",
- "weight": 0
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "coverage": 0
}
]
}, - "results": {
- "id": "string",
- "dateUpdated": "string",
- "experimentId": "string",
- "phase": "string",
- "dateStart": "string",
- "dateEnd": "string",
- "dimension": {
- "type": "string",
- "id": "string"
}, - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "queryIds": [
- "string"
], - "results": [
- {
- "dimension": "string",
- "totalUsers": 0,
- "checks": {
- "srm": 0
}, - "metrics": [
- {
- "metricId": "string",
- "metricName": "string",
- "variations": [
- {
- "variationId": "string",
- "variationName": "string",
- "users": 0,
- "analyses": [
- { }
]
}
]
}
]
}
]
}
}
}Updates the analysis settings for an existing report. Changes are staged and do not take effect until you call POST /reports/:id/refresh.
| id required | string The id of the requested resource |
| statsEngine | string Enum: "bayesian" "frequentist" Stats engine override |
| goalMetrics | Array of strings Goal metric IDs |
| secondaryMetrics | Array of strings Secondary metric IDs |
| guardrailMetrics | Array of strings Guardrail metric IDs |
| activationMetric | string Activation metric ID |
Array of objects Per-metric window, risk, and regression-adjustment overrides | |
Array of objects Custom metric slice definitions | |
| dimension | string Dimension to cut results by |
| differenceType | string Enum: "relative" "absolute" "scaled" How lifts are expressed in results |
| dateStarted | string <date-time> Analysis start date (ISO 8601) |
string or null Analysis end date (ISO 8601). Pass | |
| regressionAdjustmentEnabled | boolean Enable CUPED regression adjustment |
| sequentialTestingEnabled | boolean Enable sequential testing |
| sequentialTestingTuningParameter | number Tuning parameter for sequential testing (frequentist only) |
| attributionModel | string Enum: "firstExposure" "experimentDuration" "lookbackOverride" Metric conversion window attribution model |
object or object Lookback window when | |
| segment | string Segment ID to filter users by |
| queryFilter | string Raw SQL WHERE clause added to the exposure query |
| skipPartialData | boolean When true, exclude users who have not completed the full conversion window |
Array of objects Override variation names, keys, or traffic weights used in this report. Weights are merged into the latest phase. Changes take effect on the next refresh. | |
| coverage | number [ 0 .. 1 ] Traffic coverage (0–1) for the latest phase. Used when computing scaled impact. |
{- "statsEngine": "bayesian",
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "winRisk": 0,
- "loseRisk": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "dimension": "string",
- "differenceType": "relative",
- "dateStarted": "2019-08-24T14:15:22Z",
- "dateEnded": "2019-08-24T14:15:22Z",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": null
}, - "segment": "string",
- "queryFilter": "string",
- "skipPartialData": true,
- "variations": [
- {
- "id": "string",
- "name": "string",
- "key": "string",
- "weight": 1
}
], - "coverage": 1
}{- "report": {
- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "title": "string",
- "description": "string",
- "type": "experiment-snapshot",
- "status": "published",
- "shareLevel": "public",
- "shareUrl": "string",
- "experimentId": "string",
- "snapshotId": "string",
- "snapshotStatus": "running",
- "snapshotError": "string",
- "analysisSettings": {
- "statsEngine": "bayesian",
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "winRisk": 0,
- "loseRisk": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "dimension": "string",
- "differenceType": "relative",
- "dateStarted": "2019-08-24T14:15:22Z",
- "dateEnded": "2019-08-24T14:15:22Z",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": null
}, - "trackingKey": "string",
- "exposureQueryId": "string",
- "segment": "string",
- "queryFilter": "string",
- "skipPartialData": true
}, - "experimentMetadata": {
- "type": "standard",
- "variations": [
- {
- "id": "string",
- "name": "string",
- "key": "string",
- "weight": 0
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "coverage": 0
}
]
}, - "results": {
- "id": "string",
- "dateUpdated": "string",
- "experimentId": "string",
- "phase": "string",
- "dateStart": "string",
- "dateEnd": "string",
- "dimension": {
- "type": "string",
- "id": "string"
}, - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "queryIds": [
- "string"
], - "results": [
- {
- "dimension": "string",
- "totalUsers": 0,
- "checks": {
- "srm": 0
}, - "metrics": [
- {
- "metricId": "string",
- "metricName": "string",
- "variations": [
- {
- "variationId": "string",
- "variationName": "string",
- "users": 0,
- "analyses": [
- { }
]
}
]
}
]
}
]
}
}
}| 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 |
| withProxy | string |
| multiOrg | string |
curl -X GET 'https://api.growthbook.io/api/v1/sdk-connections' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "connections": [
- {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "organization": "string",
- "languages": [
- "string"
], - "sdkVersion": "string",
- "environment": "string",
- "project": "string",
- "projects": [
- "string"
], - "encryptPayload": true,
- "encryptionKey": "string",
- "includeVisualExperiments": true,
- "includeDraftExperiments": true,
- "includeDraftExperimentRefs": true,
- "includeExperimentNames": true,
- "includeRedirectExperiments": true,
- "includeRuleIds": true,
- "includeProjectIdInMetadata": true,
- "includeCustomFieldsInMetadata": true,
- "allowedCustomFieldsInMetadata": [
- "string"
], - "includeTagsInMetadata": true,
- "key": "string",
- "proxyEnabled": true,
- "proxyHost": "string",
- "proxySigningKey": "string",
- "sseEnabled": true,
- "hashSecureAttributes": true,
- "remoteEvalEnabled": true,
- "savedGroupReferencesEnabled": true
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| name required | string |
| language required | string |
| sdkVersion | string |
| environment required | string |
| projects | Array of strings |
| encryptPayload | boolean |
| includeVisualExperiments | boolean |
| includeDraftExperiments | boolean |
| includeDraftExperimentRefs | boolean When true, experiment-ref rules linked to draft experiments are included in feature definitions. Off by default. |
| includeExperimentNames | boolean |
| includeRedirectExperiments | boolean |
| includeRuleIds | boolean |
| includeProjectIdInMetadata | boolean |
| includeCustomFieldsInMetadata | boolean |
| allowedCustomFieldsInMetadata | Array of strings |
| includeTagsInMetadata | boolean |
| proxyEnabled | boolean |
| proxyHost | string |
| hashSecureAttributes | boolean |
| remoteEvalEnabled | boolean |
| savedGroupReferencesEnabled | boolean |
{- "name": "string",
- "language": "string",
- "sdkVersion": "string",
- "environment": "string",
- "projects": [
- "string"
], - "encryptPayload": true,
- "includeVisualExperiments": true,
- "includeDraftExperiments": true,
- "includeDraftExperimentRefs": true,
- "includeExperimentNames": true,
- "includeRedirectExperiments": true,
- "includeRuleIds": true,
- "includeProjectIdInMetadata": true,
- "includeCustomFieldsInMetadata": true,
- "allowedCustomFieldsInMetadata": [
- "string"
], - "includeTagsInMetadata": true,
- "proxyEnabled": true,
- "proxyHost": "string",
- "hashSecureAttributes": true,
- "remoteEvalEnabled": true,
- "savedGroupReferencesEnabled": true
}{- "sdkConnection": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "organization": "string",
- "languages": [
- "string"
], - "sdkVersion": "string",
- "environment": "string",
- "project": "string",
- "projects": [
- "string"
], - "encryptPayload": true,
- "encryptionKey": "string",
- "includeVisualExperiments": true,
- "includeDraftExperiments": true,
- "includeDraftExperimentRefs": true,
- "includeExperimentNames": true,
- "includeRedirectExperiments": true,
- "includeRuleIds": true,
- "includeProjectIdInMetadata": true,
- "includeCustomFieldsInMetadata": true,
- "allowedCustomFieldsInMetadata": [
- "string"
], - "includeTagsInMetadata": true,
- "key": "string",
- "proxyEnabled": true,
- "proxyHost": "string",
- "proxySigningKey": "string",
- "sseEnabled": true,
- "hashSecureAttributes": true,
- "remoteEvalEnabled": true,
- "savedGroupReferencesEnabled": true
}
}| id required | string The id of the requested resource |
curl -X GET 'https://api.growthbook.io/api/v1/sdk-connections/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "sdkConnection": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "organization": "string",
- "languages": [
- "string"
], - "sdkVersion": "string",
- "environment": "string",
- "project": "string",
- "projects": [
- "string"
], - "encryptPayload": true,
- "encryptionKey": "string",
- "includeVisualExperiments": true,
- "includeDraftExperiments": true,
- "includeDraftExperimentRefs": true,
- "includeExperimentNames": true,
- "includeRedirectExperiments": true,
- "includeRuleIds": true,
- "includeProjectIdInMetadata": true,
- "includeCustomFieldsInMetadata": true,
- "allowedCustomFieldsInMetadata": [
- "string"
], - "includeTagsInMetadata": true,
- "key": "string",
- "proxyEnabled": true,
- "proxyHost": "string",
- "proxySigningKey": "string",
- "sseEnabled": true,
- "hashSecureAttributes": true,
- "remoteEvalEnabled": true,
- "savedGroupReferencesEnabled": true
}
}| id required | string The id of the requested resource |
| name | string |
| language | string |
| sdkVersion | string |
| environment | string |
| projects | Array of strings |
| encryptPayload | boolean |
| includeVisualExperiments | boolean |
| includeDraftExperiments | boolean |
| includeDraftExperimentRefs | boolean When true, experiment-ref rules linked to draft experiments are included in feature definitions. Off by default. |
| includeExperimentNames | boolean |
| includeRedirectExperiments | boolean |
| includeRuleIds | boolean |
| includeProjectIdInMetadata | boolean |
| includeCustomFieldsInMetadata | boolean |
| allowedCustomFieldsInMetadata | Array of strings |
| includeTagsInMetadata | boolean |
| proxyEnabled | boolean |
| proxyHost | string |
| hashSecureAttributes | boolean |
| remoteEvalEnabled | boolean |
| savedGroupReferencesEnabled | boolean |
{- "name": "string",
- "language": "string",
- "sdkVersion": "string",
- "environment": "string",
- "projects": [
- "string"
], - "encryptPayload": true,
- "includeVisualExperiments": true,
- "includeDraftExperiments": true,
- "includeDraftExperimentRefs": true,
- "includeExperimentNames": true,
- "includeRedirectExperiments": true,
- "includeRuleIds": true,
- "includeProjectIdInMetadata": true,
- "includeCustomFieldsInMetadata": true,
- "allowedCustomFieldsInMetadata": [
- "string"
], - "includeTagsInMetadata": true,
- "proxyEnabled": true,
- "proxyHost": "string",
- "hashSecureAttributes": true,
- "remoteEvalEnabled": true,
- "savedGroupReferencesEnabled": true
}{- "sdkConnection": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "organization": "string",
- "languages": [
- "string"
], - "sdkVersion": "string",
- "environment": "string",
- "project": "string",
- "projects": [
- "string"
], - "encryptPayload": true,
- "encryptionKey": "string",
- "includeVisualExperiments": true,
- "includeDraftExperiments": true,
- "includeDraftExperimentRefs": true,
- "includeExperimentNames": true,
- "includeRedirectExperiments": true,
- "includeRuleIds": true,
- "includeProjectIdInMetadata": true,
- "includeCustomFieldsInMetadata": true,
- "allowedCustomFieldsInMetadata": [
- "string"
], - "includeTagsInMetadata": true,
- "key": "string",
- "proxyEnabled": true,
- "proxyHost": "string",
- "proxySigningKey": "string",
- "sseEnabled": true,
- "hashSecureAttributes": true,
- "remoteEvalEnabled": true,
- "savedGroupReferencesEnabled": true
}
}| id required | string The id of the requested resource |
curl -X DELETE 'https://api.growthbook.io/api/v1/sdk-connections/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "string"
}| key required | string The key of the requested sdkConnection |
curl -X GET 'https://api.growthbook.io/api/v1/sdk-connections/lookup/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "sdkConnection": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "organization": "string",
- "languages": [
- "string"
], - "sdkVersion": "string",
- "environment": "string",
- "project": "string",
- "projects": [
- "string"
], - "encryptPayload": true,
- "encryptionKey": "string",
- "includeVisualExperiments": true,
- "includeDraftExperiments": true,
- "includeDraftExperimentRefs": true,
- "includeExperimentNames": true,
- "includeRedirectExperiments": true,
- "includeRuleIds": true,
- "includeProjectIdInMetadata": true,
- "includeCustomFieldsInMetadata": true,
- "allowedCustomFieldsInMetadata": [
- "string"
], - "includeTagsInMetadata": true,
- "key": "string",
- "proxyEnabled": true,
- "proxyHost": "string",
- "proxySigningKey": "string",
- "sseEnabled": true,
- "hashSecureAttributes": true,
- "remoteEvalEnabled": true,
- "savedGroupReferencesEnabled": true
}
}| id required | string The experiment id the visual changesets belong to |
curl -X GET 'https://api.growthbook.io/api/v1/experiments/abc123/visual-changesets' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "visualChangesets": [
- {
- "id": "string",
- "urlPatterns": [
- {
- "include": true,
- "type": "simple",
- "pattern": "string"
}
], - "editorUrl": "string",
- "experiment": "string",
- "visualChanges": [
- {
- "description": "string",
- "css": "string",
- "js": "string",
- "variation": "string",
- "domMutations": [
- {
- "selector": "string",
- "action": "append",
- "attribute": "string",
- "value": "string",
- "parentSelector": "string",
- "insertBeforeSelector": "string"
}
]
}
]
}
]
}| id required | string The id of the requested resource |
| editorUrl required | string URL of the page opened in the visual editor when creating this changeset |
required | Array of objects URL patterns that determine which pages this visual changeset applies to |
| property name* additional property | any |
{- "editorUrl": "string",
- "urlPatterns": [
- {
- "include": true,
- "type": "simple",
- "pattern": "string",
- "property1": null,
- "property2": null
}
], - "property1": null,
- "property2": null
}{- "visualChangeset": {
- "id": "string",
- "urlPatterns": [
- {
- "include": true,
- "type": "simple",
- "pattern": "string"
}
], - "editorUrl": "string",
- "experiment": "string",
- "visualChanges": [
- {
- "description": "string",
- "css": "string",
- "js": "string",
- "variation": "string",
- "domMutations": [
- {
- "selector": "string",
- "action": "append",
- "attribute": "string",
- "value": "string",
- "parentSelector": "string",
- "insertBeforeSelector": "string"
}
]
}
]
}
}| id required | string The id of the requested resource |
| includeExperiment | integer Include the associated experiment in payload |
curl -X GET 'https://api.growthbook.io/api/v1/visual-changesets/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "visualChangeset": {
- "id": "string",
- "urlPatterns": [
- {
- "include": true,
- "type": "simple",
- "pattern": "string"
}
], - "editorUrl": "string",
- "experiment": "string",
- "visualChanges": [
- {
- "description": "string",
- "css": "string",
- "js": "string",
- "variation": "string",
- "domMutations": [
- {
- "selector": "string",
- "action": "append",
- "attribute": "string",
- "value": "string",
- "parentSelector": "string",
- "insertBeforeSelector": "string"
}
]
}
]
}, - "experiment": {
- "id": "string",
- "trackingKey": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "type": "standard",
- "project": "string",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "owner": "string",
- "ownerEmail": "string",
- "archived": true,
- "status": "string",
- "autoRefresh": true,
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "hashVersion": 1,
- "disableStickyBucketing": true,
- "bucketVersion": 0,
- "minBucketVersion": 0,
- "variations": [
- {
- "variationId": "string",
- "key": "string",
- "name": "string",
- "description": "string",
- "screenshots": [
- "string"
]
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "reasonForStopping": "string",
- "seed": "string",
- "coverage": 0,
- "trafficSplit": [
- {
- "variationId": "string",
- "weight": 0
}
], - "namespace": {
- "namespaceId": "string",
- "enabled": true,
- "range": [
- 0,
- 0
], - "ranges": [
- [
- 0,
- 0
]
]
}, - "targetingCondition": "string",
- "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
]
}
], - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "resultSummary": {
- "status": "string",
- "winner": "string",
- "conclusions": "string",
- "releasedVariationId": "string",
- "excludeFromPayload": true
}, - "shareLevel": "public",
- "publicUrl": "string",
- "banditScheduleValue": 0,
- "banditScheduleUnit": "days",
- "banditBurnInValue": 0,
- "banditBurnInUnit": "days",
- "banditConversionWindowValue": 0,
- "banditConversionWindowUnit": "days",
- "linkedFeatures": [
- "string"
], - "hasVisualChangesets": true,
- "hasURLRedirects": true,
- "customFields": {
- "property1": null,
- "property2": null
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "precomputedUnitDimensionIds": [
- "string"
], - "defaultDashboardId": "string",
- "templateId": "string",
- "statusUpdateSchedule": {
- "startAt": "2019-08-24T14:15:22Z"
}, - "nextScheduledStatusUpdate": {
- "type": "start",
- "date": "2019-08-24T14:15:22Z"
}
}
}| id required | string The id of the requested resource |
| editorUrl | string URL of the page opened in the visual editor when creating this changeset |
Array of objects URL patterns that determine which pages this visual changeset applies to | |
Array of objects | |
| property name* additional property | any |
{- "editorUrl": "string",
- "urlPatterns": [
- {
- "include": true,
- "type": "simple",
- "pattern": "string",
- "property1": null,
- "property2": null
}
], - "visualChanges": [
- {
- "id": "string",
- "description": "string",
- "css": "string",
- "js": "string",
- "variation": "string",
- "domMutations": [
- {
- "selector": "string",
- "action": "append",
- "attribute": "string",
- "value": "string",
- "parentSelector": "string",
- "insertBeforeSelector": "string",
- "property1": null,
- "property2": null
}
], - "property1": null,
- "property2": null
}
], - "property1": null,
- "property2": null
}{- "nModified": 0,
- "visualChangeset": {
- "id": "string",
- "urlPatterns": [
- {
- "include": true,
- "type": "simple",
- "pattern": "string"
}
], - "editorUrl": "string",
- "experiment": "string",
- "visualChanges": [
- {
- "description": "string",
- "css": "string",
- "js": "string",
- "variation": "string",
- "domMutations": [
- {
- "selector": "string",
- "action": "append",
- "attribute": "string",
- "value": "string",
- "parentSelector": "string",
- "insertBeforeSelector": "string"
}
]
}
]
}
}| id required | string The id of the requested resource |
| id | string |
| description | string |
| css | string |
| js | string |
| variation required | string |
Array of objects | |
| property name* additional property | any |
{- "id": "string",
- "description": "string",
- "css": "string",
- "js": "string",
- "variation": "string",
- "domMutations": [
- {
- "selector": "string",
- "action": "append",
- "attribute": "string",
- "value": "string",
- "parentSelector": "string",
- "insertBeforeSelector": "string",
- "property1": null,
- "property2": null
}
], - "property1": null,
- "property2": null
}{- "nModified": 0,
- "visualChangeId": "string"
}| id required | string The id of the requested resource |
| visualChangeId required | string Specify a specific visual change |
| id | string |
| description | string |
| css | string |
| js | string |
| variation | string |
Array of objects | |
| property name* additional property | any |
{- "id": "string",
- "description": "string",
- "css": "string",
- "js": "string",
- "variation": "string",
- "domMutations": [
- {
- "selector": "string",
- "action": "append",
- "attribute": "string",
- "value": "string",
- "parentSelector": "string",
- "insertBeforeSelector": "string",
- "property1": null,
- "property2": null
}
], - "property1": null,
- "property2": null
}{- "nModified": 0
}Defined sets of attribute values which can be used with feature rules for targeting features at particular users.
| 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/saved-groups' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "savedGroups": [
- {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| name required | string The display name of the Saved Group |
| type | string Enum: "condition" "list" The type of Saved Group (inferred from other arguments if missing) |
| condition | string When type = 'condition', this is the JSON-encoded condition for the group |
| attributeKey | string When type = 'list', this is the attribute key the group is based on |
| values | Array of strings When type = 'list', this is the list of values for the attribute key |
| 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. When omitted, it defaults to the user associated with the request's Personal Access Token (PAT), if one is being used. |
| projects | Array of strings |
| bypassApproval | boolean Set to true to skip the approval flow when the org requires approvals on saved groups. Requires the |
{- "name": "string",
- "type": "condition",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "owner": "string",
- "projects": [
- "string"
], - "bypassApproval": true
}{- "savedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}
}| id required | string The id of the requested resource |
curl -X GET 'https://api.growthbook.io/api/v1/saved-groups/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "savedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}
}| id required | string The id of the requested resource |
| name | string The display name of the Saved Group |
| condition | string When type = 'condition', this is the JSON-encoded condition for the group |
| values | Array of strings When type = 'list', this is the list of values for the attribute key |
| 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 |
| bypassApproval | boolean Set to true to skip the approval flow when the org requires approvals on saved groups. Requires the |
{- "name": "string",
- "condition": "string",
- "values": [
- "string"
], - "owner": "string",
- "projects": [
- "string"
], - "bypassApproval": true
}{- "savedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}
}| id required | string The id of the requested resource |
curl -X DELETE 'https://api.growthbook.io/api/v1/saved-groups/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "string"
}| id required | string The id of the requested resource |
curl -X POST 'https://api.growthbook.io/api/v1/saved-groups/abc123/archive' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "savedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}
}| id required | string The id of the requested resource |
curl -X POST 'https://api.growthbook.io/api/v1/saved-groups/abc123/unarchive' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "savedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}
}Draft revisions for saved groups, including pending changes, approvals, and lifecycle (publish, discard, revert).
Most callers can interact with these endpoints via shorthand actions (/items/add, /items/remove, single-field PUTs) instead of authoring JSON Patch ops directly. Pass version: "new" on edit endpoints to auto-create a draft.
Returns a paginated list of revisions across all saved groups in the organization, sorted newest-first. Optionally filtered by saved group, status, author, or the calling user's involvement.
| 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. | |
| savedGroupId | string Restrict results to revisions for a single saved group. When omitted, returns revisions across every saved group the caller can read. |
| status | string Filter by revision status. Accepts a comma-separated list, or the literal |
| author | string |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean If true, return only revisions authored by the calling user. Requires a user-scoped API key. Mutually exclusive with |
curl -X GET 'https://api.growthbook.io/api/v1/saved-groups-revisions' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "revisions": [
- {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}Returns a paginated list of revisions for this saved group, sorted newest-first. Optionally filtered by status, author, or the calling user's involvement.
| savedGroupId required | string |
| 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. | |
| status | string Filter by revision status. Accepts a comma-separated list, or the literal |
| author | string |
"true" (string) or "false" (string) or "0" (string) or "1" (string) or boolean If true, return only revisions authored by the calling user. Requires a user-scoped API key. Mutually exclusive with |
curl -X GET 'https://api.growthbook.io/api/v1/saved-groups-revisions/grp_abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "revisions": [
- {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}Creates a new draft revision branched from the current live saved group. A saved group can have multiple concurrent drafts; use this to start an isolated line of edits.
| savedGroupId required | string |
| title | string |
| comment | string |
{- "title": "string",
- "comment": "string"
}{- "revision": {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
}Returns the most recently updated open (non-merged, non-discarded) revision for the saved group. Returns 404 if there is no active draft. Pass mine=true to restrict to drafts authored by the calling user (requires a user-scoped API key).
| savedGroupId 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 the calling user. Requires a user-scoped API key. |
curl -X GET 'https://api.growthbook.io/api/v1/saved-groups-revisions/grp_abc123/latest' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "revision": {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
}Returns the revision at the specified version for this saved group. Use GET /saved-groups-revisions/{savedGroupId}/latest for the most recent active draft.
| savedGroupId required | string |
| version required | integer |
curl -X GET 'https://api.growthbook.io/api/v1/saved-groups-revisions/grp_abc123/3' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "revision": {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
}Stages metadata changes (name, owner, description, projects) on the draft. Pass version: "new" to auto-create a draft. The change is only applied to the live saved group when the revision is merged.
| savedGroupId required | string |
required | integer or "new" (string) |
| revisionTitle | string |
| revisionComment | string |
| name | 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. |
| description | string |
| projects | Array of strings |
{- "revisionTitle": "string",
- "revisionComment": "string",
- "name": "string",
- "owner": "string",
- "description": "string",
- "projects": [
- "string"
]
}{- "revision": {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
}Stages a new JSON-encoded condition for the draft. Only valid for condition saved groups. Pass version: "new" to auto-create a draft.
| savedGroupId required | string |
required | integer or "new" (string) |
| revisionTitle | string |
| revisionComment | string |
| condition required | string The JSON-encoded condition for the saved group |
{- "revisionTitle": "string",
- "revisionComment": "string",
- "condition": "string"
}{- "revision": {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
}Replaces the entire values array atomically. Only valid for list saved groups. For safe concurrent updates against a draft, prefer POST .../items/add and POST .../items/remove. Pass version: "new" to auto-create a draft.
| savedGroupId required | string |
required | integer or "new" (string) |
| revisionTitle | string |
| revisionComment | string |
| values required | Array of strings |
{- "revisionTitle": "string",
- "revisionComment": "string",
- "values": [
- "string"
]
}{- "revision": {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
}Stages an archive or unarchive on the draft. Pass version: "new" to auto-create a draft. Archived saved groups can be permanently deleted via DELETE /saved-groups/{id} once the archive is published.
| savedGroupId required | string |
required | integer or "new" (string) |
| revisionTitle | string |
| revisionComment | string |
| archived required | boolean |
{- "revisionTitle": "string",
- "revisionComment": "string",
- "archived": true
}{- "revision": {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
}Appends the provided items (deduplicated) to the draft's values array. Only valid for list saved groups. Pass version: "new" to auto-create a draft. Duplicate items are merged on top of any existing draft, so multiple successive add/remove calls accumulate.
| savedGroupId required | string |
required | integer or "new" (string) |
| revisionTitle | string |
| revisionComment | string |
| items required | Array of strings |
{- "revisionTitle": "string",
- "revisionComment": "string",
- "items": [
- "string"
]
}{- "revision": {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
}Removes the provided items from the draft's values array. Only valid for list saved groups. Pass version: "new" to auto-create a draft.
| savedGroupId required | string |
required | integer or "new" (string) |
| revisionTitle | string |
| revisionComment | string |
| items required | Array of strings |
{- "revisionTitle": "string",
- "revisionComment": "string",
- "items": [
- "string"
]
}{- "revision": {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
}Moves the draft from draft into pending-review. Notifies reviewers per the org's approval-flow settings.
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 and the caller to have publish permission on the saved group; the auto-publish then executes with the caller's authority.
| savedGroupId required | string |
| version required | integer |
| autoPublishOnApproval | boolean |
{- "autoPublishOnApproval": true
}{- "revision": {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
}Submits an approve, request-changes, or comment review on the revision. Authors and contributors cannot submit approve reviews on their own drafts when the org has blockSelfApproval enabled.
When decision 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.
| savedGroupId required | string |
| version required | integer |
| decision required | string Enum: "approve" "request-changes" "comment" |
| comment | string |
| skipAutoPublish | boolean |
{- "decision": "approve",
- "comment": "string",
- "skipAutoPublish": true
}{- "revision": {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}, - "autoPublished": true
}Runs a dry-run merge of the draft against the current live saved group and returns any conflicts. Use this before publishing to preview changes and detect conflicting edits.
| savedGroupId required | string |
| version required | integer |
curl -X GET 'https://api.growthbook.io/api/v1/saved-groups-revisions/{savedGroupId}/{version}/merge-status' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "success": true,
- "hasConflicts": true,
- "conflicts": [
- {
- "field": "string",
- "baseValue": null,
- "liveValue": null,
- "proposedValue": null
}
], - "canAutoMerge": true
}Updates the draft's base snapshot to the current live state, applying the draft's changes on top. Supply conflictResolutions to resolve any conflicting fields. Strategies are overwrite (use the draft's value), discard (keep the live value), or union (merge arrays — use only on values). Optimistic locking is not enforced by this endpoint; callers who need strict locking should call merge-status before and after.
| savedGroupId required | string |
| version required | integer |
object | |
object Custom values to use for |
{- "conflictResolutions": {
- "property1": "overwrite",
- "property2": "overwrite"
}, - "customValues": {
- "property1": [
- null
], - "property2": [
- null
]
}
}{- "revision": {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
}Publishes a draft revision, making it the live state of the saved group. Blocked if the org requires approvals and the revision is not approved (callers with the bypass-approval permission may still publish).
| savedGroupId required | string |
| version required | integer |
| mergeNow | boolean When the org enforces same-base merges and the saved group changed since this revision was created, set to true to force-merge the stale revision instead of rebasing first. This only takes effect for callers with bypass-approval permission; otherwise it is ignored and the revision must be rebased. |
{- "mergeNow": true
}{- "revision": {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
}Permanently discards a draft revision. Only open revisions (not merged or already-discarded) can be discarded.
| savedGroupId required | string |
| version required | integer |
| reason | string |
{- "reason": "string"
}{- "revision": {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
}Creates a new draft (or immediately publishes) whose content matches the specified historical revision. Defaults to creating a draft; when the org enables 'reverts bypass approval' it defaults to publishing immediately. Pass strategy to override.
| savedGroupId required | string |
| version required | integer |
| strategy | string Enum: "draft" "publish" |
| title | string |
| comment | string |
{- "strategy": "draft",
- "title": "string",
- "comment": "string"
}{- "revision": {
- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}
}Organizations are used for multi-org deployments where different teams can run their own isolated feature flags and experiments. These endpoints are only via a super-admin's Personal Access Token.
| search | string Search string to search organization names, owner emails, and external ids by |
| 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/organizations' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "organizations": [
- {
- "id": "string",
- "externalId": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "name": "string",
- "ownerEmail": "string"
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| name required | string The name of the organization |
| externalId | string An optional identifier that you use within your company for the organization |
{- "name": "string",
- "externalId": "string"
}{- "organization": {
- "id": "string",
- "externalId": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "name": "string",
- "ownerEmail": "string"
}
}| id required | string The id of the requested resource |
| name | string The name of the organization |
| externalId | string An optional identifier that you use within your company for the organization |
{- "name": "string",
- "externalId": "string"
}{- "organization": {
- "id": "string",
- "externalId": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "name": "string",
- "ownerEmail": "string"
}
}| 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) |
| userName | string Name of the user. |
| userEmail | string Email address of the user. |
| globalRole | string Name of the global role |
curl -X GET 'https://api.growthbook.io/api/v1/members' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "members": [
- {
- "id": "string",
- "name": "string",
- "email": "string",
- "globalRole": "string",
- "environments": [
- "string"
], - "limitAccessByEnvironment": true,
- "managedbyIdp": true,
- "teams": [
- "string"
], - "projectRoles": [
- {
- "project": "string",
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
]
}
], - "lastLoginDate": "2019-08-24T14:15:22Z",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z"
}
], - "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| id required | string The id of the requested resource |
required | object | ||||||
| |||||||
{- "member": {
- "role": "string",
- "environments": [
- "string"
], - "projectRoles": [
- {
- "project": "string",
- "role": "string",
- "environments": [
- "string"
], - "limitAccessByEnvironment": true
}
]
}
}{- "updatedMember": {
- "id": "string",
- "role": "string",
- "environments": [
- "string"
], - "limitAccessByEnvironment": true,
- "projectRoles": [
- {
- "project": "string",
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
]
}
]
}
}| id required | string The id of the requested resource |
curl -X DELETE 'https://api.growthbook.io/api/v1/members/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "string"
}Intended for use with our code reference CI utility, gb-find-code-refs.
| deleteMissing | string Default: "false" Enum: "true" "false" Whether to delete code references that are no longer present in the submitted data |
| branch required | string |
| repoName required | string |
required | Array of objects |
{- "branch": "string",
- "repoName": "string",
- "refs": [
- {
- "filePath": "string",
- "startingLineNumber": 0,
- "lines": "string",
- "flagKey": "string",
- "contentHash": "string"
}
]
}{- "featuresUpdated": [
- "string"
]
}| 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/code-refs' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "codeRefs": [
- {
- "organization": "string",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "feature": "string",
- "repo": "string",
- "branch": "string",
- "platform": "github",
- "refs": [
- {
- "filePath": "string",
- "startingLineNumber": 0,
- "lines": "string",
- "flagKey": "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/code-refs/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "codeRefs": [
- {
- "organization": "string",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "feature": "string",
- "repo": "string",
- "branch": "string",
- "platform": "github",
- "refs": [
- {
- "filePath": "string",
- "startingLineNumber": 0,
- "lines": "string",
- "flagKey": "string"
}
]
}
]
}curl -X GET 'https://api.growthbook.io/api/v1/archetypes' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "archetypes": [
- {
- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "name": "string",
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "isPublic": true,
- "attributes": {
- "property1": null,
- "property2": null
}, - "projects": [
- "string"
], - "environments": [
- "string"
]
}
]
}| name required | string |
| description | string <= 10000 characters |
| isPublic required | boolean Whether to make this Archetype available to other team members |
object The attributes to set when using this Archetype | |
| projects | Array of strings |
| environments | Array of strings Limit this Archetype to specific environments. Omit or leave empty to apply to all environments. |
{- "name": "string",
- "description": "string",
- "isPublic": true,
- "attributes": {
- "property1": null,
- "property2": null
}, - "projects": [
- "string"
], - "environments": [
- "string"
]
}{- "archetype": {
- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "name": "string",
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "isPublic": true,
- "attributes": {
- "property1": null,
- "property2": null
}, - "projects": [
- "string"
], - "environments": [
- "string"
]
}
}| id required | string The id of the requested resource |
curl -X GET 'https://api.growthbook.io/api/v1/archetypes/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "archetype": {
- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "name": "string",
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "isPublic": true,
- "attributes": {
- "property1": null,
- "property2": null
}, - "projects": [
- "string"
], - "environments": [
- "string"
]
}
}| id required | string The id of the requested resource |
| name | string |
| description | string <= 10000 characters |
| isPublic | boolean Whether to make this Archetype available to other team members |
object The attributes to set when using this Archetype | |
| projects | Array of strings |
| environments | Array of strings Limit this Archetype to specific environments. Omit or leave empty to apply to all environments. |
{- "name": "string",
- "description": "string",
- "isPublic": true,
- "attributes": {
- "property1": null,
- "property2": null
}, - "projects": [
- "string"
], - "environments": [
- "string"
]
}{- "archetype": {
- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "name": "string",
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "isPublic": true,
- "attributes": {
- "property1": null,
- "property2": null
}, - "projects": [
- "string"
], - "environments": [
- "string"
]
}
}| id required | string The id of the requested resource |
curl -X DELETE 'https://api.growthbook.io/api/v1/archetypes/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "string"
}| id required | string The id of the requested resource |
curl -X GET 'https://api.growthbook.io/api/v1/queries/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "query": {
- "id": "string",
- "organization": "string",
- "datasource": "string",
- "language": "string",
- "query": "string",
- "queryType": "string",
- "createdAt": "string",
- "startedAt": "string",
- "status": "running",
- "externalId": "string",
- "dependencies": [
- "string"
], - "runAtEnd": true
}
}curl -X GET 'https://api.growthbook.io/api/v1/settings' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "settings": {
- "confidenceLevel": 0,
- "northStar": {
- "title": "string",
- "metricIds": [
- "string"
]
}, - "metricDefaults": {
- "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "minimumSampleSize": 0,
- "maxPercentageChange": 0,
- "minPercentageChange": 0,
- "targetMDE": 0
}, - "pastExperimentsMinLength": 0,
- "metricAnalysisDays": 0,
- "updateSchedule": {
- "type": "cron",
- "cron": "string",
- "hours": 0
}, - "multipleExposureMinPercent": 0,
- "defaultRole": {
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
]
}, - "statsEngine": "string",
- "pValueThreshold": 0,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "attributionModel": "firstExposure",
- "targetMDE": 0,
- "delayHours": 0,
- "windowType": "string",
- "windowHours": 0,
- "winRisk": 0,
- "loseRisk": 0,
- "secureAttributeSalt": "string",
- "killswitchConfirmation": true,
- "featureKillSwitchBehavior": "off",
- "requireReviews": [
- {
- "requireReviewOn": true,
- "resetReviewOnChange": true,
- "environments": [
- "string"
], - "projects": [
- "string"
], - "featureRequireEnvironmentReview": true,
- "featureRequireMetadataReview": true,
- "autopublishOnApproval": true
}
], - "restApiBypassesReviews": true,
- "requireRebaseBeforePublish": true,
- "revertsBypassApproval": true,
- "maxConcurrentDrafts": 0,
- "featureKeyExample": "string",
- "featureRegexValidator": "string",
- "banditScheduleValue": 0,
- "banditScheduleUnit": "hours",
- "banditBurnInValue": 0,
- "banditBurnInUnit": "hours",
- "experimentMinLengthDays": 0,
- "experimentMaxLengthDays": 0,
- "preferredEnvironment": "string",
- "maxMetricSliceLevels": 0
}
}| projectId | string Filter to attributes available in this project — includes org-wide attributes (no project restriction) and attributes explicitly scoped to this project. |
curl -X GET 'https://api.growthbook.io/api/v1/attributes' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "attributes": [
- {
- "property": "string",
- "datatype": "boolean",
- "description": "string",
- "hashAttribute": true,
- "archived": true,
- "enum": "string",
- "format": "",
- "projects": [
- "string"
], - "tags": [
- "string"
]
}
]
}| property required | string The attribute property |
| datatype required | string Enum: "boolean" "string" "number" "secureString" "enum" "string[]" "number[]" "secureString[]" The attribute datatype |
| description | string The description of the new attribute |
| archived | boolean The attribute is archived |
| hashAttribute | boolean Shall the attribute be hashed |
| enum | string |
| format | string Enum: "" "version" "date" "isoCountryCode" The attribute's format |
| projects | Array of strings |
| tags | Array of strings |
{- "property": "string",
- "datatype": "boolean",
- "description": "string",
- "archived": true,
- "hashAttribute": true,
- "enum": "string",
- "format": "",
- "projects": [
- "string"
], - "tags": [
- "string"
]
}{- "attribute": {
- "property": "string",
- "datatype": "boolean",
- "description": "string",
- "hashAttribute": true,
- "archived": true,
- "enum": "string",
- "format": "",
- "projects": [
- "string"
], - "tags": [
- "string"
]
}
}| property required | string The attribute property |
| datatype | string Enum: "boolean" "string" "number" "secureString" "enum" "string[]" "number[]" "secureString[]" The attribute datatype |
| description | string The description of the new attribute |
| archived | boolean The attribute is archived |
| hashAttribute | boolean Shall the attribute be hashed |
| enum | string |
| format | string Enum: "" "version" "date" "isoCountryCode" The attribute's format |
| projects | Array of strings |
| tags | Array of strings |
{- "datatype": "boolean",
- "description": "string",
- "archived": true,
- "hashAttribute": true,
- "enum": "string",
- "format": "",
- "projects": [
- "string"
], - "tags": [
- "string"
]
}{- "attribute": {
- "property": "string",
- "datatype": "boolean",
- "description": "string",
- "hashAttribute": true,
- "archived": true,
- "enum": "string",
- "format": "",
- "projects": [
- "string"
], - "tags": [
- "string"
]
}
}| property required | string The attribute property |
curl -X DELETE 'https://api.growthbook.io/api/v1/attributes/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedProperty": "string"
}Returns usage information for one or more legacy or fact metrics, showing which experiments use each metric and some usage statistics. If a metric is part of a metric group, then usage of that metric group counts as usage of all metrics in the group. Warning: only includes experiments that you have access to! If you do not have admin access or read access to experiments across all projects, this endpoint may not return the latest usage data across all experiments.
| ids required | string List of comma-separated metric IDs (both fact and legacy) to get usage for, e.g. ids=met_123,fact_456 |
curl -X GET 'https://api.growthbook.io/api/v1/usage/metrics' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "metricUsage": [
- {
- "metricId": "string",
- "error": "string",
- "experiments": [
- {
- "experimentId": "string",
- "experimentStatus": "draft",
- "lastSnapshotAttempt": "2019-08-24T14:15:22Z"
}
], - "lastSnapshotAttempt": "2019-08-24T14:15:22Z"
}
]
}curl -X GET 'https://api.growthbook.io/api/v1/dashboards/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "dashboard": {
- "id": "string",
- "uid": "string",
- "organization": "string",
- "experimentId": "string",
- "isDefault": true,
- "isDeleted": true,
- "userId": "string",
- "editLevel": "published",
- "shareLevel": "published",
- "enableAutoUpdates": true,
- "updateSchedule": {
- "type": "stale",
- "hours": 0
}, - "title": "string",
- "grid": {
- "cols": 24,
- "rowHeight": 40
}, - "projects": [
- "string"
], - "nextUpdate": "2019-08-24T14:15:22Z",
- "lastUpdated": "2019-08-24T14:15:22Z",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "blocks": [
- {
- "organization": "string",
- "id": "string",
- "uid": "string",
- "type": "metric-explorer",
- "title": "string",
- "description": "string",
- "snapshotId": "string",
- "layout": {
- "x": 23,
- "y": 0,
- "w": 1,
- "h": 1,
- "static": true
}, - "factMetricId": "string",
- "visualizationType": "histogram",
- "valueType": "avg",
- "metricAnalysisId": "string",
- "analysisSettings": {
- "userIdType": "string",
- "lookbackDays": 0,
- "populationType": "metric",
- "populationId": "string",
- "additionalNumeratorFilters": [
- "string"
], - "additionalDenominatorFilters": [
- "string"
], - "startDate": "string",
- "endDate": "string"
}
}
]
}
}| id required | string |
curl -X DELETE 'https://api.growthbook.io/api/v1/dashboards/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "string"
}| id required | string |
| title | string The display name of the Dashboard |
| editLevel | string Enum: "published" "private" Dashboards that are "published" are editable by organization members with appropriate permissions |
| shareLevel | string Enum: "published" "private" General Dashboards only. Dashboards that are "published" are viewable by organization members with appropriate permissions |
| enableAutoUpdates | boolean If enabled for a General Dashboard, also requires an updateSchedule |
object or object General Dashboards only. Experiment Dashboards update based on the parent experiment instead | |
| projects | Array of strings General Dashboards only, Experiment Dashboards use the experiment's projects |
Array of (object or objects or objects or objects or objects or objects or objects or objects) or (object or objects or objects or objects or objects or objects or objects or objects or objects or objects or objects) |
{- "title": "string",
- "editLevel": "published",
- "shareLevel": "published",
- "enableAutoUpdates": true,
- "updateSchedule": {
- "type": "stale",
- "hours": 0
}, - "projects": [
- "string"
], - "blocks": [
- {
- "type": "markdown",
- "title": "string",
- "description": "string",
- "snapshotId": "string",
- "layout": {
- "x": 23,
- "y": 0,
- "w": 1,
- "h": 1,
- "static": true
}, - "content": "string"
}
]
}{- "dashboard": {
- "id": "string",
- "uid": "string",
- "organization": "string",
- "experimentId": "string",
- "isDefault": true,
- "isDeleted": true,
- "userId": "string",
- "editLevel": "published",
- "shareLevel": "published",
- "enableAutoUpdates": true,
- "updateSchedule": {
- "type": "stale",
- "hours": 0
}, - "title": "string",
- "grid": {
- "cols": 24,
- "rowHeight": 40
}, - "projects": [
- "string"
], - "nextUpdate": "2019-08-24T14:15:22Z",
- "lastUpdated": "2019-08-24T14:15:22Z",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "blocks": [
- {
- "organization": "string",
- "id": "string",
- "uid": "string",
- "type": "metric-explorer",
- "title": "string",
- "description": "string",
- "snapshotId": "string",
- "layout": {
- "x": 23,
- "y": 0,
- "w": 1,
- "h": 1,
- "static": true
}, - "factMetricId": "string",
- "visualizationType": "histogram",
- "valueType": "avg",
- "metricAnalysisId": "string",
- "analysisSettings": {
- "userIdType": "string",
- "lookbackDays": 0,
- "populationType": "metric",
- "populationId": "string",
- "additionalNumeratorFilters": [
- "string"
], - "additionalDenominatorFilters": [
- "string"
], - "startDate": "string",
- "endDate": "string"
}
}
]
}
}| title required | string The display name of the Dashboard |
| editLevel required | string Enum: "published" "private" Dashboards that are "published" are editable by organization members with appropriate permissions |
| shareLevel required | string Enum: "published" "private" General Dashboards only. Dashboards that are "published" are viewable by organization members with appropriate permissions |
| enableAutoUpdates required | boolean If enabled for a General Dashboard, also requires an updateSchedule |
object or object General Dashboards only. Experiment Dashboards update based on the parent experiment instead | |
| experimentId | string The parent experiment for an Experiment Dashboard, or undefined for a general dashboard |
| projects | Array of strings General Dashboards only, Experiment Dashboards use the experiment's projects |
required | Array of objects or objects or objects or objects or objects or objects or objects or objects |
{- "title": "string",
- "editLevel": "published",
- "shareLevel": "published",
- "enableAutoUpdates": true,
- "updateSchedule": {
- "type": "stale",
- "hours": 0
}, - "experimentId": "string",
- "projects": [
- "string"
], - "blocks": [
- {
- "type": "markdown",
- "title": "string",
- "description": "string",
- "snapshotId": "string",
- "layout": {
- "x": 23,
- "y": 0,
- "w": 1,
- "h": 1,
- "static": true
}, - "content": "string"
}
]
}{- "dashboard": {
- "id": "string",
- "uid": "string",
- "organization": "string",
- "experimentId": "string",
- "isDefault": true,
- "isDeleted": true,
- "userId": "string",
- "editLevel": "published",
- "shareLevel": "published",
- "enableAutoUpdates": true,
- "updateSchedule": {
- "type": "stale",
- "hours": 0
}, - "title": "string",
- "grid": {
- "cols": 24,
- "rowHeight": 40
}, - "projects": [
- "string"
], - "nextUpdate": "2019-08-24T14:15:22Z",
- "lastUpdated": "2019-08-24T14:15:22Z",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "blocks": [
- {
- "organization": "string",
- "id": "string",
- "uid": "string",
- "type": "metric-explorer",
- "title": "string",
- "description": "string",
- "snapshotId": "string",
- "layout": {
- "x": 23,
- "y": 0,
- "w": 1,
- "h": 1,
- "static": true
}, - "factMetricId": "string",
- "visualizationType": "histogram",
- "valueType": "avg",
- "metricAnalysisId": "string",
- "analysisSettings": {
- "userIdType": "string",
- "lookbackDays": 0,
- "populationType": "metric",
- "populationId": "string",
- "additionalNumeratorFilters": [
- "string"
], - "additionalDenominatorFilters": [
- "string"
], - "startDate": "string",
- "endDate": "string"
}
}
]
}
}curl -X GET 'https://api.growthbook.io/api/v1/dashboards' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "dashboards": [
- {
- "id": "string",
- "uid": "string",
- "organization": "string",
- "experimentId": "string",
- "isDefault": true,
- "isDeleted": true,
- "userId": "string",
- "editLevel": "published",
- "shareLevel": "published",
- "enableAutoUpdates": true,
- "updateSchedule": {
- "type": "stale",
- "hours": 0
}, - "title": "string",
- "grid": {
- "cols": 24,
- "rowHeight": 40
}, - "projects": [
- "string"
], - "nextUpdate": "2019-08-24T14:15:22Z",
- "lastUpdated": "2019-08-24T14:15:22Z",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "blocks": [
- {
- "organization": "string",
- "id": "string",
- "uid": "string",
- "type": "metric-explorer",
- "title": "string",
- "description": "string",
- "snapshotId": "string",
- "layout": {
- "x": 23,
- "y": 0,
- "w": 1,
- "h": 1,
- "static": true
}, - "factMetricId": "string",
- "visualizationType": "histogram",
- "valueType": "avg",
- "metricAnalysisId": "string",
- "analysisSettings": {
- "userIdType": "string",
- "lookbackDays": 0,
- "populationType": "metric",
- "populationId": "string",
- "additionalNumeratorFilters": [
- "string"
], - "additionalDenominatorFilters": [
- "string"
], - "startDate": "string",
- "endDate": "string"
}
}
]
}
]
}| experimentId required | string |
curl -X GET 'https://api.growthbook.io/api/v1/dashboards/by-experiment/{experimentId}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "dashboards": [
- {
- "id": "string",
- "uid": "string",
- "organization": "string",
- "experimentId": "string",
- "isDefault": true,
- "isDeleted": true,
- "userId": "string",
- "editLevel": "published",
- "shareLevel": "published",
- "enableAutoUpdates": true,
- "updateSchedule": {
- "type": "stale",
- "hours": 0
}, - "title": "string",
- "grid": {
- "cols": 24,
- "rowHeight": 40
}, - "projects": [
- "string"
], - "nextUpdate": "2019-08-24T14:15:22Z",
- "lastUpdated": "2019-08-24T14:15:22Z",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "blocks": [
- {
- "organization": "string",
- "id": "string",
- "uid": "string",
- "type": "metric-explorer",
- "title": "string",
- "description": "string",
- "snapshotId": "string",
- "layout": {
- "x": 23,
- "y": 0,
- "w": 1,
- "h": 1,
- "static": true
}, - "factMetricId": "string",
- "visualizationType": "histogram",
- "valueType": "avg",
- "metricAnalysisId": "string",
- "analysisSettings": {
- "userIdType": "string",
- "lookbackDays": 0,
- "populationType": "metric",
- "populationId": "string",
- "additionalNumeratorFilters": [
- "string"
], - "additionalDenominatorFilters": [
- "string"
], - "startDate": "string",
- "endDate": "string"
}
}
]
}
]
}| id required | string non-empty The unique key for the custom field |
| name required | string The display name of the custom field |
| description | string |
| placeholder | string |
string or number or boolean or string or string or Array of strings or Array of numbers or Array of booleans or Array of strings or Array of strings | |
| type required | string Enum: "text" "textarea" "markdown" "enum" "multiselect" "url" "number" "boolean" "date" "datetime" The type of value this custom field will take |
| values | string |
| required required | boolean |
| projects | Array of strings |
| sections required | Array of strings Items Enum: "feature" "experiment" What types of objects this custom field is applicable to (feature, experiment) |
{- "id": "string",
- "name": "string",
- "description": "string",
- "placeholder": "string",
- "defaultValue": "string",
- "type": "text",
- "values": "string",
- "required": true,
- "projects": [
- "string"
], - "sections": [
- "feature"
]
}{- "customField": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "description": "string",
- "placeholder": "string",
- "defaultValue": "string",
- "type": "text",
- "values": "string",
- "required": true,
- "creator": "string",
- "projects": [
- "string"
], - "sections": [
- "feature"
], - "active": true
}
}curl -X GET 'https://api.growthbook.io/api/v1/custom-fields' \ -H 'Authorization: Bearer YOUR_API_KEY'
[- {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "description": "string",
- "placeholder": "string",
- "defaultValue": "string",
- "type": "text",
- "values": "string",
- "required": true,
- "creator": "string",
- "projects": [
- "string"
], - "sections": [
- "feature"
], - "active": true
}
]| id required | string |
| index | string |
curl -X DELETE 'https://api.growthbook.io/api/v1/custom-fields/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "string"
}| id required | string |
curl -X GET 'https://api.growthbook.io/api/v1/custom-fields/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "customField": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "description": "string",
- "placeholder": "string",
- "defaultValue": "string",
- "type": "text",
- "values": "string",
- "required": true,
- "creator": "string",
- "projects": [
- "string"
], - "sections": [
- "feature"
], - "active": true
}
}| id required | string |
| name | string The display name of the custom field |
| description | string |
| placeholder | string |
string or number or boolean or string or string or Array of strings or Array of numbers or Array of booleans or Array of strings or Array of strings | |
| values | string |
| required | boolean |
| projects | Array of strings |
| sections | Array of strings Items Enum: "feature" "experiment" What types of objects this custom field is applicable to (feature, experiment) |
| active | boolean |
{- "name": "string",
- "description": "string",
- "placeholder": "string",
- "defaultValue": "string",
- "values": "string",
- "required": true,
- "projects": [
- "string"
], - "sections": [
- "feature"
], - "active": true
}{- "customField": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "description": "string",
- "placeholder": "string",
- "defaultValue": "string",
- "type": "text",
- "values": "string",
- "required": true,
- "creator": "string",
- "projects": [
- "string"
], - "sections": [
- "feature"
], - "active": true
}
}| id required | string |
curl -X GET 'https://api.growthbook.io/api/v1/metric-groups/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "metricGroup": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "owner": "string",
- "ownerEmail": "string",
- "name": "string",
- "description": "string",
- "tags": [
- "string"
], - "projects": [
- "string"
], - "metrics": [
- "string"
], - "datasource": "string",
- "archived": true
}
}| id required | string |
curl -X DELETE 'https://api.growthbook.io/api/v1/metric-groups/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "string"
}| id required | string |
| name | string |
| description | string <= 10000 characters |
| tags | Array of strings |
| projects | Array of strings |
| metrics | Array of strings |
| datasource | 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. |
| archived | boolean |
{- "name": "string",
- "description": "string",
- "tags": [
- "string"
], - "projects": [
- "string"
], - "metrics": [
- "string"
], - "datasource": "string",
- "owner": "string",
- "archived": true
}{- "metricGroup": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "owner": "string",
- "ownerEmail": "string",
- "name": "string",
- "description": "string",
- "tags": [
- "string"
], - "projects": [
- "string"
], - "metrics": [
- "string"
], - "datasource": "string",
- "archived": true
}
}| name required | string |
| description required | string <= 10000 characters |
| tags | Array of strings |
| projects required | Array of strings |
| metrics required | Array of strings |
| datasource required | 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. |
| archived | boolean |
{- "name": "string",
- "description": "string",
- "tags": [
- "string"
], - "projects": [
- "string"
], - "metrics": [
- "string"
], - "datasource": "string",
- "owner": "string",
- "archived": true
}{- "metricGroup": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "owner": "string",
- "ownerEmail": "string",
- "name": "string",
- "description": "string",
- "tags": [
- "string"
], - "projects": [
- "string"
], - "metrics": [
- "string"
], - "datasource": "string",
- "archived": true
}
}curl -X GET 'https://api.growthbook.io/api/v1/metric-groups' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "metricGroups": [
- {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "owner": "string",
- "ownerEmail": "string",
- "name": "string",
- "description": "string",
- "tags": [
- "string"
], - "projects": [
- "string"
], - "metrics": [
- "string"
], - "datasource": "string",
- "archived": true
}
]
}curl -X GET 'https://api.growthbook.io/api/v1/teams/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "team": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "createdBy": "string",
- "description": "string",
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
], - "projectRoles": [
- {
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
], - "teams": [
- "string"
], - "project": "string"
}
], - "members": [
- "string"
], - "managedByIdp": true,
- "managedBy": {
- "type": "vercel",
- "resourceId": "string"
}, - "defaultProject": "string"
}
}| id required | string |
| name | string |
| createdBy | string |
| description | string |
| role | string The global role for members of this team |
| limitAccessByEnvironment | boolean |
| environments | Array of strings An empty array means 'all environments' |
Array of objects | |
object | |
| defaultProject | string |
{- "name": "string",
- "createdBy": "string",
- "description": "string",
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
], - "projectRoles": [
- {
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
], - "teams": [
- "string"
], - "project": "string"
}
], - "managedBy": {
- "type": "vercel",
- "resourceId": "string"
}, - "defaultProject": "string"
}{- "team": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "createdBy": "string",
- "description": "string",
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
], - "projectRoles": [
- {
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
], - "teams": [
- "string"
], - "project": "string"
}
], - "members": [
- "string"
], - "managedByIdp": true,
- "managedBy": {
- "type": "vercel",
- "resourceId": "string"
}, - "defaultProject": "string"
}
}| id required | string |
| deleteMembers | string When 'true', enables deleting a team that contains members |
curl -X DELETE 'https://api.growthbook.io/api/v1/teams/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "string"
}| name required | string |
| createdBy | string |
| description required | string |
| role required | string The global role for members of this team |
| limitAccessByEnvironment | boolean |
| environments | Array of strings An empty array means 'all environments' |
Array of objects | |
object | |
| defaultProject | string |
{- "name": "string",
- "createdBy": "string",
- "description": "string",
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
], - "projectRoles": [
- {
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
], - "teams": [
- "string"
], - "project": "string"
}
], - "managedBy": {
- "type": "vercel",
- "resourceId": "string"
}, - "defaultProject": "string"
}{- "team": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "createdBy": "string",
- "description": "string",
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
], - "projectRoles": [
- {
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
], - "teams": [
- "string"
], - "project": "string"
}
], - "members": [
- "string"
], - "managedByIdp": true,
- "managedBy": {
- "type": "vercel",
- "resourceId": "string"
}, - "defaultProject": "string"
}
}curl -X GET 'https://api.growthbook.io/api/v1/teams' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "teams": [
- {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "createdBy": "string",
- "description": "string",
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
], - "projectRoles": [
- {
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
], - "teams": [
- "string"
], - "project": "string"
}
], - "members": [
- "string"
], - "managedByIdp": true,
- "managedBy": {
- "type": "vercel",
- "resourceId": "string"
}, - "defaultProject": "string"
}
]
}| id required | string |
| members required | Array of strings |
{- "members": [
- "string"
]
}{- "status": 0
}| id required | string |
| members required | Array of strings |
{- "members": [
- "string"
]
}{- "status": 0
}| id required | string |
curl -X GET 'https://api.growthbook.io/api/v1/experiment-templates/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "experimentTemplate": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "project": "string",
- "owner": "string",
- "ownerEmail": "string",
- "templateMetadata": {
- "name": "string",
- "description": "string"
}, - "type": "standard",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "customFields": {
- "property1": "string",
- "property2": "string"
}, - "datasource": "string",
- "exposureQueryId": "string",
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "disableStickyBucketing": true,
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "statsEngine": "bayesian",
- "segment": "string",
- "skipPartialData": true,
- "targeting": {
- "coverage": 0,
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "condition": "string"
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
]
}
}| id required | string |
curl -X DELETE 'https://api.growthbook.io/api/v1/experiment-templates/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "string"
}| id required | string |
| project | string |
object | |
| type | string Value: "standard" |
| hypothesis | string |
| description | string <= 10000 characters |
| tags | Array of strings |
object | |
| datasource | string |
| exposureQueryId | string |
| hashAttribute | string |
| fallbackAttribute | string |
| disableStickyBucketing | boolean |
| goalMetrics | Array of strings |
| secondaryMetrics | Array of strings |
| guardrailMetrics | Array of strings |
| activationMetric | string |
| statsEngine | string Enum: "bayesian" "frequentist" |
| segment | string |
| skipPartialData | boolean |
object | |
Array of objects |
{- "project": "string",
- "templateMetadata": {
- "name": "string",
- "description": "string"
}, - "type": "standard",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "customFields": {
- "property1": "string",
- "property2": "string"
}, - "datasource": "string",
- "exposureQueryId": "string",
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "disableStickyBucketing": true,
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "statsEngine": "bayesian",
- "segment": "string",
- "skipPartialData": true,
- "targeting": {
- "coverage": 0,
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "condition": "string"
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
]
}{- "experimentTemplate": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "project": "string",
- "owner": "string",
- "ownerEmail": "string",
- "templateMetadata": {
- "name": "string",
- "description": "string"
}, - "type": "standard",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "customFields": {
- "property1": "string",
- "property2": "string"
}, - "datasource": "string",
- "exposureQueryId": "string",
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "disableStickyBucketing": true,
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "statsEngine": "bayesian",
- "segment": "string",
- "skipPartialData": true,
- "targeting": {
- "coverage": 0,
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "condition": "string"
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
]
}
}| project | string |
required | object |
| type required | string Value: "standard" |
| hypothesis | string |
| description | string <= 10000 characters |
| tags | Array of strings |
object | |
| datasource required | string |
| exposureQueryId required | string |
| hashAttribute | string |
| fallbackAttribute | string |
| disableStickyBucketing | boolean |
| goalMetrics | Array of strings |
| secondaryMetrics | Array of strings |
| guardrailMetrics | Array of strings |
| activationMetric | string |
| statsEngine required | string Enum: "bayesian" "frequentist" |
| segment | string |
| skipPartialData | boolean |
required | object |
Array of objects |
{- "project": "string",
- "templateMetadata": {
- "name": "string",
- "description": "string"
}, - "type": "standard",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "customFields": {
- "property1": "string",
- "property2": "string"
}, - "datasource": "string",
- "exposureQueryId": "string",
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "disableStickyBucketing": true,
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "statsEngine": "bayesian",
- "segment": "string",
- "skipPartialData": true,
- "targeting": {
- "coverage": 0,
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "condition": "string"
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
]
}{- "experimentTemplate": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "project": "string",
- "owner": "string",
- "ownerEmail": "string",
- "templateMetadata": {
- "name": "string",
- "description": "string"
}, - "type": "standard",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "customFields": {
- "property1": "string",
- "property2": "string"
}, - "datasource": "string",
- "exposureQueryId": "string",
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "disableStickyBucketing": true,
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "statsEngine": "bayesian",
- "segment": "string",
- "skipPartialData": true,
- "targeting": {
- "coverage": 0,
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "condition": "string"
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
]
}
}| projectId | string |
curl -X GET 'https://api.growthbook.io/api/v1/experiment-templates' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "experimentTemplates": [
- {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "project": "string",
- "owner": "string",
- "ownerEmail": "string",
- "templateMetadata": {
- "name": "string",
- "description": "string"
}, - "type": "standard",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "customFields": {
- "property1": "string",
- "property2": "string"
}, - "datasource": "string",
- "exposureQueryId": "string",
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "disableStickyBucketing": true,
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "statsEngine": "bayesian",
- "segment": "string",
- "skipPartialData": true,
- "targeting": {
- "coverage": 0,
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "condition": "string"
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
]
}
]
}required | Array of objects | ||||
Array
| |||||
{- "templates": [
- {
- "id": "string",
- "data": {
- "project": "string",
- "templateMetadata": {
- "name": "string",
- "description": "string"
}, - "type": "standard",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "customFields": {
- "property1": "string",
- "property2": "string"
}, - "datasource": "string",
- "exposureQueryId": "string",
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "disableStickyBucketing": true,
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "statsEngine": "bayesian",
- "segment": "string",
- "skipPartialData": true,
- "targeting": {
- "coverage": 0,
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "condition": "string"
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
]
}
}
]
}{- "added": 0,
- "updated": 0
}| cache | string Enum: "preferred" "required" "never" Controls cache behavior for this exploration: |
| datasource required | string ID of the datasource to query |
required | Array of objects or objects or objects or objects |
| chartType required | string Enum: "line" "area" "timeseries-table" "table" "bar" "stackedBar" "horizontalBar" "stackedHorizontalBar" "bigNumber" |
required | object |
| showAs | string Enum: "total" "per_unit" |
| type required | string Value: "metric" |
required | object |
{- "datasource": "string",
- "dimensions": [
- {
- "dimensionType": "date",
- "column": "string",
- "dateGranularity": "auto"
}
], - "chartType": "line",
- "dateRange": {
- "predefined": "today",
- "lookbackValue": 0,
- "lookbackUnit": "hour",
- "startDate": "string",
- "endDate": "string"
}, - "showAs": "total",
- "type": "metric",
- "dataset": {
- "type": "metric",
- "values": [
- {
- "name": "string",
- "rowFilters": [
- {
- "operator": "=",
- "column": "string",
- "values": [
- "string"
]
}
], - "type": "metric",
- "metricId": "string",
- "unit": "string",
- "denominatorUnit": "string"
}
]
}
}{- "exploration": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "datasource": "string",
- "status": "running",
- "dateStart": "string",
- "dateEnd": "string",
- "error": "string",
- "result": {
- "rows": [
- {
- "dimensions": [
- "string"
], - "values": [
- {
- "metricId": "string",
- "numerator": 0,
- "denominator": 0
}
]
}
]
}, - "config": {
- "datasource": "string",
- "dimensions": [
- {
- "dimensionType": "date",
- "column": "string",
- "dateGranularity": "auto"
}
], - "chartType": "line",
- "dateRange": {
- "predefined": "today",
- "lookbackValue": 0,
- "lookbackUnit": "hour",
- "startDate": "string",
- "endDate": "string"
}, - "showAs": "total",
- "type": "metric",
- "dataset": {
- "type": "metric",
- "values": [
- {
- "name": "string",
- "rowFilters": [
- {
- "operator": "=",
- "column": "string",
- "values": [
- "string"
]
}
], - "type": "metric",
- "metricId": "string",
- "unit": "string",
- "denominatorUnit": "string"
}
]
}
}
}, - "query": {
- "id": "string",
- "organization": "string",
- "datasource": "string",
- "language": "string",
- "query": "string",
- "queryType": "string",
- "createdAt": "string",
- "startedAt": "string",
- "status": "running",
- "externalId": "string",
- "dependencies": [
- "string"
], - "runAtEnd": true
}, - "explorationUrl": "string",
- "message": "string"
}| cache | string Enum: "preferred" "required" "never" Controls cache behavior for this exploration: |
| datasource required | string ID of the datasource to query |
required | Array of objects or objects or objects or objects |
| chartType required | string Enum: "line" "area" "timeseries-table" "table" "bar" "stackedBar" "horizontalBar" "stackedHorizontalBar" "bigNumber" |
required | object |
| showAs | string Enum: "total" "per_unit" |
| type required | string Value: "fact_table" |
required | object |
{- "datasource": "string",
- "dimensions": [
- {
- "dimensionType": "date",
- "column": "string",
- "dateGranularity": "auto"
}
], - "chartType": "line",
- "dateRange": {
- "predefined": "today",
- "lookbackValue": 0,
- "lookbackUnit": "hour",
- "startDate": "string",
- "endDate": "string"
}, - "showAs": "total",
- "type": "fact_table",
- "dataset": {
- "type": "fact_table",
- "factTableId": "string",
- "values": [
- {
- "name": "string",
- "rowFilters": [
- {
- "operator": "=",
- "column": "string",
- "values": [
- "string"
]
}
], - "type": "fact_table",
- "valueType": "unit_count",
- "valueColumn": "string",
- "unit": "string"
}
]
}
}{- "exploration": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "datasource": "string",
- "status": "running",
- "dateStart": "string",
- "dateEnd": "string",
- "error": "string",
- "result": {
- "rows": [
- {
- "dimensions": [
- "string"
], - "values": [
- {
- "metricId": "string",
- "numerator": 0,
- "denominator": 0
}
]
}
]
}, - "config": {
- "datasource": "string",
- "dimensions": [
- {
- "dimensionType": "date",
- "column": "string",
- "dateGranularity": "auto"
}
], - "chartType": "line",
- "dateRange": {
- "predefined": "today",
- "lookbackValue": 0,
- "lookbackUnit": "hour",
- "startDate": "string",
- "endDate": "string"
}, - "showAs": "total",
- "type": "fact_table",
- "dataset": {
- "type": "fact_table",
- "factTableId": "string",
- "values": [
- {
- "name": "string",
- "rowFilters": [
- {
- "operator": "=",
- "column": "string",
- "values": [
- "string"
]
}
], - "type": "fact_table",
- "valueType": "unit_count",
- "valueColumn": "string",
- "unit": "string"
}
]
}
}
}, - "query": {
- "id": "string",
- "organization": "string",
- "datasource": "string",
- "language": "string",
- "query": "string",
- "queryType": "string",
- "createdAt": "string",
- "startedAt": "string",
- "status": "running",
- "externalId": "string",
- "dependencies": [
- "string"
], - "runAtEnd": true
}, - "explorationUrl": "string",
- "message": "string"
}| cache | string Enum: "preferred" "required" "never" Controls cache behavior for this exploration: |
| datasource required | string ID of the datasource to query |
required | Array of objects or objects or objects or objects |
| chartType required | string Enum: "line" "area" "timeseries-table" "table" "bar" "stackedBar" "horizontalBar" "stackedHorizontalBar" "bigNumber" |
required | object |
| showAs | string Enum: "total" "per_unit" |
| type required | string Value: "data_source" |
required | object |
{- "datasource": "string",
- "dimensions": [
- {
- "dimensionType": "date",
- "column": "string",
- "dateGranularity": "auto"
}
], - "chartType": "line",
- "dateRange": {
- "predefined": "today",
- "lookbackValue": 0,
- "lookbackUnit": "hour",
- "startDate": "string",
- "endDate": "string"
}, - "showAs": "total",
- "type": "data_source",
- "dataset": {
- "type": "data_source",
- "table": "string",
- "path": "string",
- "timestampColumn": "string",
- "columnTypes": {
- "property1": "string",
- "property2": "string"
}, - "values": [
- {
- "name": "string",
- "rowFilters": [
- {
- "operator": "=",
- "column": "string",
- "values": [
- "string"
]
}
], - "type": "data_source",
- "valueType": "unit_count",
- "valueColumn": "string",
- "unit": "string"
}
]
}
}{- "exploration": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "datasource": "string",
- "status": "running",
- "dateStart": "string",
- "dateEnd": "string",
- "error": "string",
- "result": {
- "rows": [
- {
- "dimensions": [
- "string"
], - "values": [
- {
- "metricId": "string",
- "numerator": 0,
- "denominator": 0
}
]
}
]
}, - "config": {
- "datasource": "string",
- "dimensions": [
- {
- "dimensionType": "date",
- "column": "string",
- "dateGranularity": "auto"
}
], - "chartType": "line",
- "dateRange": {
- "predefined": "today",
- "lookbackValue": 0,
- "lookbackUnit": "hour",
- "startDate": "string",
- "endDate": "string"
}, - "showAs": "total",
- "type": "data_source",
- "dataset": {
- "type": "data_source",
- "table": "string",
- "path": "string",
- "timestampColumn": "string",
- "columnTypes": {
- "property1": "string",
- "property2": "string"
}, - "values": [
- {
- "name": "string",
- "rowFilters": [
- {
- "operator": "=",
- "column": "string",
- "values": [
- "string"
]
}
], - "type": "data_source",
- "valueType": "unit_count",
- "valueColumn": "string",
- "unit": "string"
}
]
}
}
}, - "query": {
- "id": "string",
- "organization": "string",
- "datasource": "string",
- "language": "string",
- "query": "string",
- "queryType": "string",
- "createdAt": "string",
- "startedAt": "string",
- "status": "running",
- "externalId": "string",
- "dependencies": [
- "string"
], - "runAtEnd": true
}, - "explorationUrl": "string",
- "message": "string"
}| id required | string |
curl -X GET 'https://api.growthbook.io/api/v1/ramp-schedule-templates/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "rampScheduleTemplate": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "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"
], - "enabled": true
}
}
]
}
], - "endPatch": {
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
]
}, - "official": true,
- "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"
}
}
}| id required | string |
curl -X DELETE 'https://api.growthbook.io/api/v1/ramp-schedule-templates/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "deletedId": "string"
}| id required | string |
| name | string |
Array of objects | |
object | |
| official | boolean |
object or null | |
object |
{- "name": "string",
- "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"
], - "enabled": true
}
}
]
}
], - "endPatch": {
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
]
}, - "official": true,
- "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"
}
}{- "rampScheduleTemplate": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "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"
], - "enabled": true
}
}
]
}
], - "endPatch": {
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
]
}, - "official": true,
- "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"
}
}
}| name required | string |
required | Array of objects |
object | |
| official | boolean |
object or null | |
object |
{- "name": "string",
- "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"
], - "enabled": true
}
}
]
}
], - "endPatch": {
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
]
}, - "official": true,
- "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"
}
}{- "rampScheduleTemplate": {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "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"
], - "enabled": true
}
}
]
}
], - "endPatch": {
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
]
}, - "official": true,
- "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"
}
}
}curl -X GET 'https://api.growthbook.io/api/v1/ramp-schedule-templates' \ -H 'Authorization: Bearer YOUR_API_KEY'
{- "rampScheduleTemplates": [
- {
- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "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"
], - "enabled": true
}
}
]
}
], - "endPatch": {
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
]
}, - "official": true,
- "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"
}
}
]
}| idType required | string The id type this aggregated table is keyed by |
| status required | string Enum: "running" "error" "pending" "active" Materialization status: |
required | string or null Fully-qualified warehouse table name, or null if it has not been created yet |
required | string or null Earliest event date covered by the materialized data |
required | string or null Latest event date covered by the materialized data |
required | string or null Event-time high-water mark; the next incremental refresh appends events after this timestamp |
required | string or null Error message from the last failed run, if any |
required | string or null When the aggregation metadata was last updated |
| pendingRestate required | boolean Whether the next run will be forced to drop and rebuild the table instead of appending incrementally |
required | string or null Why a restate is pending, if |
{- "idType": "string",
- "status": "running",
- "tableFullName": "string",
- "firstEventDate": "2019-08-24T14:15:22Z",
- "lastEventDate": "2019-08-24T14:15:22Z",
- "lastMaxTimestamp": "2019-08-24T14:15:22Z",
- "lastError": "string",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "pendingRestate": true,
- "pendingRestateReason": "incomplete-write"
}| id required | string |
| dateCreated required | string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[... |
| dateUpdated required | string <date-time> ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[... |
| datasource required | string |
| status required | string Enum: "running" "success" "error" |
| dateStart required | string |
| dateEnd required | string |
string or null | |
required | object |
required | object or object or object |
{- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "datasource": "string",
- "status": "running",
- "dateStart": "string",
- "dateEnd": "string",
- "error": "string",
- "result": {
- "rows": [
- {
- "dimensions": [
- "string"
], - "values": [
- {
- "metricId": "string",
- "numerator": 0,
- "denominator": 0
}
]
}
]
}, - "config": {
- "datasource": "string",
- "dimensions": [
- {
- "dimensionType": "date",
- "column": "string",
- "dateGranularity": "auto"
}
], - "chartType": "line",
- "dateRange": {
- "predefined": "today",
- "lookbackValue": 0,
- "lookbackUnit": "hour",
- "startDate": "string",
- "endDate": "string"
}, - "showAs": "total",
- "type": "metric",
- "dataset": {
- "type": "metric",
- "values": [
- {
- "name": "string",
- "rowFilters": [
- {
- "operator": "=",
- "column": "string",
- "values": [
- "string"
]
}
], - "type": "metric",
- "metricId": "string",
- "unit": "string",
- "denominatorUnit": "string"
}
]
}
}
}| id required | string |
| dateCreated required | string |
| dateUpdated required | string |
| name required | string |
| description | string <= 10000 characters |
| owner required | string The userId of the owner (or raw owner name/email for legacy records) |
| ownerEmail | string The email address of the owner, when the owner can be resolved to a known user. |
| isPublic required | boolean |
required | object The attributes to set when using this Archetype |
| projects | Array of strings |
| environments | Array of strings Limit this Archetype to specific environments. Omit or leave empty to apply to all environments. |
{- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "name": "string",
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "isPublic": true,
- "attributes": {
- "property1": null,
- "property2": null
}, - "projects": [
- "string"
], - "environments": [
- "string"
]
}| property required | string |
| datatype required | string Enum: "boolean" "string" "number" "secureString" "enum" "string[]" "number[]" "secureString[]" |
| description | string |
| hashAttribute | boolean |
| archived | boolean |
| enum | string |
| format | string Enum: "" "version" "date" "isoCountryCode" |
| projects | Array of strings |
| tags | Array of strings |
{- "property": "string",
- "datatype": "boolean",
- "description": "string",
- "hashAttribute": true,
- "archived": true,
- "enum": "string",
- "format": "",
- "projects": [
- "string"
], - "tags": [
- "string"
]
}| organization required | string The organization name |
| dateUpdated required | string <date-time> When the code references were last updated |
| feature required | string Feature identifier |
| repo required | string Repository name |
| branch required | string Branch name |
| platform | string Enum: "github" "gitlab" "bitbucket" Source control platform |
required | Array of objects |
{- "organization": "string",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "feature": "string",
- "repo": "string",
- "branch": "string",
- "platform": "github",
- "refs": [
- {
- "filePath": "string",
- "startingLineNumber": 0,
- "lines": "string",
- "flagKey": "string"
}
]
}| id required | string |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| name required | string |
| description | string |
| placeholder | string |
string or number or boolean or string or string or Array of strings or Array of numbers or Array of booleans or Array of strings or Array of strings | |
| type required | string Enum: "text" "textarea" "markdown" "enum" "multiselect" "url" "number" "boolean" "date" "datetime" |
| values | string |
| required required | boolean |
| creator | string |
| projects | Array of strings |
| sections required | Array of strings Items Enum: "feature" "experiment" |
| active | boolean |
{- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "description": "string",
- "placeholder": "string",
- "defaultValue": "string",
- "type": "text",
- "values": "string",
- "required": true,
- "creator": "string",
- "projects": [
- "string"
], - "sections": [
- "feature"
], - "active": true
}| id required | string |
| uid required | string |
| organization required | string |
| experimentId | string |
| isDefault required | boolean |
| isDeleted required | boolean |
| userId required | string |
| editLevel required | string Enum: "published" "private" |
| shareLevel required | string Enum: "published" "private" |
| enableAutoUpdates required | boolean |
object or object | |
| title required | string |
object | |
| projects | Array of strings |
| nextUpdate | string <date-time> |
| lastUpdated | string <date-time> |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
required | Array of objects or objects or objects or objects or objects or objects or objects or objects or objects or objects or objects |
{- "id": "string",
- "uid": "string",
- "organization": "string",
- "experimentId": "string",
- "isDefault": true,
- "isDeleted": true,
- "userId": "string",
- "editLevel": "published",
- "shareLevel": "published",
- "enableAutoUpdates": true,
- "updateSchedule": {
- "type": "stale",
- "hours": 0
}, - "title": "string",
- "grid": {
- "cols": 24,
- "rowHeight": 40
}, - "projects": [
- "string"
], - "nextUpdate": "2019-08-24T14:15:22Z",
- "lastUpdated": "2019-08-24T14:15:22Z",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "blocks": [
- {
- "organization": "string",
- "id": "string",
- "uid": "string",
- "type": "metric-explorer",
- "title": "string",
- "description": "string",
- "snapshotId": "string",
- "layout": {
- "x": 23,
- "y": 0,
- "w": 1,
- "h": 1,
- "static": true
}, - "factMetricId": "string",
- "visualizationType": "histogram",
- "valueType": "avg",
- "metricAnalysisId": "string",
- "analysisSettings": {
- "userIdType": "string",
- "lookbackDays": 0,
- "populationType": "metric",
- "populationId": "string",
- "additionalNumeratorFilters": [
- "string"
], - "additionalDenominatorFilters": [
- "string"
], - "startDate": "string",
- "endDate": "string"
}
}
]
}| id required | string |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| type required | string |
| name required | string |
| description required | string <= 10000 characters |
| projectIds required | Array of strings |
| eventTracker required | string |
required | Array of objects |
required | Array of objects |
required | Array of objects |
object |
{- "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"
}
}| id required | string |
| dateCreated required | string |
| dateUpdated required | string |
| owner required | string The userId of the owner (or raw owner name/email for legacy records) |
| ownerEmail | string The email address of the owner, when the owner can be resolved to a known user. |
| datasourceId required | string |
| identifierType required | string |
| name required | string |
| description | string <= 10000 characters |
| query required | string |
| managedBy | string Enum: "" "api" "config" Where this dimension must be managed from. If not set (empty string), it can be managed from anywhere. |
{- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "owner": "string",
- "ownerEmail": "string",
- "datasourceId": "string",
- "identifierType": "string",
- "name": "string",
- "description": "string",
- "query": "string",
- "managedBy": ""
}| id required | string |
| description required | string |
| toggleOnList required | boolean |
| defaultState required | boolean |
| projects required | Array of strings |
| parent | string |
{- "id": "string",
- "description": "string",
- "toggleOnList": true,
- "defaultState": true,
- "projects": [
- "string"
], - "parent": "string"
}| type required | string Enum: "dashboard" "api_key" "system" |
| id | string |
| name | string |
string |
{- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}| id required | string |
| trackingKey required | string |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| name required | string |
| type required | string Enum: "standard" "multi-armed-bandit" "holdout" |
| project required | string |
| hypothesis required | string |
| description required | string <= 10000 characters |
| tags required | Array of strings |
| owner required | string The userId of the owner (or raw owner name/email for legacy records) |
| ownerEmail | string The email address of the owner, when the owner can be resolved to a known user. |
| archived required | boolean |
| status required | string |
| autoRefresh required | boolean |
| hashAttribute required | string |
| fallbackAttribute | string |
required | 1 (number) or 2 (number) |
| disableStickyBucketing | boolean |
| bucketVersion | number |
| minBucketVersion | number |
required | Array of objects |
required | Array of objects |
required | object (ExperimentAnalysisSettings) |
object | |
| shareLevel | string Enum: "public" "organization" |
| publicUrl | string |
| banditScheduleValue | number |
| banditScheduleUnit | string Enum: "days" "hours" |
| banditBurnInValue | number |
| banditBurnInUnit | string Enum: "days" "hours" |
| banditConversionWindowValue | number |
| banditConversionWindowUnit | string Enum: "days" "hours" |
| linkedFeatures | Array of strings |
| hasVisualChangesets | boolean |
| hasURLRedirects | boolean |
object | |
Array of objects Custom slices that apply to ALL applicable metrics in the experiment | |
| precomputedUnitDimensionIds | Array of strings <= 3 items |
| defaultDashboardId | string ID of the default dashboard for this experiment. |
| templateId | string |
object or null | |
object or null |
{- "id": "string",
- "trackingKey": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "type": "standard",
- "project": "string",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "owner": "string",
- "ownerEmail": "string",
- "archived": true,
- "status": "string",
- "autoRefresh": true,
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "hashVersion": 1,
- "disableStickyBucketing": true,
- "bucketVersion": 0,
- "minBucketVersion": 0,
- "variations": [
- {
- "variationId": "string",
- "key": "string",
- "name": "string",
- "description": "string",
- "screenshots": [
- "string"
]
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "reasonForStopping": "string",
- "seed": "string",
- "coverage": 0,
- "trafficSplit": [
- {
- "variationId": "string",
- "weight": 0
}
], - "namespace": {
- "namespaceId": "string",
- "enabled": true,
- "range": [
- 0,
- 0
], - "ranges": [
- [
- 0,
- 0
]
]
}, - "targetingCondition": "string",
- "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
]
}
], - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "resultSummary": {
- "status": "string",
- "winner": "string",
- "conclusions": "string",
- "releasedVariationId": "string",
- "excludeFromPayload": true
}, - "shareLevel": "public",
- "publicUrl": "string",
- "banditScheduleValue": 0,
- "banditScheduleUnit": "days",
- "banditBurnInValue": 0,
- "banditBurnInUnit": "days",
- "banditConversionWindowValue": 0,
- "banditConversionWindowUnit": "days",
- "linkedFeatures": [
- "string"
], - "hasVisualChangesets": true,
- "hasURLRedirects": true,
- "customFields": {
- "property1": null,
- "property2": null
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "precomputedUnitDimensionIds": [
- "string"
], - "defaultDashboardId": "string",
- "templateId": "string",
- "statusUpdateSchedule": {
- "startAt": "2019-08-24T14:15:22Z"
}, - "nextScheduledStatusUpdate": {
- "type": "start",
- "date": "2019-08-24T14:15:22Z"
}
}| description | string |
| enabled | boolean |
| condition | string |
Array of objects | |
Array of objects | |
| allEnvironments | boolean When true the rule applies to all environments. Defaults to false. |
| environments | Array of strings Specific environment IDs this rule applies to. Used when allEnvironments is false. |
| type required | string Must be "experiment-ref" for an experiment rule. Value: "experiment-ref" |
| experimentId required | string ID of the linked experiment. |
required | Array of objects |
{- "description": "string",
- "enabled": true,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "type": "experiment-ref",
- "experimentId": "string",
- "variations": [
- {
- "variationId": "string",
- "value": "string"
}
]
}| datasourceId required | string |
| assignmentQueryId required | string |
| experimentId required | string |
| segmentId required | string |
| queryFilter required | string |
| inProgressConversions required | string Enum: "include" "exclude" |
| attributionModel required | string Enum: "firstExposure" "experimentDuration" "lookbackOverride" Setting attribution model to |
object (LookbackOverride) Controls the lookback override for the experiment. For type "window", value must be a non-negative number and valueUnit is required. | |
| statsEngine required | string Enum: "bayesian" "frequentist" |
| regressionAdjustmentEnabled | boolean |
| sequentialTestingEnabled | boolean |
| sequentialTestingTuningParameter | number |
boolean or null When null, the organization default is used. | |
object (ExperimentDecisionFrameworkSettings) Controls the decision framework and metric overrides for the experiment. Replaces the entire stored object on update (does not patch individual fields). | |
Array of objects (ExperimentMetricOverrideEntry) Per-metric analysis overrides; also reflected in goals/secondaryMetrics/guardrails overrides when applicable. On create/update, this replaces the entire stored array (it does not patch individual entries). | |
required | Array of objects (ExperimentMetric) |
required | Array of objects (ExperimentMetric) |
required | Array of objects (ExperimentMetric) |
object (ExperimentMetric) |
{- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}| decisionCriteriaId | string |
Array of objects |
{- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}| metricId required | string |
required | object |
{- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}| id required | string ID of the metric to override settings for. |
| windowType | string Enum: "conversion" "lookback" "" |
| windowHours | number |
| delayHours | number |
| properPriorOverride | boolean Must be true for the override to take effect. If true, the other proper prior settings in this object will be used if present. |
| properPriorEnabled | boolean |
| properPriorMean | number |
| properPriorStdDev | number |
| regressionAdjustmentOverride | boolean Must be true for the override to take effect. If true, the other regression adjustment settings in this object will be used if present. |
| regressionAdjustmentEnabled | boolean |
| regressionAdjustmentDays | number |
{- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}| id required | string |
| dateUpdated required | string |
| experimentId required | string |
| phase required | string |
| dateStart required | string |
| dateEnd required | string |
required | object |
required | object (ExperimentAnalysisSettings) |
| queryIds required | Array of strings |
required | Array of objects |
{- "id": "string",
- "dateUpdated": "string",
- "experimentId": "string",
- "phase": "string",
- "dateStart": "string",
- "dateEnd": "string",
- "dimension": {
- "type": "string",
- "id": "string"
}, - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "queryIds": [
- "string"
], - "results": [
- {
- "dimension": "string",
- "totalUsers": 0,
- "checks": {
- "srm": 0
}, - "metrics": [
- {
- "metricId": "string",
- "metricName": "string",
- "variations": [
- {
- "variationId": "string",
- "variationName": "string",
- "users": 0,
- "analyses": [
- {
- "engine": "bayesian",
- "numerator": 0,
- "denominator": 0,
- "mean": 0,
- "stddev": 0,
- "percentChange": 0,
- "ciLow": 0,
- "ciHigh": 0,
- "pValue": 0,
- "risk": 0,
- "chanceToBeatControl": 0
}
]
}
]
}
]
}
]
}| id required | string |
| experiment required | string |
| status required | string |
{- "id": "string",
- "experiment": "string",
- "status": "string"
}| id required | string |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| project | string |
| owner required | string The userId of the owner (or raw owner name/email for legacy records) |
| ownerEmail | string The email address of the owner, when the owner can be resolved to a known user. |
required | object |
| type required | string Value: "standard" |
| hypothesis | string |
| description | string <= 10000 characters |
| tags | Array of strings |
object | |
| datasource required | string |
| exposureQueryId required | string |
| hashAttribute | string |
| fallbackAttribute | string |
| disableStickyBucketing | boolean |
| goalMetrics | Array of strings |
| secondaryMetrics | Array of strings |
| guardrailMetrics | Array of strings |
| activationMetric | string |
| statsEngine required | string Enum: "bayesian" "frequentist" |
| segment | string |
| skipPartialData | boolean |
required | object |
Array of objects |
{- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "project": "string",
- "owner": "string",
- "ownerEmail": "string",
- "templateMetadata": {
- "name": "string",
- "description": "string"
}, - "type": "standard",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "customFields": {
- "property1": "string",
- "property2": "string"
}, - "datasource": "string",
- "exposureQueryId": "string",
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "disableStickyBucketing": true,
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "statsEngine": "bayesian",
- "segment": "string",
- "skipPartialData": true,
- "targeting": {
- "coverage": 0,
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "condition": "string"
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
]
}| id required | string |
| trackingKey required | string |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| name required | string |
| type required | string Enum: "standard" "multi-armed-bandit" "holdout" |
| project required | string |
| hypothesis required | string |
| description required | string <= 10000 characters |
| tags required | Array of strings |
| owner required | string The userId of the owner (or raw owner name/email for legacy records) |
| ownerEmail | string The email address of the owner, when the owner can be resolved to a known user. |
| archived required | boolean |
| status required | string |
| autoRefresh required | boolean |
| hashAttribute required | string |
| fallbackAttribute | string |
required | 1 (number) or 2 (number) |
| disableStickyBucketing | boolean |
| bucketVersion | number |
| minBucketVersion | number |
required | Array of objects |
required | Array of objects |
required | object (ExperimentAnalysisSettings) |
object | |
| shareLevel | string Enum: "public" "organization" |
| publicUrl | string |
| banditScheduleValue | number |
| banditScheduleUnit | string Enum: "days" "hours" |
| banditBurnInValue | number |
| banditBurnInUnit | string Enum: "days" "hours" |
| banditConversionWindowValue | number |
| banditConversionWindowUnit | string Enum: "days" "hours" |
| linkedFeatures | Array of strings |
| hasVisualChangesets | boolean |
| hasURLRedirects | boolean |
object | |
Array of objects Custom slices that apply to ALL applicable metrics in the experiment | |
| precomputedUnitDimensionIds | Array of strings <= 3 items |
| defaultDashboardId | string ID of the default dashboard for this experiment. |
| templateId | string |
object or null | |
object or null | |
object |
{- "id": "string",
- "trackingKey": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "type": "standard",
- "project": "string",
- "hypothesis": "string",
- "description": "string",
- "tags": [
- "string"
], - "owner": "string",
- "ownerEmail": "string",
- "archived": true,
- "status": "string",
- "autoRefresh": true,
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "hashVersion": 1,
- "disableStickyBucketing": true,
- "bucketVersion": 0,
- "minBucketVersion": 0,
- "variations": [
- {
- "variationId": "string",
- "key": "string",
- "name": "string",
- "description": "string",
- "screenshots": [
- "string"
]
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "reasonForStopping": "string",
- "seed": "string",
- "coverage": 0,
- "trafficSplit": [
- {
- "variationId": "string",
- "weight": 0
}
], - "namespace": {
- "namespaceId": "string",
- "enabled": true,
- "range": [
- 0,
- 0
], - "ranges": [
- [
- 0,
- 0
]
]
}, - "targetingCondition": "string",
- "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "savedGroupTargeting": [
- {
- "matchType": "all",
- "savedGroups": [
- "string"
]
}
]
}
], - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "resultSummary": {
- "status": "string",
- "winner": "string",
- "conclusions": "string",
- "releasedVariationId": "string",
- "excludeFromPayload": true
}, - "shareLevel": "public",
- "publicUrl": "string",
- "banditScheduleValue": 0,
- "banditScheduleUnit": "days",
- "banditBurnInValue": 0,
- "banditBurnInUnit": "days",
- "banditConversionWindowValue": 0,
- "banditConversionWindowUnit": "days",
- "linkedFeatures": [
- "string"
], - "hasVisualChangesets": true,
- "hasURLRedirects": true,
- "customFields": {
- "property1": null,
- "property2": null
}, - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "precomputedUnitDimensionIds": [
- "string"
], - "defaultDashboardId": "string",
- "templateId": "string",
- "statusUpdateSchedule": {
- "startAt": "2019-08-24T14:15:22Z"
}, - "nextScheduledStatusUpdate": {
- "type": "start",
- "date": "2019-08-24T14:15:22Z"
}, - "enhancedStatus": {
- "status": "Running",
- "detailedStatus": "string"
}
}| id required | string |
| name required | string |
| description required | string <= 10000 characters |
| owner required | string The userId of the owner (or raw owner name/email for legacy records) |
| ownerEmail | string The email address of the owner, when the owner can be resolved to a known user. |
| projects required | Array of strings |
| tags required | Array of strings |
| datasource required | string |
| metricType required | string Enum: "proportion" "retention" "mean" "quantile" "ratio" "dailyParticipation" |
required | object |
object | |
| inverse required | boolean Set to true for things like Bounce Rate, where you want the metric to decrease |
object Controls the settings for quantile metrics (mandatory if metricType is "quantile") | |
required | object Controls how outliers are handled |
required | object Controls the conversion window for the metric |
required | object Controls the bayesian prior for the metric |
required | object Controls the regression adjustment (CUPED) settings for the metric |
| riskThresholdSuccess required | number |
| riskThresholdDanger required | number |
| displayAsPercentage | boolean If true and the metric is a ratio metric, variation means will be displayed as a percentage |
| minPercentChange required | number |
| maxPercentChange required | number |
| minSampleSize required | number |
| targetMDE required | number |
| managedBy required | string Enum: "" "api" "admin" Where this fact metric must be managed from. If not set (empty string), it can be managed from anywhere. |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| archived | boolean |
| metricAutoSlices | Array of strings Array of slice column names that will be automatically included in metric analysis. This is an enterprise feature. |
{- "id": "string",
- "name": "string",
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "projects": [
- "string"
], - "tags": [
- "string"
], - "datasource": "string",
- "metricType": "proportion",
- "numerator": {
- "factTableId": "string",
- "column": "string",
- "aggregation": "sum",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
], - "aggregateFilterColumn": "string",
- "aggregateFilter": "string"
}, - "denominator": {
- "factTableId": "string",
- "column": "string",
- "filters": [
- "string"
], - "inlineFilters": {
- "property1": [
- "string"
], - "property2": [
- "string"
]
}, - "rowFilters": [
- {
- "operator": "=",
- "values": [
- "string"
], - "column": "string"
}
]
}, - "inverse": true,
- "quantileSettings": {
- "type": "event",
- "ignoreZeros": true,
- "quantile": 0.001,
- "quantileEventCountColumn": "string"
}, - "cappingSettings": {
- "type": "none",
- "value": 0,
- "ignoreZeros": true
}, - "windowSettings": {
- "type": "none",
- "delayValue": 0,
- "delayUnit": "minutes",
- "windowValue": 0,
- "windowUnit": "minutes"
}, - "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "regressionAdjustmentSettings": {
- "override": true,
- "enabled": true,
- "days": 0
}, - "riskThresholdSuccess": 0,
- "riskThresholdDanger": 0,
- "displayAsPercentage": true,
- "minPercentChange": 0,
- "maxPercentChange": 0,
- "minSampleSize": 0,
- "targetMDE": 0,
- "managedBy": "",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "metricAutoSlices": [
- "string"
]
}| id required | string |
| name required | string |
| description required | string <= 10000 characters |
| owner required | string The userId of the owner (or raw owner name/email for legacy records) |
| ownerEmail | string The email address of the owner, when the owner can be resolved to a known user. |
| projects required | Array of strings |
| tags required | Array of strings |
| datasource required | string |
| userIdTypes required | Array of strings |
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 |
| eventName | string The event name used in SQL template variables |
Array of objects (FactTableColumn) Array of column definitions for this fact table | |
string or null Error message if there was an issue parsing the SQL schema | |
| archived | boolean |
| managedBy required | string Enum: "" "api" "admin" Where this fact table must be managed from. If not set (empty string), it can be managed from anywhere. |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
{- "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
}, - "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"
], - "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"
}| column required | string The actual column name in the database/SQL query |
| datatype required | string Enum: "number" "string" "date" "boolean" "json" "binary" "other" "" |
| numberFormat | string Enum: "" "currency" "time:seconds" "memory:bytes" "memory:kilobytes" |
object For JSON columns, defines the structure of nested fields | |
| name | string Display name for the column (can be different from the actual column name) |
| description | string <= 10000 characters |
| alwaysInlineFilter | boolean Default: false Whether this column should always be included as an inline filter in queries |
| deleted | boolean Default: false |
| isAutoSliceColumn | boolean Default: false Whether this column can be used for auto slice analysis. This is an enterprise feature. |
| autoSlices | Array of strings Specific slices to automatically analyze for this column. |
| lockedAutoSlices | Array of strings Locked slices that are protected from automatic updates. These will always be included in the slice levels even if they're not in the top values query results. |
| dateCreated | string <date-time> |
| dateUpdated | string <date-time> |
{- "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"
], - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z"
}| id required | string |
| name required | string |
| description required | string <= 10000 characters |
| value required | string |
| managedBy required | string Enum: "" "api" Where this fact table filter must be managed from. If not set (empty string), it can be managed from anywhere. |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
{- "id": "string",
- "name": "string",
- "description": "string",
- "value": "string",
- "managedBy": "",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z"
}| id required | string |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| archived required | boolean |
| description required | string <= 10000 characters |
| owner required | string The userId of the owner (or raw owner name/email for legacy records) |
| ownerEmail | string The email address of the owner, when the owner can be resolved to a known user. |
| project required | string |
| valueType required | string Enum: "boolean" "string" "number" "json" |
| defaultValue required | string |
| tags required | Array of strings |
required | object |
| prerequisites | Array of strings Feature IDs. Each feature must evaluate to |
required | object |
object | |
object or null |
{- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "project": "string",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "string"
}
], - "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": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "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": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "type": "force",
- "value": "string"
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "version": 0,
- "comment": "string",
- "date": "2019-08-24T14:15:22Z",
- "createdBy": "string",
- "publishedBy": "string"
}, - "customFields": {
- "property1": null,
- "property2": null
}, - "holdout": {
- "id": "string",
- "value": "string"
}
}| description required | string <= 10000 characters |
| condition | string |
| id required | string |
| enabled required | boolean |
Array of objects (ScheduleRule) Simple time-based on/off schedule for this rule | |
| scheduleType | string Enum: "none" "schedule" "ramp" UI hint for which scheduling mode is active:
|
| rampScheduleId | string ID of the active RampSchedule document controlling this rule. Present when |
Array of objects | |
Array of objects |
{- "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"
}
]
}required | string or number or Array of any or object or null |
Array of objects |
{- "defaultValue": "string",
- "rules": [
- {
- "force": "string",
- "weights": [
- 0
], - "variations": [
- "string"
], - "hashAttribute": "string",
- "namespace": [
- 0,
- 0,
- 0
], - "key": "string",
- "coverage": 0,
- "condition": {
- "property1": null,
- "property2": null
}
}
]
}| enabled required | boolean |
| defaultValue required | string |
required | Array of FeatureForceRule (object) or FeatureRolloutRule (object) or FeatureExperimentRule (object) or FeatureExperimentRefRule (object) or FeatureSafeRolloutRule (object) (FeatureRule) |
| definition | string A JSON stringified FeatureDefinition |
object |
{- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "type": "force",
- "value": "string"
}
], - "definition": "string"
}
}| enabled required | boolean |
| defaultValue required | string |
| definition | string A JSON stringified FeatureDefinition |
{- "enabled": true,
- "defaultValue": "string",
- "definition": "string"
}| description required | string <= 10000 characters |
| condition | string |
| id required | string |
| enabled required | boolean |
Array of objects (ScheduleRule) Simple time-based on/off schedule for this rule | |
| scheduleType | string Enum: "none" "schedule" "ramp" UI hint for which scheduling mode is active:
|
| rampScheduleId | string ID of the active RampSchedule document controlling this rule. Present when |
Array of objects | |
Array of objects | |
| type required | string Value: "experiment-ref" |
required | Array of objects |
| experimentId required | string |
{- "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"
}
], - "type": "experiment-ref",
- "variations": [
- {
- "value": "string",
- "variationId": "string"
}
], - "experimentId": "string"
}| description required | string <= 10000 characters |
| condition | string |
| id required | string |
| enabled required | boolean |
Array of objects (ScheduleRule) Simple time-based on/off schedule for this rule | |
| scheduleType | string Enum: "none" "schedule" "ramp" UI hint for which scheduling mode is active:
|
| rampScheduleId | string ID of the active RampSchedule document controlling this rule. Present when |
Array of objects | |
Array of objects | |
| type required | string Value: "experiment" |
| trackingKey | string |
| hashAttribute | string |
| fallbackAttribute | string |
| disableStickyBucketing | boolean |
| bucketVersion | number |
| minBucketVersion | number |
object | |
| coverage | number [ 0 .. 1 ] |
Array of objects Variation values with weights |
{- "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"
}
], - "type": "experiment",
- "trackingKey": "string",
- "hashAttribute": "string",
- "fallbackAttribute": "string",
- "disableStickyBucketing": true,
- "bucketVersion": 0,
- "minBucketVersion": 0,
- "namespace": {
- "enabled": true,
- "name": "string",
- "range": [
- 0,
- 0
]
}, - "coverage": 1,
- "value": [
- {
- "value": "string",
- "weight": 0,
- "name": "string"
}
]
}| description required | string <= 10000 characters |
| condition | string |
| id required | string |
| enabled required | boolean |
Array of objects (ScheduleRule) Simple time-based on/off schedule for this rule | |
| scheduleType | string Enum: "none" "schedule" "ramp" UI hint for which scheduling mode is active:
|
| rampScheduleId | string ID of the active RampSchedule document controlling this rule. Present when |
Array of objects | |
Array of objects | |
| type required | string Value: "force" |
| value required | string |
{- "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"
}
], - "type": "force",
- "value": "string"
}| featureId required | string The feature this revision belongs to |
| baseVersion required | integer |
| version required | integer |
| comment required | string |
| date required | string <date-time> |
| status required | string |
| createdBy | string |
| publishedBy | string |
| defaultValue | string The default value at the time this revision was created |
required | object |
object | |
object Per-environment enabled state captured in this revision (only present when kill-switch gating is enabled) | |
object Per-environment prerequisites captured in this revision (only present when prerequisite gating is enabled) | |
Array of objects Feature-level prerequisites captured in this revision (only present when prerequisite gating is enabled) | |
object Metadata fields captured in this revision (only present when metadata gating is enabled) | |
Array of objects or objects or objects Pending ramp schedule actions that will be applied when this draft is published |
{- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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": [
- "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": null,
- "ids": [ ]
}
], - "prerequisites": [
- {
- "id": null,
- "condition": null
}
], - "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",
- "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"
}
}
]
}| featureId required | string The feature this revision belongs to |
| baseVersion required | integer |
| version required | integer |
| comment required | string |
| date required | string <date-time> |
| status required | string |
object (EventUser) The user (or automated actor) responsible for an action | |
object (EventUser) The user (or automated actor) responsible for an action | |
| defaultValue | string The default value at the time this revision was created |
required | Array of FeatureForceRule (object) or FeatureRolloutRule (object) or FeatureExperimentRule (object) or FeatureExperimentRefRule (object) or FeatureSafeRolloutRule (object) (FeatureRuleV2) Unified rules array. Each rule carries its own environment scope via |
object | |
object Per-environment enabled state captured in this revision (only present when kill-switch gating is enabled) | |
object Per-environment prerequisites captured in this revision (only present when prerequisite gating is enabled) | |
Array of objects Feature-level prerequisites captured in this revision. Each entry is a boolean flag ID that must evaluate to true for this flag to be active for a given user. | |
object Metadata fields captured in this revision (only present when metadata gating is enabled) | |
Array of objects or objects or objects Pending ramp schedule actions that will be applied when this draft is published | |
Array of objects Reviewer verdicts for the current review cycle (one entry per reviewer). Verdicts flip to their -stale variants when draft content changes after submission; the list is cleared when a new review cycle starts. Absent on revisions that predate this field. |
{- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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": [
- "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": null,
- "ids": [ ]
}
], - "prerequisites": [
- {
- "id": null,
- "condition": null
}
], - "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",
- "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"
}
}
], - "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}| description required | string <= 10000 characters |
| condition | string |
| id required | string |
| enabled required | boolean |
Array of objects (ScheduleRule) Simple time-based on/off schedule for this rule | |
| scheduleType | string Enum: "none" "schedule" "ramp" UI hint for which scheduling mode is active:
|
| rampScheduleId | string ID of the active RampSchedule document controlling this rule. Present when |
Array of objects | |
Array of objects | |
| type required | string Value: "rollout" |
| value required | string |
| coverage required | number [ 0 .. 1 ] |
| hashAttribute required | string |
| seed | string Optional seed for the hash function; defaults to the rule id |
1 (number) or 2 (number) Hash algorithm version for bucketing. Defaults to 2 (preferred) when not specified. |
{- "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"
}
], - "type": "rollout",
- "value": "string",
- "coverage": 1,
- "hashAttribute": "string",
- "seed": "string",
- "hashVersion": 1
}| description required | string <= 10000 characters |
| condition | string |
| id required | string |
| enabled required | boolean |
Array of objects (ScheduleRule) Simple time-based on/off schedule for this rule | |
| scheduleType | string Enum: "none" "schedule" "ramp" UI hint for which scheduling mode is active:
|
| rampScheduleId | string ID of the active RampSchedule document controlling this rule. Present when |
Array of objects | |
Array of objects | |
| type required | string Value: "force" |
| value required | string |
{- "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"
}
], - "type": "force",
- "value": "string"
}| description required | string <= 10000 characters |
| condition | string |
| id required | string |
| enabled required | boolean |
Array of objects (ScheduleRule) Simple time-based on/off schedule for this rule | |
| scheduleType | string Enum: "none" "schedule" "ramp" UI hint for which scheduling mode is active:
|
| rampScheduleId | string ID of the active RampSchedule document controlling this rule. Present when |
Array of objects | |
Array of objects | |
| type required | string Value: "force" |
| value required | string |
| allEnvironments required | boolean When true the rule applies to all environments. When false only the environments listed in |
| environments | Array of strings The environment IDs this rule is active in. Populated when |
| pendingRamp | string Enum: "create" "detach" Present on draft revisions only. "create" means a ramp schedule will be created for this rule on publish. "detach" means an existing live ramp schedule will be removed on publish. Use PUT/DELETE .../rules/{ruleId}/ramp-schedule to modify. |
{- "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"
}
], - "type": "force",
- "value": "string",
- "allEnvironments": true,
- "environments": [
- "string"
], - "pendingRamp": "create"
}| description required | string <= 10000 characters |
| condition | string |
| id required | string |
| enabled required | boolean |
Array of objects (ScheduleRule) Simple time-based on/off schedule for this rule | |
| scheduleType | string Enum: "none" "schedule" "ramp" UI hint for which scheduling mode is active:
|
| rampScheduleId | string ID of the active RampSchedule document controlling this rule. Present when |
Array of objects | |
Array of objects | |
| type required | string Value: "safe-rollout" |
| controlValue required | string |
| variationValue required | string |
| seed | string |
| hashAttribute | string |
| trackingKey | string |
| safeRolloutId | string |
| status | string Enum: "running" "released" "rolled-back" "stopped" |
{- "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"
}
], - "type": "safe-rollout",
- "controlValue": "string",
- "variationValue": "string",
- "seed": "string",
- "hashAttribute": "string",
- "trackingKey": "string",
- "safeRolloutId": "string",
- "status": "running"
}| id required | string |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| archived required | boolean |
| description required | string <= 10000 characters |
| owner required | 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 required | string |
| valueType required | string Enum: "boolean" "string" "number" "json" |
| defaultValue required | string |
| tags required | Array of strings |
required | Array of FeatureForceRule (object) or FeatureRolloutRule (object) or FeatureExperimentRule (object) or FeatureExperimentRefRule (object) or FeatureSafeRolloutRule (object) (FeatureRuleV2) Unified rules array. Each rule carries its own environment scope via |
required | object Per-environment enabled state and SDK payload. Rules are on the top-level |
| prerequisites | Array of strings Feature IDs. Each feature must evaluate to |
required | object |
object | |
object or null |
{- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "project": "string",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "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": {
- "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 |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| archived required | boolean |
| description required | string <= 10000 characters |
| owner required | string The userId of the owner (or raw owner name/email for legacy records) |
| ownerEmail | string The email address of the owner, when the owner can be resolved to a known user. |
| project required | string |
| valueType required | string Enum: "boolean" "string" "number" "json" |
| defaultValue required | string |
| tags required | Array of strings |
required | object |
| prerequisites | Array of strings Feature IDs. Each feature must evaluate to |
required | object |
object | |
object or null | |
Array of objects (FeatureRevision) |
{- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "ownerEmail": "string",
- "project": "string",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "string"
}
], - "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": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
], - "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": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "type": "force",
- "value": "string"
}
], - "definition": "string"
}
}
}, - "prerequisites": [
- "string"
], - "revision": {
- "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": [
- {
- "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"
}
], - "type": "force",
- "value": "string"
}
], - "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"
}
], - "type": "force",
- "value": "string"
}
]
}, - "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
}
}, - "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"
}
}
]
}
]
}| id required | string |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| archived required | boolean |
| description required | string <= 10000 characters |
| owner required | 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 required | string |
| valueType required | string Enum: "boolean" "string" "number" "json" |
| defaultValue required | string |
| tags required | Array of strings |
required | Array of FeatureForceRule (object) or FeatureRolloutRule (object) or FeatureExperimentRule (object) or FeatureExperimentRefRule (object) or FeatureSafeRolloutRule (object) (FeatureRuleV2) Unified rules array. Each rule carries its own environment scope via |
required | object Per-environment enabled state and SDK payload. Rules are on the top-level |
| prerequisites | Array of strings Feature IDs. Each feature must evaluate to |
required | object |
object | |
object or null | |
Array of objects (FeatureRevisionV2) |
{- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "archived": true,
- "description": "string",
- "owner": "string",
- "project": "string",
- "valueType": "boolean",
- "defaultValue": "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"
}
], - "type": "force",
- "value": "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": {
- "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": [
- {
- "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",
- "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"
}
], - "type": "force",
- "value": "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
}
}, - "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"
}
}
], - "reviews": [
- {
- "userId": "string",
- "user": {
- "type": "dashboard",
- "id": "string",
- "name": "string",
- "email": "string"
}, - "status": "approved",
- "timestamp": "2019-08-24T14:15:22Z"
}
]
}
]
}| id required | string |
| datasourceId required | string |
| status required | string Enum: "PENDING" "COMPLETE" |
object | |
required | Array of objects |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
{- "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"
}| id required | string |
| datasourceId required | string |
| informationSchemaId required | string |
| tableName required | string |
| tableSchema required | string |
| databaseName required | string |
required | Array of objects |
| refreshMS required | number |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
{- "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"
}| type required | string Enum: "date" "window" |
required | number or string For "window" type - non-negative numeric value (e.g. 7 for 7 days). For "date" type a date string. |
| valueUnit | string Enum: "minutes" "hours" "days" "weeks" Used when type is "window". Defaults to "days". |
{- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}| id required | string |
| name | string |
| email required | string |
| globalRole required | string |
| environments | Array of strings |
| limitAccessByEnvironment | boolean |
| managedbyIdp | boolean |
| teams | Array of strings |
Array of objects | |
| lastLoginDate | string <date-time> |
| dateCreated | string <date-time> |
| dateUpdated | string <date-time> |
{- "id": "string",
- "name": "string",
- "email": "string",
- "globalRole": "string",
- "environments": [
- "string"
], - "limitAccessByEnvironment": true,
- "managedbyIdp": true,
- "teams": [
- "string"
], - "projectRoles": [
- {
- "project": "string",
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
]
}
], - "lastLoginDate": "2019-08-24T14:15:22Z",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z"
}| id required | string |
| managedBy required | string Enum: "" "api" "config" "admin" Where this metric must be managed from. If not set (empty string), it can be managed from anywhere. |
| dateCreated required | string |
| dateUpdated required | string |
| owner required | string The userId of the owner (or raw owner name/email for legacy records) |
| ownerEmail | string The email address of the owner, when the owner can be resolved to a known user. |
| datasourceId required | string |
| name required | string |
| description required | string <= 10000 characters |
| type required | string Enum: "binomial" "count" "duration" "revenue" |
| tags required | Array of strings |
| projects required | Array of strings |
| archived required | boolean |
required | object |
object | |
object | |
object |
{- "id": "string",
- "managedBy": "",
- "dateCreated": "string",
- "dateUpdated": "string",
- "owner": "string",
- "ownerEmail": "string",
- "datasourceId": "string",
- "name": "string",
- "description": "string",
- "type": "binomial",
- "tags": [
- "string"
], - "projects": [
- "string"
], - "archived": true,
- "behavior": {
- "goal": "increase",
- "cappingSettings": {
- "type": "none",
- "value": 0,
- "ignoreZeros": true
}, - "cap": 0,
- "capping": "absolute",
- "capValue": 0,
- "windowSettings": {
- "type": "none",
- "delayValue": 0,
- "delayUnit": "minutes",
- "windowValue": 0,
- "windowUnit": "minutes"
}, - "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "conversionWindowStart": 0,
- "conversionWindowEnd": 0,
- "riskThresholdSuccess": 0,
- "riskThresholdDanger": 0,
- "minPercentChange": 0,
- "maxPercentChange": 0,
- "minSampleSize": 0,
- "targetMDE": 0
}, - "sql": {
- "identifierTypes": [
- "string"
], - "conversionSQL": "string",
- "userAggregationSQL": "string",
- "denominatorMetricId": "string"
}, - "sqlBuilder": {
- "identifierTypeColumns": [
- {
- "identifierType": "string",
- "columnName": "string"
}
], - "tableName": "string",
- "valueColumnName": "string",
- "timestampColumnName": "string",
- "conditions": [
- {
- "column": "string",
- "operator": "string",
- "value": "string"
}
]
}, - "mixpanel": {
- "eventName": "string",
- "eventValue": "string",
- "userAggregation": "string",
- "conditions": [
- {
- "property": "string",
- "operator": "string",
- "value": "string"
}
]
}
}| id required | string The ID of the created metric analysis |
| status required | string The status of the analysis (e.g., "running", "completed", "error") |
object |
{- "id": "string",
- "status": "string",
- "settings": {
- "property1": null,
- "property2": null
}
}| id required | string |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| owner required | string The userId of the owner (or raw owner name/email for legacy records) |
| ownerEmail | string The email address of the owner, when the owner can be resolved to a known user. |
| name required | string |
| description required | string <= 10000 characters |
| tags required | Array of strings |
| projects required | Array of strings |
| metrics required | Array of strings |
| datasource required | string |
| archived required | boolean |
{- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "owner": "string",
- "ownerEmail": "string",
- "name": "string",
- "description": "string",
- "tags": [
- "string"
], - "projects": [
- "string"
], - "metrics": [
- "string"
], - "datasource": "string",
- "archived": true
}| metricId required | string The metric ID |
| error | string Set when the metric does not exist or the caller has no permission to read it. |
Array of objects List of experiments using this metric | |
string or null The most recent snapshot attempt across all experiments using this metric |
{- "metricId": "string",
- "error": "string",
- "experiments": [
- {
- "experimentId": "string",
- "experimentStatus": "draft",
- "lastSnapshotAttempt": "2019-08-24T14:15:22Z"
}
], - "lastSnapshotAttempt": "2019-08-24T14:15:22Z"
}| id required | string The unique internal identifier for the namespace (e.g. 'ns-abc123'). |
| displayName required | string Human-readable display name. |
| description required | string |
| status required | string Enum: "active" "inactive" |
| format required | string Enum: "legacy" "multiRange" Namespace format. 'multiRange' supports multiple ranges per experiment and a configurable hash attribute. |
| hashAttribute | string The user attribute used to assign bucket membership. Only present on multiRange namespaces. |
| seed | string The seed used for bucket hashing. Changing this re-randomizes which traffic is eligible for which experiment. Use the rotateSeed endpoint to change it. |
{- "id": "string",
- "displayName": "string",
- "description": "string",
- "status": "active",
- "format": "legacy",
- "hashAttribute": "string",
- "seed": "string"
}| id required | string The internal experiment ID. |
| name required | string Display name of the experiment. |
| trackingKey required | string The experiment tracking key used by the SDK. |
| status required | string Enum: "draft" "running" "stopped" The current status of the experiment. |
required | Array of items The ranges claimed within this namespace, as [start, end] pairs between 0 and 1. |
{- "id": "string",
- "name": "string",
- "trackingKey": "string",
- "status": "draft",
- "ranges": [
- [
- 0,
- 0
]
]
}| id | string The Growthbook unique identifier for the organization |
| externalId | string An optional identifier that you use within your company for the organization |
| dateCreated | string <date-time> The date the organization was created |
| name | string The name of the organization |
| ownerEmail | string The email address of the organization owner |
{- "id": "string",
- "externalId": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "name": "string",
- "ownerEmail": "string"
}| limit required | integer |
| offset required | integer |
| count required | integer |
| total required | integer |
| hasMore required | boolean |
required | integer or null |
{- "limit": 0,
- "offset": 0,
- "count": 0,
- "total": 0,
- "hasMore": true,
- "nextOffset": 0
}| id required | string |
| name required | string |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| description | string <= 10000 characters |
| publicId | string URL-safe slug used in SDK payload metadata. Auto-generated from name if not provided. |
object |
{- "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 |
| organization required | string |
| datasource required | string |
| language required | string |
| query required | string |
| queryType required | string |
| createdAt required | string |
| startedAt required | string |
| status required | string Enum: "running" "queued" "failed" "partially-succeeded" "succeeded" |
| externalId required | string |
| dependencies required | Array of strings |
| runAtEnd required | boolean |
{- "id": "string",
- "organization": "string",
- "datasource": "string",
- "language": "string",
- "query": "string",
- "queryType": "string",
- "createdAt": "string",
- "startedAt": "string",
- "status": "running",
- "externalId": "string",
- "dependencies": [
- "string"
], - "runAtEnd": true
}| id required | string Unique identifier (rs_ prefix) |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| name required | string |
| entityType required | string Value: "feature" |
| entityId required | string |
required | Array of objects Controlled entity references |
Array of objects Actions that restore controlled rules to their pre-ramp state. Applied when rolling back or jumping to start. | |
required | Array of objects Ordered ramp steps |
Array of objects Actions applied on top of all step patches when the ramp completes. Represents the final desired rule state. | |
string or null When the ramp fires. Absent/null means immediately on publish; set to a future datetime to delay start and keep the rule disabled until that time. | |
string or null Rule-level kill date. When reached, the ramp is completed and the rule is disabled (enabled=false). Use for time-boxed rules that must stop serving on a fixed date regardless of ramp progress. Set to null to clear. | |
| status required | string Enum: "pending" "ready" "running" "paused" "completed" "rolled-back" |
| currentStepIndex required | integer >= -1 Index of current step; -1 = not yet started |
string or null | |
string or null Anchor for cumulative interval timing; resets after each approval gate is satisfied | |
string or null | |
required | string or null When the current step's time gate elapses; null for steps with no interval (pure approval gates) and terminal states |
string or null | |
integer or null Milliseconds since startedAt (computed at response time, not stored) | |
object | |
object or null | |
| experimentHealthAction | string Enum: "rollback" "hold" "warn" |
string or null | |
object or null Approval record for the current step. Valid only while | |
string or null When the monitored section most recently started (first monitored step entered). Used for no-traffic grace period gating. | |
string or null | |
string or null | |
object or null Read-only monitoring status. Present when monitoringConfig is set. |
{- "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",
- "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"
}, - "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 |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| name required | string |
required | Array of objects |
object | |
| official | boolean |
object or null | |
object or null |
{- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "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"
], - "enabled": true
}
}
]
}
], - "endPatch": {
- "coverage": 1,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
]
}, - "official": true,
- "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"
}
}| id required | string |
| dateCreated required | string |
| dateUpdated required | string |
| title required | string |
| description required | string |
| type required | string Enum: "experiment-snapshot" "experiment" Report type. |
| status | string Enum: "published" "private" UI lifecycle marker. Note: this does NOT control public shareability — see |
| shareLevel | string Enum: "public" "organization" "private" Visibility of the report. |
| shareUrl | string Public URL for viewing the report. Only present when |
| experimentId | string |
| snapshotId | string Snapshot ID (experiment-snapshot type only) |
| snapshotStatus | string Enum: "running" "success" "error" Status of the latest snapshot (poll this after refresh) |
| snapshotError | string Error message if snapshot failed |
object | |
object | |
object (ExperimentResults) |
{- "id": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "title": "string",
- "description": "string",
- "type": "experiment-snapshot",
- "status": "published",
- "shareLevel": "public",
- "shareUrl": "string",
- "experimentId": "string",
- "snapshotId": "string",
- "snapshotStatus": "running",
- "snapshotError": "string",
- "analysisSettings": {
- "statsEngine": "bayesian",
- "goalMetrics": [
- "string"
], - "secondaryMetrics": [
- "string"
], - "guardrailMetrics": [
- "string"
], - "activationMetric": "string",
- "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "winRisk": 0,
- "loseRisk": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "customMetricSlices": [
- {
- "slices": [
- {
- "column": "string",
- "levels": [
- "string"
]
}
]
}
], - "dimension": "string",
- "differenceType": "relative",
- "dateStarted": "2019-08-24T14:15:22Z",
- "dateEnded": "2019-08-24T14:15:22Z",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": null
}, - "trackingKey": "string",
- "exposureQueryId": "string",
- "segment": "string",
- "queryFilter": "string",
- "skipPartialData": true
}, - "experimentMetadata": {
- "type": "standard",
- "variations": [
- {
- "id": "string",
- "name": "string",
- "key": "string",
- "weight": 0
}
], - "phases": [
- {
- "name": "string",
- "dateStarted": "string",
- "dateEnded": "string",
- "coverage": 0
}
]
}, - "results": {
- "id": "string",
- "dateUpdated": "string",
- "experimentId": "string",
- "phase": "string",
- "dateStart": "string",
- "dateEnd": "string",
- "dimension": {
- "type": "string",
- "id": "string"
}, - "settings": {
- "datasourceId": "string",
- "assignmentQueryId": "string",
- "experimentId": "string",
- "segmentId": "string",
- "queryFilter": "string",
- "inProgressConversions": "include",
- "attributionModel": "firstExposure",
- "lookbackOverride": {
- "type": "date",
- "value": 0,
- "valueUnit": "minutes"
}, - "statsEngine": "bayesian",
- "regressionAdjustmentEnabled": true,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "postStratificationEnabled": true,
- "decisionFrameworkSettings": {
- "decisionCriteriaId": "string",
- "decisionFrameworkMetricOverrides": [
- {
- "id": "string",
- "targetMDE": 0
}
]
}, - "metricOverrides": [
- {
- "id": "string",
- "windowType": "conversion",
- "windowHours": 0,
- "delayHours": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
], - "goals": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "secondaryMetrics": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "guardrails": [
- {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
], - "activationMetric": {
- "metricId": "string",
- "overrides": {
- "delayHours": 0,
- "windowHours": 0,
- "window": "conversion",
- "winRiskThreshold": 0,
- "loseRiskThreshold": 0,
- "properPriorOverride": true,
- "properPriorEnabled": true,
- "properPriorMean": 0,
- "properPriorStdDev": 0,
- "regressionAdjustmentOverride": true,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0
}
}
}, - "queryIds": [
- "string"
], - "results": [
- {
- "dimension": "string",
- "totalUsers": 0,
- "checks": {
- "srm": 0
}, - "metrics": [
- {
- "metricId": "string",
- "metricName": "string",
- "variations": [
- {
- "variationId": "string",
- "variationName": "string",
- "users": 0,
- "analyses": [
- {
- "engine": null,
- "numerator": null,
- "denominator": null,
- "mean": null,
- "stddev": null,
- "percentChange": null,
- "ciLow": null,
- "ciHigh": null,
- "pValue": null,
- "risk": null,
- "chanceToBeatControl": null
}
]
}
]
}
]
}
]
}
}| description | string |
| enabled | boolean |
| condition | string |
Array of objects | |
Array of objects | |
| allEnvironments | boolean When true the rule applies to all environments. Defaults to false. |
| environments | Array of strings Specific environment IDs this rule applies to. Used when allEnvironments is false. |
| type required | string Must be "safe-rollout" for a safe rollout rule. Value: "safe-rollout" |
| controlValue required | string |
| variationValue required | string |
| hashAttribute required | string |
| trackingKey | string |
| seed | string |
required | object |
{- "description": "string",
- "enabled": true,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "type": "safe-rollout",
- "controlValue": "string",
- "variationValue": "string",
- "hashAttribute": "string",
- "trackingKey": "string",
- "seed": "string",
- "safeRolloutFields": {
- "datasourceId": "string",
- "exposureQueryId": "string",
- "guardrailMetricIds": [
- "string"
], - "maxDuration": {
- "amount": 0,
- "unit": "weeks"
}, - "autoRollback": true,
- "rampUpSchedule": {
- "enabled": true,
- "steps": [
- {
- "percent": 1
}
]
}
}
}| id required | string |
| type required | string Enum: "condition" "list" |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| name required | string |
| owner | string The userId of the owner (or raw owner name/email for legacy records) |
| ownerEmail | string The email address of the owner, when the owner can be resolved to a known user. |
| condition | string When type = 'condition', this is the JSON-encoded condition for the group |
| attributeKey | string When type = 'list', this is the attribute key the group is based on |
| values | Array of strings When type = 'list', this is the list of values for the attribute key |
| description | string <= 10000 characters |
| projects | Array of strings |
| archived | boolean |
| useEmptyListGroup | boolean |
{- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}| id required | string |
| version | integer |
| title | string |
| status required | string Enum: "draft" "pending-review" "approved" "changes-requested" "merged" "discarded" |
| authorId required | string |
| authorEmail | string |
| contributors | Array of strings |
| revertedFrom | string |
required | Array of objects (SavedGroupRevisionReview) |
required | Array of objects (SavedGroupRevisionActivityLogEntry) |
object | |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
required | object (SavedGroup) |
required | object (SavedGroup) |
required | Array of objects or objects or objects or objects or objects or objects |
{- "id": "string",
- "version": 0,
- "title": "string",
- "status": "draft",
- "authorId": "string",
- "authorEmail": "string",
- "contributors": [
- "string"
], - "revertedFrom": "string",
- "reviews": [
- {
- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "activityLog": [
- {
- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}
], - "resolution": {
- "action": "merged",
- "userId": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}, - "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "baseSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedSavedGroup": {
- "id": "string",
- "type": "condition",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "owner": "string",
- "ownerEmail": "string",
- "condition": "string",
- "attributeKey": "string",
- "values": [
- "string"
], - "description": "string",
- "projects": [
- "string"
], - "archived": true,
- "useEmptyListGroup": true
}, - "proposedChanges": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
]
}| id required | string |
| userId required | string |
| action required | string Enum: "created" "updated" "reviewed" "approved" "requested-changes" "commented" "merged" "discarded" "reopened" |
string or null | |
Array of objects or objects or objects or objects or objects or objects | |
| targetSnapshot | any |
| dateCreated required | string <date-time> |
{- "id": "string",
- "userId": "string",
- "action": "created",
- "description": "string",
- "proposedChangesSnapshot": [
- {
- "op": "add",
- "path": "string",
- "value": null
}
], - "targetSnapshot": null,
- "dateCreated": "2019-08-24T14:15:22Z"
}| id required | string |
| userId required | string |
| decision required | string Enum: "approve" "request-changes" "comment" |
| comment | string |
| dateCreated required | string <date-time> |
{- "id": "string",
- "userId": "string",
- "decision": "approve",
- "comment": "string",
- "dateCreated": "2019-08-24T14:15:22Z"
}| enabled required | boolean Whether the rule should be enabled or disabled at the specified timestamp. |
required | string or null ISO timestamp when the rule should activate. |
{- "enabled": true,
- "timestamp": "2019-08-24T14:15:22Z"
}| id required | string |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| name required | string |
| organization required | string |
| languages required | Array of strings |
| sdkVersion | string |
| environment required | string |
| project required | string Use 'projects' instead. This is only for backwards compatibility and contains the first project only. |
| projects | Array of strings |
| encryptPayload required | boolean |
| encryptionKey required | string |
| includeVisualExperiments | boolean |
| includeDraftExperiments | boolean |
| includeDraftExperimentRefs | boolean When true, experiment-ref rules linked to draft experiments are included in feature definitions. Off by default. |
| includeExperimentNames | boolean |
| includeRedirectExperiments | boolean |
| includeRuleIds | boolean |
| includeProjectIdInMetadata | boolean |
| includeCustomFieldsInMetadata | boolean |
| allowedCustomFieldsInMetadata | Array of strings |
| includeTagsInMetadata | boolean |
| key required | string |
| proxyEnabled required | boolean |
| proxyHost required | string |
| proxySigningKey required | string |
| sseEnabled | boolean |
| hashSecureAttributes | boolean |
| remoteEvalEnabled | boolean |
| savedGroupReferencesEnabled | boolean |
{- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "organization": "string",
- "languages": [
- "string"
], - "sdkVersion": "string",
- "environment": "string",
- "project": "string",
- "projects": [
- "string"
], - "encryptPayload": true,
- "encryptionKey": "string",
- "includeVisualExperiments": true,
- "includeDraftExperiments": true,
- "includeDraftExperimentRefs": true,
- "includeExperimentNames": true,
- "includeRedirectExperiments": true,
- "includeRuleIds": true,
- "includeProjectIdInMetadata": true,
- "includeCustomFieldsInMetadata": true,
- "allowedCustomFieldsInMetadata": [
- "string"
], - "includeTagsInMetadata": true,
- "key": "string",
- "proxyEnabled": true,
- "proxyHost": "string",
- "proxySigningKey": "string",
- "sseEnabled": true,
- "hashSecureAttributes": true,
- "remoteEvalEnabled": true,
- "savedGroupReferencesEnabled": true
}| id required | string |
| owner required | string The userId of the owner (or raw owner name/email for legacy records) |
| ownerEmail | string The email address of the owner, when the owner can be resolved to a known user. |
| datasourceId required | string |
| identifierType required | string |
| name required | string |
| description | string <= 10000 characters |
| query | string |
| dateCreated required | string |
| dateUpdated required | string |
| managedBy | string Enum: "" "api" "config" Where this segment must be managed from. If not set (empty string), it can be managed from anywhere. |
| type | string Enum: "SQL" "FACT" |
| factTableId | string |
| filters | Array of strings |
| projects | Array of strings |
{- "id": "string",
- "owner": "string",
- "ownerEmail": "string",
- "datasourceId": "string",
- "identifierType": "string",
- "name": "string",
- "description": "string",
- "query": "string",
- "dateCreated": "string",
- "dateUpdated": "string",
- "managedBy": "",
- "type": "SQL",
- "factTableId": "string",
- "filters": [
- "string"
], - "projects": [
- "string"
]
}| confidenceLevel required | number |
required | object or null |
required | object |
| pastExperimentsMinLength required | number |
| metricAnalysisDays required | number |
required | object or null |
| multipleExposureMinPercent required | number |
required | object |
| statsEngine required | string |
| pValueThreshold required | number |
| regressionAdjustmentEnabled required | boolean |
| regressionAdjustmentDays required | number |
| sequentialTestingEnabled required | boolean |
| sequentialTestingTuningParameter required | number |
| attributionModel required | string Enum: "firstExposure" "experimentDuration" "lookbackOverride" |
| targetMDE required | number |
| delayHours required | number |
| windowType required | string |
| windowHours required | number |
| winRisk required | number |
| loseRisk required | number |
| secureAttributeSalt required | string |
| killswitchConfirmation required | boolean |
| featureKillSwitchBehavior | string Enum: "off" "warn" |
required | Array of objects |
| restApiBypassesReviews | boolean |
| requireRebaseBeforePublish | boolean |
| revertsBypassApproval | boolean |
| maxConcurrentDrafts | number |
| featureKeyExample required | string |
| featureRegexValidator required | string |
| banditScheduleValue required | number |
| banditScheduleUnit required | string Enum: "hours" "days" |
| banditBurnInValue required | number |
| banditBurnInUnit required | string Enum: "hours" "days" |
| experimentMinLengthDays required | number |
number or null | |
string or null | |
| maxMetricSliceLevels | number |
{- "confidenceLevel": 0,
- "northStar": {
- "title": "string",
- "metricIds": [
- "string"
]
}, - "metricDefaults": {
- "priorSettings": {
- "override": true,
- "proper": true,
- "mean": 0,
- "stddev": 0
}, - "minimumSampleSize": 0,
- "maxPercentageChange": 0,
- "minPercentageChange": 0,
- "targetMDE": 0
}, - "pastExperimentsMinLength": 0,
- "metricAnalysisDays": 0,
- "updateSchedule": {
- "type": "cron",
- "cron": "string",
- "hours": 0
}, - "multipleExposureMinPercent": 0,
- "defaultRole": {
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
]
}, - "statsEngine": "string",
- "pValueThreshold": 0,
- "regressionAdjustmentEnabled": true,
- "regressionAdjustmentDays": 0,
- "sequentialTestingEnabled": true,
- "sequentialTestingTuningParameter": 0,
- "attributionModel": "firstExposure",
- "targetMDE": 0,
- "delayHours": 0,
- "windowType": "string",
- "windowHours": 0,
- "winRisk": 0,
- "loseRisk": 0,
- "secureAttributeSalt": "string",
- "killswitchConfirmation": true,
- "featureKillSwitchBehavior": "off",
- "requireReviews": [
- {
- "requireReviewOn": true,
- "resetReviewOnChange": true,
- "environments": [
- "string"
], - "projects": [
- "string"
], - "featureRequireEnvironmentReview": true,
- "featureRequireMetadataReview": true,
- "autopublishOnApproval": true
}
], - "restApiBypassesReviews": true,
- "requireRebaseBeforePublish": true,
- "revertsBypassApproval": true,
- "maxConcurrentDrafts": 0,
- "featureKeyExample": "string",
- "featureRegexValidator": "string",
- "banditScheduleValue": 0,
- "banditScheduleUnit": "hours",
- "banditBurnInValue": 0,
- "banditBurnInUnit": "hours",
- "experimentMinLengthDays": 0,
- "experimentMaxLengthDays": 0,
- "preferredEnvironment": "string",
- "maxMetricSliceLevels": 0
}| description | string |
| enabled | boolean |
| condition | string |
Array of objects | |
Array of objects | |
| allEnvironments | boolean When true the rule applies to all environments. Defaults to false. |
| environments | Array of strings Specific environment IDs this rule applies to. Used when allEnvironments is false. |
| type | string Enum: "force" "rollout" Use "force" for a standard targeting rule, or "rollout" for a percentage rollout (coverage < 1). Defaults to "force". Both are functionally equivalent; a force rule with coverage < 1 behaves as a rollout. |
| value required | string The value to serve when this rule matches. |
| coverage | number [ 0 .. 1 ] Percentage of users to include (0–1). Defaults to 1. When less than 1, hashAttribute is required. |
| hashAttribute | string Attribute to hash on for consistent assignment. Required when coverage < 1. |
| seed | string |
1 (number) or 2 (number) Hash algorithm version for bucketing. Defaults to 2 (preferred) when not specified. |
{- "description": "string",
- "enabled": true,
- "condition": "string",
- "savedGroups": [
- {
- "match": "all",
- "ids": [
- "string"
]
}
], - "prerequisites": [
- {
- "id": "string",
- "condition": "string"
}
], - "allEnvironments": true,
- "environments": [
- "string"
], - "type": "force",
- "value": "string",
- "coverage": 1,
- "hashAttribute": "string",
- "seed": "string",
- "hashVersion": 1
}| id required | string |
| dateCreated required | string <date-time> |
| dateUpdated required | string <date-time> |
| name required | string |
| createdBy required | string |
| description required | string |
| role required | string |
| limitAccessByEnvironment required | boolean |
| environments required | Array of strings |
Array of objects | |
| members required | Array of strings |
| managedByIdp required | boolean |
object | |
| defaultProject | string |
{- "id": "string",
- "dateCreated": "2019-08-24T14:15:22Z",
- "dateUpdated": "2019-08-24T14:15:22Z",
- "name": "string",
- "createdBy": "string",
- "description": "string",
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
], - "projectRoles": [
- {
- "role": "string",
- "limitAccessByEnvironment": true,
- "environments": [
- "string"
], - "teams": [
- "string"
], - "project": "string"
}
], - "members": [
- "string"
], - "managedByIdp": true,
- "managedBy": {
- "type": "vercel",
- "resourceId": "string"
}, - "defaultProject": "string"
}| description | string |
| css | string |
| js | string |
| variation required | string |
Array of objects |
{- "description": "string",
- "css": "string",
- "js": "string",
- "variation": "string",
- "domMutations": [
- {
- "selector": "string",
- "action": "append",
- "attribute": "string",
- "value": "string",
- "parentSelector": "string",
- "insertBeforeSelector": "string"
}
]
}| id | string |
required | Array of objects |
| editorUrl required | string |
| experiment required | string |
required | Array of objects |
{- "id": "string",
- "urlPatterns": [
- {
- "include": true,
- "type": "simple",
- "pattern": "string"
}
], - "editorUrl": "string",
- "experiment": "string",
- "visualChanges": [
- {
- "description": "string",
- "css": "string",
- "js": "string",
- "variation": "string",
- "domMutations": [
- {
- "selector": "string",
- "action": "append",
- "attribute": "string",
- "value": "string",
- "parentSelector": "string",
- "insertBeforeSelector": "string"
}
]
}
]
}