openapi: 3.1.0 info: version: 1.0.0 title: GrowthBook REST API description: > 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. ## Versioning 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. ## Authentication 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**: These are sensitive and provide the same level of access as the user has to an organization. These can be created by going to `Personal Access Tokens` under the your user menu. - **Secret Keys**: These are sensitive and provide the level of access for the role, which currently is either `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 Keys` If 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) ```bash curl https://api.growthbook.io/api/v1/features \ -u secret_abc123DEF456: ``` If using Bearer auth, pass the Secret Key as the token: ```bash curl https://api.growthbook.io/api/v1/features \ -H "Authorization: Bearer secret_abc123DEF456" ``` ## Errors The API may return the following error status codes: - **400** - Bad Request - Often due to a missing required parameter - **401** - Unauthorized - No valid API key provided - **402** - Request Failed - The parameters are valid, but the request failed - **403** - Forbidden - Provided API key does not have the required access - **404** - Not Found - Unknown API route or requested resource - **429** - Too Many Requests - You exceeded the rate limit of 60 requests per minute. Try again later. - **5XX** - Server Error - Something went wrong on GrowthBook's end (these are rare) The response body will be a JSON object with the following properties: - **message** - Information about the error servers: - url: https://api.growthbook.io/api description: GrowthBook Cloud - url: https://{domain}/api description: Self-hosted GrowthBook tags: - name: projects x-displayName: Projects description: Projects are used to organize your feature flags and experiments - name: environments x-displayName: Environments description: >- 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. - name: features-v2 x-displayName: Feature Flags description: >- 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. - name: feature-revisions-v2 x-displayName: Feature Revisions description: >- Draft revisions for feature flags, including rules, scheduling, and approval workflows. Revision `rules` is a flat array with per-rule scope fields. - name: features x-displayName: Feature Flags (legacy) description: >- 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. - name: feature-revisions x-displayName: Feature Revisions (legacy) description: >- Draft revisions for feature flags, including rules, scheduling, and approval workflows. **These are v1 endpoints.** New integrations should use the v2 Feature Revisions endpoints. - name: ramp-schedules x-displayName: Ramp Schedules description: >- Multi-step rollout schedules that gradually ramp feature rule changes over time, with support for interval, approval, and scheduled triggers. - name: data-sources x-displayName: Data Sources description: >- How GrowthBook connects and queries your data, including cached database schema metadata (information schemas) for tables and columns. - name: fact-tables x-displayName: Fact Tables description: Fact Tables describe the shape of your data warehouse tables - name: fact-metrics x-displayName: Fact Metrics description: Fact Metrics are metrics built on top of Fact Table definitions - name: metrics x-displayName: Metrics (legacy) description: Metrics used as goals and guardrails for experiments - name: experiments x-displayName: Experiments description: Experiments (A/B Tests) - name: namespaces x-displayName: Namespaces description: >- 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. - name: snapshots x-displayName: Experiment Snapshots description: Experiment Snapshots (the individual updates of an experiment) - name: dimensions x-displayName: Dimensions description: Dimensions used during experiment analysis - name: segments x-displayName: Segments description: Segments used during experiment analysis - name: sdk-connections x-displayName: SDK Connections description: Client keys and settings for connecting SDKs to a GrowthBook instance - name: visual-changesets x-displayName: Visual Changesets description: Groups of visual changes made by the visual editor to a single page - name: saved-groups x-displayName: Saved Groups description: >- Defined sets of attribute values which can be used with feature rules for targeting features at particular users. - name: organizations x-displayName: Organizations description: >- 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. - name: members x-displayName: Members description: Members are users who have been invited to an organization. - name: code-references x-displayName: Code References description: >- Intended for use with our code reference CI utility, [`gb-find-code-refs`](https://github.com/growthbook/gb-find-code-refs). - name: archetypes x-displayName: Archetypes description: >- Archetypes allow you to simulate the result of targeting rules on pre-set user attributes - name: queries x-displayName: Queries description: Retrieve queries used in experiments to calculate results. - name: settings x-displayName: Settings description: Get the organization settings. - name: attributes x-displayName: Attributes description: Used when targeting feature flags and experiments. - name: usage x-displayName: Usage description: Usage information for metrics in experiments. - name: Dashboards x-displayName: Dashboards description: '' - name: CustomFields x-displayName: Custom Fields description: '' - name: MetricGroups x-displayName: Metric Groups description: '' - name: Teams x-displayName: Teams description: '' - name: ExperimentTemplates x-displayName: Experiment Templates description: '' - name: AnalyticsExplorations x-displayName: Analytics Explorations description: '' - name: RampScheduleTemplates x-displayName: Ramp Schedule Templates description: Reusable step configurations for ramp schedules. - name: AnalyticsExploration_model x-displayName: AnalyticsExploration description: - name: Archetype_model x-displayName: Archetype description: - name: Attribute_model x-displayName: Attribute description: - name: CodeRef_model x-displayName: CodeRef description: - name: CustomField_model x-displayName: CustomField description: - name: Dashboard_model x-displayName: Dashboard description: - name: DataSource_model x-displayName: DataSource description: - name: Dimension_model x-displayName: Dimension description: - name: Environment_model x-displayName: Environment description: - name: Experiment_model x-displayName: Experiment description: - name: ExperimentAnalysisSettings_model x-displayName: ExperimentAnalysisSettings description: >- - name: ExperimentDecisionFrameworkSettings_model x-displayName: ExperimentDecisionFrameworkSettings description: >- - name: ExperimentMetric_model x-displayName: ExperimentMetric description: - name: ExperimentMetricOverrideEntry_model x-displayName: ExperimentMetricOverrideEntry description: >- - name: ExperimentResults_model x-displayName: ExperimentResults description: - name: ExperimentSnapshot_model x-displayName: ExperimentSnapshot description: - name: ExperimentTemplate_model x-displayName: ExperimentTemplate description: - name: ExperimentWithEnhancedStatus_model x-displayName: ExperimentWithEnhancedStatus description: >- - name: FactMetric_model x-displayName: FactMetric description: - name: FactTable_model x-displayName: FactTable description: - name: FactTableColumn_model x-displayName: FactTableColumn description: - name: FactTableFilter_model x-displayName: FactTableFilter description: - name: Feature_model x-displayName: Feature description: - name: FeatureBaseRule_model x-displayName: FeatureBaseRule description: - name: FeatureDefinition_model x-displayName: FeatureDefinition description: - name: FeatureEnvironment_model x-displayName: FeatureEnvironment description: - name: FeatureEnvironmentV2_model x-displayName: FeatureEnvironmentV2 description: - name: FeatureExperimentRefRule_model x-displayName: FeatureExperimentRefRule description: >- - name: FeatureExperimentRule_model x-displayName: FeatureExperimentRule description: >- - name: FeatureForceRule_model x-displayName: FeatureForceRule description: - name: FeatureRevision_model x-displayName: FeatureRevision description: - name: FeatureRevisionV2_model x-displayName: FeatureRevisionV2 description: - name: FeatureRolloutRule_model x-displayName: FeatureRolloutRule description: - name: FeatureRule_model x-displayName: FeatureRule description: - name: FeatureRuleV2_model x-displayName: FeatureRuleV2 description: - name: FeatureSafeRolloutRule_model x-displayName: FeatureSafeRolloutRule description: >- - name: FeatureV2_model x-displayName: FeatureV2 description: - name: FeatureWithRevisions_model x-displayName: FeatureWithRevisions description: - name: FeatureWithRevisionsV2_model x-displayName: FeatureWithRevisionsV2 description: >- - name: InformationSchema_model x-displayName: InformationSchema description: - name: InformationSchemaTable_model x-displayName: InformationSchemaTable description: >- - name: LookbackOverride_model x-displayName: LookbackOverride description: - name: Member_model x-displayName: Member description: - name: Metric_model x-displayName: Metric description: - name: MetricAnalysis_model x-displayName: MetricAnalysis description: - name: MetricGroup_model x-displayName: MetricGroup description: - name: MetricUsage_model x-displayName: MetricUsage description: - name: Namespace_model x-displayName: Namespace description: - name: NamespaceExperimentMember_model x-displayName: NamespaceExperimentMember description: >- - name: Organization_model x-displayName: Organization description: - name: PaginationFields_model x-displayName: PaginationFields description: - name: Project_model x-displayName: Project description: - name: Query_model x-displayName: Query description: - name: RampSchedule_model x-displayName: RampSchedule description: - name: RampScheduleTemplate_model x-displayName: RampScheduleTemplate description: - name: SavedGroup_model x-displayName: SavedGroup description: - name: ScheduleRule_model x-displayName: ScheduleRule description: - name: SdkConnection_model x-displayName: SdkConnection description: - name: Segment_model x-displayName: Segment description: - name: Settings_model x-displayName: Settings description: - name: Team_model x-displayName: Team description: - name: VisualChange_model x-displayName: VisualChange description: - name: VisualChangeset_model x-displayName: VisualChangeset description: security: - bearerAuth: [] - basicAuth: [] paths: /v1/features: get: operationId: listFeatures summary: Get all features description: > **Deprecated.** Use [GET /v2/features](#operation/listFeaturesV2) instead. Returns features with pagination. The skipPagination query parameter is honored only when API_ALLOW_SKIP_PAGINATION is set (self-hosted deployments). deprecated: true tags: - features parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/projectId' - $ref: '#/components/parameters/clientKey' - $ref: '#/components/parameters/skipPagination' responses: '200': content: application/json: schema: allOf: - type: object properties: features: type: array items: $ref: '#/components/schemas/Feature' required: - features additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/features' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postFeature summary: Create a single feature description: >- **Deprecated.** Use [POST /v2/features](#operation/postFeatureV2) instead. deprecated: true tags: - features requestBody: required: true content: application/json: schema: type: object properties: id: description: >- A unique key name for the feature. Feature keys can only include letters, numbers, hyphens, and underscores. type: string minLength: 1 archived: type: boolean description: description: Description of the feature type: string owner: description: >- 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. type: string project: description: An associated project ID type: string valueType: description: The data type of the feature payload. Boolean by default. type: string enum: - boolean - string - number - json defaultValue: description: >- Default value when feature is enabled. Type must match `valueType`. type: string tags: description: List of associated tags type: array items: type: string environments: description: >- 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. type: object propertyNames: type: string additionalProperties: type: object properties: enabled: type: boolean rules: type: array items: anyOf: - type: object properties: description: type: string condition: description: Applied to everyone by default. type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' id: type: string enabled: description: Enabled by default type: boolean type: type: string const: force value: type: string required: - type - value additionalProperties: false - type: object properties: description: type: string condition: description: Applied to everyone by default. type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' id: type: string enabled: description: Enabled by default type: boolean type: type: string const: rollout value: type: string coverage: description: >- Percent of traffic included in this experiment. Users not included in the experiment will skip this rule. type: number hashAttribute: type: string required: - type - value - coverage - hashAttribute additionalProperties: false - type: object properties: description: type: string id: type: string enabled: description: Enabled by default type: boolean type: type: string const: experiment-ref condition: type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' variations: type: array items: type: object properties: value: type: string variationId: type: string required: - value - variationId additionalProperties: false experimentId: type: string required: - type - variations - experimentId additionalProperties: false - type: object properties: description: type: string condition: type: string id: type: string enabled: description: Enabled by default type: boolean type: type: string const: experiment trackingKey: type: string hashAttribute: type: string fallbackAttribute: type: string disableStickyBucketing: type: boolean bucketVersion: type: number minBucketVersion: type: number namespace: type: object properties: enabled: type: boolean name: type: string range: minItems: 2 maxItems: 2 type: array items: type: number required: - enabled - name - range additionalProperties: false coverage: type: number prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' values: type: array items: type: object properties: value: type: string weight: type: number name: type: string required: - value - weight additionalProperties: false value: deprecated: true description: >- Support passing values under the value key as that was the original spec for FeatureExperimentRules type: array items: type: object properties: value: type: string weight: type: number name: type: string required: - value - weight additionalProperties: false required: - condition - type additionalProperties: false definition: description: >- A JSON stringified [FeatureDefinition](#tag/FeatureDefinition_model) type: string draft: description: Use to write draft changes without publishing them. type: object properties: enabled: type: boolean rules: type: array items: anyOf: - type: object properties: description: type: string condition: description: Applied to everyone by default. type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' id: type: string enabled: description: Enabled by default type: boolean type: type: string const: force value: type: string required: - type - value additionalProperties: false - type: object properties: description: type: string condition: description: Applied to everyone by default. type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' id: type: string enabled: description: Enabled by default type: boolean type: type: string const: rollout value: type: string coverage: description: >- Percent of traffic included in this experiment. Users not included in the experiment will skip this rule. type: number hashAttribute: type: string required: - type - value - coverage - hashAttribute additionalProperties: false - type: object properties: description: type: string id: type: string enabled: description: Enabled by default type: boolean type: type: string const: experiment-ref condition: type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' variations: type: array items: type: object properties: value: type: string variationId: type: string required: - value - variationId additionalProperties: false experimentId: type: string required: - type - variations - experimentId additionalProperties: false - type: object properties: description: type: string condition: type: string id: type: string enabled: description: Enabled by default type: boolean type: type: string const: experiment trackingKey: type: string hashAttribute: type: string fallbackAttribute: type: string disableStickyBucketing: type: boolean bucketVersion: type: number minBucketVersion: type: number namespace: type: object properties: enabled: type: boolean name: type: string range: minItems: 2 maxItems: 2 type: array items: type: number required: - enabled - name - range additionalProperties: false coverage: type: number prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' values: type: array items: type: object properties: value: type: string weight: type: number name: type: string required: - value - weight additionalProperties: false value: deprecated: true description: >- Support passing values under the value key as that was the original spec for FeatureExperimentRules type: array items: type: object properties: value: type: string weight: type: number name: type: string required: - value - weight additionalProperties: false required: - condition - type additionalProperties: false definition: description: >- A JSON stringified [FeatureDefinition](#tag/FeatureDefinition_model) type: string required: - rules additionalProperties: false required: - enabled - rules additionalProperties: false prerequisites: description: Feature IDs. Each feature must evaluate to `true` type: array items: type: string jsonSchema: description: >- Use JSON schema to validate the payload of a JSON-type feature value (enterprise only). type: string customFields: type: object propertyNames: type: string additionalProperties: type: string required: - id - owner - valueType - defaultValue additionalProperties: false responses: '200': content: application/json: schema: type: object properties: feature: $ref: '#/components/schemas/Feature' required: - feature additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/features' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}: get: operationId: getFeature summary: Get a single feature description: >- **Deprecated.** Use [GET /v2/features/:id](#operation/getFeatureV2) instead. deprecated: true tags: - features parameters: - $ref: '#/components/parameters/id' - $ref: '#/components/parameters/withRevisions' responses: '200': content: application/json: schema: type: object properties: feature: $ref: '#/components/schemas/FeatureWithRevisions' required: - feature additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/features/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: updateFeature summary: Partially update a feature description: > **Deprecated.** Use [POST /v2/features/:id](#operation/updateFeatureV2) 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. deprecated: true tags: - features parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: description: description: Description of the feature type: string archived: type: boolean project: description: An associated project ID type: string owner: description: >- 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. type: string defaultValue: type: string tags: description: >- List of associated tags. Will override tags completely with submitted list type: array items: type: string environments: type: object propertyNames: type: string additionalProperties: type: object properties: enabled: type: boolean rules: type: array items: anyOf: - type: object properties: description: type: string condition: description: Applied to everyone by default. type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' id: type: string enabled: description: Enabled by default type: boolean type: type: string const: force value: type: string required: - type - value additionalProperties: false - type: object properties: description: type: string condition: description: Applied to everyone by default. type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' id: type: string enabled: description: Enabled by default type: boolean type: type: string const: rollout value: type: string coverage: description: >- Percent of traffic included in this experiment. Users not included in the experiment will skip this rule. type: number hashAttribute: type: string required: - type - value - coverage - hashAttribute additionalProperties: false - type: object properties: description: type: string id: type: string enabled: description: Enabled by default type: boolean type: type: string const: experiment-ref condition: type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' variations: type: array items: type: object properties: value: type: string variationId: type: string required: - value - variationId additionalProperties: false experimentId: type: string required: - type - variations - experimentId additionalProperties: false - type: object properties: description: type: string condition: type: string id: type: string enabled: description: Enabled by default type: boolean type: type: string const: experiment trackingKey: type: string hashAttribute: type: string fallbackAttribute: type: string disableStickyBucketing: type: boolean bucketVersion: type: number minBucketVersion: type: number namespace: type: object properties: enabled: type: boolean name: type: string range: minItems: 2 maxItems: 2 type: array items: type: number required: - enabled - name - range additionalProperties: false coverage: type: number prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' values: type: array items: type: object properties: value: type: string weight: type: number name: type: string required: - value - weight additionalProperties: false value: deprecated: true description: >- Support passing values under the value key as that was the original spec for FeatureExperimentRules type: array items: type: object properties: value: type: string weight: type: number name: type: string required: - value - weight additionalProperties: false required: - condition - type additionalProperties: false definition: description: >- A JSON stringified [FeatureDefinition](#tag/FeatureDefinition_model) type: string draft: description: Use to write draft changes without publishing them. type: object properties: enabled: type: boolean rules: type: array items: anyOf: - type: object properties: description: type: string condition: description: Applied to everyone by default. type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' id: type: string enabled: description: Enabled by default type: boolean type: type: string const: force value: type: string required: - type - value additionalProperties: false - type: object properties: description: type: string condition: description: Applied to everyone by default. type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' id: type: string enabled: description: Enabled by default type: boolean type: type: string const: rollout value: type: string coverage: description: >- Percent of traffic included in this experiment. Users not included in the experiment will skip this rule. type: number hashAttribute: type: string required: - type - value - coverage - hashAttribute additionalProperties: false - type: object properties: description: type: string id: type: string enabled: description: Enabled by default type: boolean type: type: string const: experiment-ref condition: type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' variations: type: array items: type: object properties: value: type: string variationId: type: string required: - value - variationId additionalProperties: false experimentId: type: string required: - type - variations - experimentId additionalProperties: false - type: object properties: description: type: string condition: type: string id: type: string enabled: description: Enabled by default type: boolean type: type: string const: experiment trackingKey: type: string hashAttribute: type: string fallbackAttribute: type: string disableStickyBucketing: type: boolean bucketVersion: type: number minBucketVersion: type: number namespace: type: object properties: enabled: type: boolean name: type: string range: minItems: 2 maxItems: 2 type: array items: type: number required: - enabled - name - range additionalProperties: false coverage: type: number prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: $ref: '#/components/schemas/ScheduleRule' values: type: array items: type: object properties: value: type: string weight: type: number name: type: string required: - value - weight additionalProperties: false value: deprecated: true description: >- Support passing values under the value key as that was the original spec for FeatureExperimentRules type: array items: type: object properties: value: type: string weight: type: number name: type: string required: - value - weight additionalProperties: false required: - condition - type additionalProperties: false definition: description: >- A JSON stringified [FeatureDefinition](#tag/FeatureDefinition_model) type: string required: - rules additionalProperties: false required: - enabled - rules additionalProperties: false prerequisites: description: Feature IDs. Each feature must evaluate to `true` type: array items: type: string jsonSchema: description: >- Use JSON schema to validate the payload of a JSON-type feature value (enterprise only). type: string customFields: type: object propertyNames: type: string additionalProperties: type: string holdout: description: > Holdout to assign this feature to. Pass `null` to remove the feature from its current holdout. Omit the field entirely to leave the holdout unchanged. anyOf: - type: object properties: id: description: Holdout ID type: string value: description: >- The feature value assigned to users in the holdout treatment group type: string required: - id - value additionalProperties: false - type: 'null' additionalProperties: false responses: '200': content: application/json: schema: type: object properties: feature: $ref: '#/components/schemas/Feature' required: - feature additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/features/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' delete: operationId: deleteFeature summary: Deletes a single feature description: > **Deprecated.** Use [DELETE /v2/features/:id](#operation/deleteFeatureV2) 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. deprecated: true tags: - features parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: deletedId: description: The ID of the deleted feature example: feature-123 type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X DELETE 'https://api.growthbook.io/api/v1/features/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/toggle: post: operationId: toggleFeature summary: Toggle a feature in one or more environments description: > **Deprecated.** Use [POST /v2/features/:id/toggle](#operation/toggleFeatureV2) 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. deprecated: true tags: - features parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: reason: type: string environments: type: object propertyNames: type: string additionalProperties: anyOf: - type: boolean const: true - type: boolean const: false - type: string const: 'true' - type: string const: 'false' - type: string const: '1' - type: string const: '0' - type: number const: 1 - type: number const: 0 - type: string const: '' required: - environments additionalProperties: false responses: '200': content: application/json: schema: type: object properties: feature: $ref: '#/components/schemas/Feature' required: - feature additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/features/{id}/toggle' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"reason":"Kill switch activated","environments":{"production":false}}' /v1/features/{id}/revert: post: operationId: revertFeature summary: Revert a feature to a specific revision description: > **Deprecated.** Use [POST /v2/features/:id/revert](#operation/revertFeatureV2) 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 the org setting "REST API always bypasses approval requirements" is off. deprecated: true tags: - features parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: revision: type: number comment: type: string required: - revision additionalProperties: false responses: '200': content: application/json: schema: type: object properties: feature: $ref: '#/components/schemas/Feature' required: - feature additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/features/{id}/revert' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"revision":3,"comment":"Bug found"}' /v1/feature-keys: get: operationId: getFeatureKeys summary: Get list of feature keys description: >- **Deprecated.** Use [GET /v2/feature-keys](#operation/getFeatureKeysV2) instead. deprecated: true tags: - features parameters: - $ref: '#/components/parameters/projectId' responses: '200': content: application/json: schema: type: array items: type: string x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/feature-keys' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/stale-features: get: operationId: getFeatureStale summary: Get stale status for one or more features description: >- **Deprecated.** Use [GET /v2/stale-features](#operation/getFeatureStaleV2) instead. deprecated: true tags: - features parameters: - $ref: '#/components/parameters/ids' responses: '200': content: application/json: schema: type: object properties: features: $ref: '#/components/schemas/features' required: - features additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/stale-features' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/revisions: get: operationId: listRevisions summary: List feature revisions description: >- **Deprecated.** Use [GET /v2/revisions](#operation/listRevisionsV2) 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. deprecated: true tags: - feature-revisions parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/skipPagination' - $ref: '#/components/parameters/featureId' - $ref: '#/components/parameters/status' - $ref: '#/components/parameters/author' - $ref: '#/components/parameters/mine' responses: '200': content: application/json: schema: type: object properties: revisions: type: array items: $ref: '#/components/schemas/FeatureRevision' limit: type: integer offset: type: integer count: type: integer total: type: integer hasMore: type: boolean nextOffset: anyOf: - type: integer - type: 'null' required: - revisions - limit - offset - count - total - hasMore - nextOffset additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/revisions' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions: get: operationId: getFeatureRevisions summary: List revisions for a feature description: >- **Deprecated.** Use [GET /v2/features/:id/revisions](#operation/getFeatureRevisionsV2) instead. Returns a paginated list of revisions for this feature, sorted newest-first. Optionally filtered by status and/or author. deprecated: true tags: - feature-revisions parameters: - $ref: '#/components/parameters/id' - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/skipPagination' - $ref: '#/components/parameters/status' - $ref: '#/components/parameters/author' responses: '200': content: application/json: schema: type: object properties: revisions: type: array items: $ref: '#/components/schemas/FeatureRevision' limit: type: integer offset: type: integer count: type: integer total: type: integer hasMore: type: boolean nextOffset: anyOf: - type: integer - type: 'null' required: - revisions - limit - offset - count - total - hasMore - nextOffset additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/features/abc123/revisions' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postFeatureRevision summary: Create a draft revision description: >- **Deprecated.** Use [POST /v2/features/:id/revisions](#operation/postFeatureRevisionV2) 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. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string requestBody: required: true content: application/json: schema: type: object properties: comment: type: string title: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/features/{id}/revisions' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/latest: get: operationId: getFeatureRevisionLatest summary: Get the most recent active draft revision description: >- **Deprecated.** Use [GET /v2/features/:id/revisions/latest](#operation/getFeatureRevisionLatestV2) 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). deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - name: mine in: query description: >- If true, return only the most recent active draft authored by or contributed to by the calling user. Requires a user-scoped API key. schema: description: >- If true, return only the most recent active draft authored by or contributed to by the calling user. Requires a user-scoped API key. anyOf: - type: string const: 'true' - type: string const: 'false' - type: string const: '0' - type: string const: '1' - type: boolean responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/features/{id}/revisions/latest' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}: get: operationId: getFeatureRevision summary: Get a single feature revision description: >- **Deprecated.** Use [GET /v2/features/:id/revisions/:version](#operation/getFeatureRevisionV2) instead. Returns the revision at the specified version for this feature. Use `GET /features/{id}/revisions/latest` for the most recent active draft. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/metadata: put: operationId: putFeatureRevisionMetadata summary: Update revision metadata (comment, title, feature metadata) description: >- **Deprecated.** Use [PUT /v2/features/:id/revisions/:version/metadata](#operation/putFeatureRevisionMetadataV2) 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. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: comment: type: string title: type: string description: type: string owner: description: >- 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. type: string project: type: string tags: type: array items: type: string neverStale: type: boolean customFields: type: object propertyNames: type: string additionalProperties: {} jsonSchema: type: object properties: schemaType: type: string enum: - schema - simple schema: type: string simple: type: object properties: type: type: string enum: - object - object[] - primitive - primitive[] fields: type: array items: type: object properties: key: type: string maxLength: 64 type: type: string enum: - integer - float - string - boolean required: type: boolean default: type: string maxLength: 256 description: type: string maxLength: 256 enum: maxItems: 256 type: array items: type: string maxLength: 256 min: type: number max: type: number required: - key - type - required - default - description - enum - min - max additionalProperties: false required: - type - fields additionalProperties: false date: {} enabled: type: boolean required: - schemaType - schema - simple - date - enabled additionalProperties: false additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/metadata' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/default-value: put: operationId: putFeatureRevisionDefaultValue summary: Set the default value in a draft revision description: >- **Deprecated.** Use [PUT /v2/features/:id/revisions/:version/default-value](#operation/putFeatureRevisionDefaultValueV2) 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). deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: defaultValue: type: string revisionTitle: type: string revisionComment: type: string required: - defaultValue additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/default-value' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/prerequisites: put: operationId: putFeatureRevisionPrerequisites summary: Set feature-level prerequisites in a draft revision description: >- **Deprecated.** Use [PUT /v2/features/:id/revisions/:version/prerequisites](#operation/putFeatureRevisionPrerequisitesV2) instead. Replaces the feature's prerequisite list for this revision. Each prerequisite condition is evaluated against `{ value: }` at SDK eval time — use `value` as the condition key. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false revisionTitle: type: string revisionComment: type: string required: - prerequisites additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/prerequisites' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/holdout: put: operationId: putFeatureRevisionHoldout summary: Set holdout in a draft revision description: >- **Deprecated.** Use [PUT /v2/features/:id/revisions/:version/holdout](#operation/putFeatureRevisionHoldoutV2) 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. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: holdout: anyOf: - type: object properties: id: type: string value: type: string required: - id - value additionalProperties: false - type: 'null' revisionTitle: type: string revisionComment: type: string required: - holdout additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/holdout' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/archive: put: operationId: putFeatureRevisionArchive summary: Set archived state in a draft revision description: >- **Deprecated.** Use [PUT /v2/features/:id/revisions/:version/archive](#operation/putFeatureRevisionArchiveV2) instead. Sets whether the feature is archived. Archived features are excluded from SDK payloads on publish. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: archived: type: boolean revisionTitle: type: string revisionComment: type: string required: - archived additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/archive' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/toggle: post: operationId: postFeatureRevisionToggle summary: Toggle an environment on/off in a draft revision description: >- **Deprecated.** Use [POST /v2/features/:id/revisions/:version/toggle](#operation/postFeatureRevisionToggleV2) instead. Sets whether the feature is enabled in the given environment as part of the draft. Takes effect on publish. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: environment: type: string enabled: type: boolean revisionTitle: type: string revisionComment: type: string required: - environment - enabled additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/toggle' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/rules: post: operationId: postFeatureRevisionRuleAdd summary: Add a rule to a draft revision description: >- **Deprecated.** Use [POST /v2/features/:id/revisions/:version/rules](#operation/postFeatureRevisionRuleAddV2) 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. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: environment: type: string rule: anyOf: - type: object properties: description: type: string enabled: type: boolean condition: type: string savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false scheduleType: type: string enum: - none - schedule - ramp type: type: string const: experiment-ref experimentId: type: string variations: type: array items: type: object properties: variationId: type: string value: type: string required: - value additionalProperties: false required: - type - experimentId - variations additionalProperties: false - type: object properties: description: type: string enabled: type: boolean condition: type: string savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false scheduleType: type: string enum: - none - schedule - ramp type: type: string const: safe-rollout controlValue: type: string variationValue: type: string hashAttribute: type: string trackingKey: type: string seed: type: string safeRolloutFields: type: object properties: datasourceId: type: string exposureQueryId: type: string guardrailMetricIds: type: array items: type: string maxDuration: type: object properties: amount: type: number exclusiveMinimum: 0 unit: type: string enum: - weeks - days - hours - minutes required: - amount - unit additionalProperties: false autoRollback: type: boolean rampUpSchedule: type: object properties: enabled: type: boolean steps: minItems: 1 type: array items: type: object properties: percent: type: number minimum: 0 maximum: 1 required: - percent additionalProperties: false required: - enabled additionalProperties: false required: - datasourceId - exposureQueryId - guardrailMetricIds - maxDuration additionalProperties: false required: - type - controlValue - variationValue - hashAttribute - safeRolloutFields additionalProperties: false - type: object properties: description: type: string enabled: type: boolean condition: type: string savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false scheduleType: type: string enum: - none - schedule - ramp type: type: string enum: - force - rollout value: type: string coverage: type: number minimum: 0 maximum: 1 hashAttribute: type: string seed: type: string required: - value additionalProperties: false rampSchedule: type: object properties: name: type: string templateId: type: string steps: type: array items: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: interval seconds: type: number exclusiveMinimum: 0 required: - type - seconds additionalProperties: false - type: object properties: type: type: string const: approval required: - type additionalProperties: false - type: object properties: type: type: string const: scheduled at: {} required: - type - at additionalProperties: false actions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' additionalProperties: false required: - patch additionalProperties: false approvalNotes: anyOf: - type: string - type: 'null' required: - trigger additionalProperties: false endActions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' additionalProperties: false required: - patch additionalProperties: false startDate: anyOf: - type: string - type: 'null' endCondition: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: scheduled at: {} required: - type - at additionalProperties: false additionalProperties: false additionalProperties: false schedule: type: object properties: startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' additionalProperties: false revisionTitle: type: string revisionComment: type: string required: - environment - rule additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/rules' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/rules/{ruleId}: put: operationId: putFeatureRevisionRule summary: Update a rule in a draft revision description: >- **Deprecated.** Use [PUT /v2/features/:id/revisions/:version/rules/:ruleId](#operation/putFeatureRevisionRuleV2) 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. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new - $ref: '#/components/parameters/ruleId' requestBody: required: true content: application/json: schema: type: object properties: environment: type: string rule: type: object properties: description: type: string enabled: type: boolean condition: type: string savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: anyOf: - type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false - type: 'null' scheduleType: anyOf: - type: string enum: - none - schedule - ramp - type: 'null' type: type: string enum: - force - rollout - experiment-ref - safe-rollout value: type: string coverage: type: number minimum: 0 maximum: 1 hashAttribute: type: string seed: type: string experimentId: type: string variations: type: array items: type: object properties: variationId: type: string value: type: string required: - variationId - value additionalProperties: false controlValue: type: string variationValue: type: string additionalProperties: false rampSchedule: type: object properties: name: type: string templateId: type: string steps: type: array items: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: interval seconds: type: number exclusiveMinimum: 0 required: - type - seconds additionalProperties: false - type: object properties: type: type: string const: approval required: - type additionalProperties: false - type: object properties: type: type: string const: scheduled at: {} required: - type - at additionalProperties: false actions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' additionalProperties: false required: - patch additionalProperties: false approvalNotes: anyOf: - type: string - type: 'null' required: - trigger additionalProperties: false endActions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' additionalProperties: false required: - patch additionalProperties: false startDate: anyOf: - type: string - type: 'null' endCondition: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: scheduled at: {} required: - type - at additionalProperties: false additionalProperties: false additionalProperties: false schedule: type: object properties: startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' additionalProperties: false revisionTitle: type: string revisionComment: type: string required: - environment - rule additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/rules/{ruleId}' \ -H 'Authorization: Bearer YOUR_API_KEY' delete: operationId: deleteFeatureRevisionRule summary: Delete a rule from a draft revision description: >- **Deprecated.** Use [DELETE /v2/features/:id/revisions/:version/rules/:ruleId](#operation/deleteFeatureRevisionRuleV2) 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. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new - $ref: '#/components/parameters/ruleId' requestBody: required: true content: application/json: schema: type: object properties: environment: type: string revisionTitle: type: string revisionComment: type: string required: - environment additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/rules/{ruleId}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/rules/reorder: post: operationId: postFeatureRevisionRulesReorder summary: Reorder rules in an environment description: >- **Deprecated.** Use [POST /v2/features/:id/revisions/:version/rules/reorder](#operation/postFeatureRevisionRulesReorderV2) 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. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: environment: type: string ruleIds: type: array items: type: string revisionTitle: type: string revisionComment: type: string required: - environment - ruleIds additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/rules/reorder' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/rules/{ruleId}/ramp-schedule: put: operationId: putFeatureRevisionRuleRampSchedule summary: Set ramp schedule for a rule description: >- **Deprecated.** Use [PUT /v2/features/:id/revisions/:version/rules/:ruleId/ramp-schedule](#operation/putFeatureRevisionRuleRampScheduleV2) instead. Attaches (or replaces) a ramp schedule for the rule. Rejects if the rule already has a live ramp schedule — update that directly via PUT /ramp-schedules/{id}. The schedule is created at publish time. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new - $ref: '#/components/parameters/ruleId' requestBody: required: true content: application/json: schema: type: object properties: name: type: string templateId: type: string steps: type: array items: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: interval seconds: type: number exclusiveMinimum: 0 required: - type - seconds additionalProperties: false - type: object properties: type: type: string const: approval required: - type additionalProperties: false - type: object properties: type: type: string const: scheduled at: {} required: - type - at additionalProperties: false actions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' additionalProperties: false required: - patch additionalProperties: false approvalNotes: anyOf: - type: string - type: 'null' required: - trigger additionalProperties: false endActions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' additionalProperties: false required: - patch additionalProperties: false startDate: anyOf: - type: string - type: 'null' endCondition: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: scheduled at: {} required: - type - at additionalProperties: false additionalProperties: false environment: deprecated: true type: string revisionTitle: type: string revisionComment: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/rules/{ruleId}/ramp-schedule' \ -H 'Authorization: Bearer YOUR_API_KEY' delete: operationId: deleteFeatureRevisionRuleRampSchedule summary: Remove ramp schedule from a rule description: >- **Deprecated.** Use [DELETE /v2/features/:id/revisions/:version/rules/:ruleId/ramp-schedule](#operation/deleteFeatureRevisionRuleRampScheduleV2) 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. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new - $ref: '#/components/parameters/ruleId' requestBody: required: true content: application/json: schema: type: object properties: environment: deprecated: true type: string revisionTitle: type: string revisionComment: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/rules/{ruleId}/ramp-schedule' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/request-review: post: operationId: postFeatureRevisionRequestReview summary: Request review for a draft revision description: >- **Deprecated.** Use [POST /v2/features/:id/revisions/:version/request-review](#operation/postFeatureRevisionRequestReviewV2) instead. Moves the draft into the `pending-review` state and notifies reviewers. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' requestBody: required: true content: application/json: schema: type: object properties: comment: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/request-review' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/submit-review: post: operationId: postFeatureRevisionSubmitReview summary: Submit a review on a draft revision description: >- **Deprecated.** Use [POST /v2/features/:id/revisions/:version/submit-review](#operation/postFeatureRevisionSubmitReviewV2) 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. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' requestBody: required: true content: application/json: schema: type: object properties: comment: type: string action: type: string enum: - approve - request-changes - comment additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/submit-review' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/merge-status: get: operationId: getFeatureRevisionMergeStatus summary: Get merge status for a draft revision description: >- **Deprecated.** Use [GET /v2/features/:id/revisions/:version/merge-status](#operation/getFeatureRevisionMergeStatusV2) 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. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' responses: '200': content: application/json: schema: type: object properties: success: type: boolean conflicts: type: array items: $ref: '#/components/schemas/conflicts' result: $ref: '#/components/schemas/result' required: - success - conflicts additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/merge-status' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/rebase: post: operationId: postFeatureRevisionRebase summary: Rebase a draft revision onto the current live version description: >- **Deprecated.** Use [POST /v2/features/:id/revisions/:version/rebase](#operation/postFeatureRevisionRebaseV2) 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.** Rules now merge as a single flat array, so the per-rule `envName.ruleId` keys used by older clients are no longer recognized. Valid keys: `defaultValue`, `rules`, `prerequisites`, `archived`, `holdout`, and `environmentsEnabled.`. Unrecognized keys are ignored; unresolved conflicts respond with `409`. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' requestBody: required: true content: application/json: schema: type: object properties: conflictResolutions: type: object propertyNames: type: string additionalProperties: type: string enum: - overwrite - discard additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/rebase' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/publish: post: operationId: postFeatureRevisionPublish summary: Publish a draft revision description: >- **Deprecated.** Use [POST /v2/features/:id/revisions/:version/publish](#operation/postFeatureRevisionPublishV2) instead. Immediately publishes a draft revision, making it the live version of the feature. Blocked if the org requires approvals and `bypassApprovalChecks` is off. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' requestBody: required: true content: application/json: schema: type: object properties: comment: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/publish' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/discard: post: operationId: postFeatureRevisionDiscard summary: Discard a draft revision description: >- **Deprecated.** Use [POST /v2/features/:id/revisions/:version/discard](#operation/postFeatureRevisionDiscardV2) instead. Permanently discards a draft revision. Only drafts (never published revisions) can be discarded. Any pending ramp actions staged on the draft are dropped. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' requestBody: required: true content: application/json: schema: type: object properties: {} additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/discard' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/features/{id}/revisions/{version}/revert: post: operationId: postFeatureRevisionRevert summary: Revert the feature to a prior revision description: >- **Deprecated.** Use [POST /v2/features/:id/revisions/:version/revert](#operation/postFeatureRevisionRevertV2) instead. Creates a new draft (or immediately publishes) whose content matches the specified historical revision. deprecated: true tags: - feature-revisions parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' requestBody: required: true content: application/json: schema: type: object properties: strategy: type: string enum: - draft - publish comment: type: string title: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevision' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/features/{id}/revisions/{version}/revert' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features: get: operationId: listFeaturesV2 summary: Get all features description: > Returns features with pagination. Rules are returned as a unified top-level array with per-rule environment scope. tags: - features-v2 parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/projectId' - $ref: '#/components/parameters/clientKey' - $ref: '#/components/parameters/skipPagination' responses: '200': content: application/json: schema: allOf: - type: object properties: features: type: array items: $ref: '#/components/schemas/FeatureV2' required: - features additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v2/features' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postFeatureV2 summary: Create a single feature description: >- Creates a new feature. Rules are supplied as a top-level `rules` array; each rule includes `allEnvironments` / `environments` scope fields. tags: - features-v2 requestBody: required: true content: application/json: schema: type: object properties: id: description: >- A unique key name for the feature. Feature keys can only include letters, numbers, hyphens, and underscores. type: string minLength: 1 archived: type: boolean description: description: Description of the feature type: string owner: description: >- 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. type: string project: description: An associated project ID type: string valueType: description: The data type of the feature payload. Boolean by default. type: string enum: - boolean - string - number - json defaultValue: description: >- Default value when feature is enabled. Type must match `valueType`. type: string tags: description: List of associated tags type: array items: type: string rules: description: >- Feature rules. Each rule carries its own environment scope via `allEnvironments` / `environments`. type: array items: anyOf: - type: object properties: description: type: string condition: type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false id: type: string enabled: type: boolean type: type: string const: force value: type: string allEnvironments: description: >- When true the rule applies to all environments (default). type: boolean environments: description: >- Specific environment IDs this rule applies to. Required when allEnvironments is false. type: array items: type: string required: - type - value additionalProperties: false - type: object properties: description: type: string condition: type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false id: type: string enabled: type: boolean type: type: string const: rollout value: type: string coverage: type: number hashAttribute: type: string allEnvironments: description: >- When true the rule applies to all environments (default). type: boolean environments: description: >- Specific environment IDs this rule applies to. Required when allEnvironments is false. type: array items: type: string required: - type - value - coverage - hashAttribute additionalProperties: false - type: object properties: description: type: string id: type: string enabled: type: boolean type: type: string const: experiment-ref condition: type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false variations: type: array items: type: object properties: value: type: string variationId: type: string required: - value - variationId additionalProperties: false experimentId: type: string allEnvironments: description: >- When true the rule applies to all environments (default). type: boolean environments: description: >- Specific environment IDs this rule applies to. Required when allEnvironments is false. type: array items: type: string required: - type - variations - experimentId additionalProperties: false - type: object properties: description: type: string id: type: string enabled: type: boolean type: type: string const: safe-rollout condition: type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false controlValue: type: string variationValue: type: string hashAttribute: type: string trackingKey: type: string seed: type: string safeRolloutId: description: >- ID of an existing SafeRollout on this feature. Bulk POST/PUT cannot create new safe-rollouts; use POST /v2/features/:id/revisions/:version/rules to create one. type: string status: type: string enum: - running - released - rolled-back - stopped allEnvironments: description: >- When true the rule applies to all environments (default). type: boolean environments: description: >- Specific environment IDs this rule applies to. Required when allEnvironments is false. type: array items: type: string required: - type - controlValue - variationValue - hashAttribute - safeRolloutId additionalProperties: false environments: description: >- Per-environment enabled state. V2 rules are specified on the top-level `rules` field. type: object propertyNames: type: string additionalProperties: type: object properties: enabled: type: boolean additionalProperties: false prerequisites: description: Feature IDs. Each feature must evaluate to `true` type: array items: type: string jsonSchema: description: >- Use JSON schema to validate the payload of a JSON-type feature value (enterprise only). type: string customFields: type: object propertyNames: type: string additionalProperties: type: string required: - id - owner - valueType - defaultValue additionalProperties: false responses: '200': content: application/json: schema: type: object properties: feature: $ref: '#/components/schemas/FeatureV2' required: - feature additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v2/features' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}: get: operationId: getFeatureV2 summary: Get a single feature tags: - features-v2 parameters: - $ref: '#/components/parameters/id' - $ref: '#/components/parameters/withRevisions' responses: '200': content: application/json: schema: type: object properties: feature: $ref: '#/components/schemas/FeatureWithRevisionsV2' required: - feature additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v2/features/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: updateFeatureV2 summary: Partially update a feature description: >- 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. tags: - features-v2 parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: description: description: Description of the feature type: string archived: type: boolean project: description: An associated project ID type: string owner: description: >- 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. type: string defaultValue: type: string tags: description: >- List of associated tags. Will override tags completely with submitted list type: array items: type: string rules: description: >- Replaces all feature rules atomically. Behavior differs from v1: v1 PUT applies per-environment patches, v2 PUT swaps the entire `rules` array in one revision. 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` (creation requires `POST /v2/features/:id/revisions/:version/rules`). type: array items: anyOf: - type: object properties: description: type: string condition: type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false id: type: string enabled: type: boolean type: type: string const: force value: type: string allEnvironments: description: >- When true the rule applies to all environments (default). type: boolean environments: description: >- Specific environment IDs this rule applies to. Required when allEnvironments is false. type: array items: type: string required: - type - value additionalProperties: false - type: object properties: description: type: string condition: type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false id: type: string enabled: type: boolean type: type: string const: rollout value: type: string coverage: type: number hashAttribute: type: string allEnvironments: description: >- When true the rule applies to all environments (default). type: boolean environments: description: >- Specific environment IDs this rule applies to. Required when allEnvironments is false. type: array items: type: string required: - type - value - coverage - hashAttribute additionalProperties: false - type: object properties: description: type: string id: type: string enabled: type: boolean type: type: string const: experiment-ref condition: type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false variations: type: array items: type: object properties: value: type: string variationId: type: string required: - value - variationId additionalProperties: false experimentId: type: string allEnvironments: description: >- When true the rule applies to all environments (default). type: boolean environments: description: >- Specific environment IDs this rule applies to. Required when allEnvironments is false. type: array items: type: string required: - type - variations - experimentId additionalProperties: false - type: object properties: description: type: string id: type: string enabled: type: boolean type: type: string const: safe-rollout condition: type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false controlValue: type: string variationValue: type: string hashAttribute: type: string trackingKey: type: string seed: type: string safeRolloutId: description: >- ID of an existing SafeRollout on this feature. Bulk POST/PUT cannot create new safe-rollouts; use POST /v2/features/:id/revisions/:version/rules to create one. type: string status: type: string enum: - running - released - rolled-back - stopped allEnvironments: description: >- When true the rule applies to all environments (default). type: boolean environments: description: >- Specific environment IDs this rule applies to. Required when allEnvironments is false. type: array items: type: string required: - type - controlValue - variationValue - hashAttribute - safeRolloutId additionalProperties: false environments: description: >- Per-environment enabled state. V2 rules are specified on the top-level `rules` field. type: object propertyNames: type: string additionalProperties: type: object properties: enabled: type: boolean additionalProperties: false prerequisites: description: Feature IDs. Each feature must evaluate to `true` type: array items: type: string jsonSchema: description: >- Use JSON schema to validate the payload of a JSON-type feature value (enterprise only). type: string customFields: type: object propertyNames: type: string additionalProperties: type: string holdout: description: > Holdout to assign this feature to. Pass `null` to remove the feature from its current holdout. Omit the field entirely to leave the holdout unchanged. anyOf: - type: object properties: id: description: Holdout ID type: string value: description: >- The feature value assigned to users in the holdout treatment group type: string required: - id - value additionalProperties: false - type: 'null' additionalProperties: false responses: '200': content: application/json: schema: type: object properties: feature: $ref: '#/components/schemas/FeatureV2' required: - feature additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v2/features/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' delete: operationId: deleteFeatureV2 summary: Deletes a single feature description: > 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. tags: - features-v2 parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: deletedId: description: The ID of the deleted feature example: feature-123 type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X DELETE 'https://api.growthbook.io/api/v2/features/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/toggle: post: operationId: toggleFeatureV2 summary: Toggle a feature in one or more environments description: >- Enables or disables a feature in one or more environments simultaneously. Accepts a map of environment name → boolean. tags: - features-v2 parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: reason: type: string environments: type: object propertyNames: type: string additionalProperties: anyOf: - type: boolean const: true - type: boolean const: false - type: string const: 'true' - type: string const: 'false' - type: string const: '1' - type: string const: '0' - type: number const: 1 - type: number const: 0 - type: string const: '' required: - environments additionalProperties: false responses: '200': content: application/json: schema: type: object properties: feature: $ref: '#/components/schemas/FeatureV2' required: - feature additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v2/features/{id}/toggle' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revert: post: operationId: revertFeatureV2 summary: Revert a feature to a specific revision tags: - features-v2 parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: revision: type: number comment: type: string required: - revision additionalProperties: false responses: '200': content: application/json: schema: type: object properties: feature: $ref: '#/components/schemas/FeatureV2' required: - feature additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v2/features/{id}/revert' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/feature-keys: get: operationId: getFeatureKeysV2 summary: Get list of feature keys tags: - features-v2 parameters: - $ref: '#/components/parameters/projectId' responses: '200': content: application/json: schema: type: array items: type: string x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v2/feature-keys' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/stale-features: get: operationId: getFeatureStaleV2 summary: Get stale status for one or more features tags: - features-v2 parameters: - $ref: '#/components/parameters/ids' responses: '200': content: application/json: schema: type: object properties: features: description: >- Map of feature ID to stale status. Only requested features that were found and readable are included. type: object propertyNames: type: string additionalProperties: type: object properties: featureId: type: string isStale: type: boolean staleReason: anyOf: - type: string enum: - never-stale - recently-updated - active-draft - has-dependents - no-rules - rules-one-sided - abandoned-draft - toggled-off - active-experiment - has-rules - type: 'null' neverStale: type: boolean staleByEnv: type: object propertyNames: type: string additionalProperties: type: object properties: isStale: type: boolean reason: anyOf: - type: string enum: - no-rules - rules-one-sided - abandoned-draft - toggled-off - active-experiment - has-rules - recently-updated - active-draft - has-dependents - type: 'null' evaluatesTo: type: string required: - isStale - reason additionalProperties: false required: - featureId - isStale - staleReason - neverStale additionalProperties: false required: - features additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v2/stale-features' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/revisions: get: operationId: listRevisionsV2 summary: List feature revisions description: >- Returns a paginated list of feature revisions across all features in the organization. Revision `rules` is a flat array with per-rule scope. tags: - feature-revisions-v2 parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/skipPagination' - $ref: '#/components/parameters/featureId' - $ref: '#/components/parameters/status' - $ref: '#/components/parameters/author' - name: mine in: query description: >- If true, return only revisions authored by or contributed to by the calling user. schema: description: >- If true, return only revisions authored by or contributed to by the calling user. anyOf: - type: string const: 'true' - type: string const: 'false' - type: string const: '0' - type: string const: '1' - type: boolean responses: '200': content: application/json: schema: type: object properties: revisions: type: array items: $ref: '#/components/schemas/FeatureRevisionV2' limit: type: integer offset: type: integer count: type: integer total: type: integer hasMore: type: boolean nextOffset: anyOf: - type: integer - type: 'null' required: - revisions - limit - offset - count - total - hasMore - nextOffset additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v2/revisions' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions: get: operationId: getFeatureRevisionsV2 summary: List revisions for a feature description: >- Returns a paginated list of revisions for this feature, sorted newest-first. Revision `rules` is a flat array with per-rule scope. tags: - feature-revisions-v2 parameters: - $ref: '#/components/parameters/id' - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/skipPagination' - $ref: '#/components/parameters/status' - $ref: '#/components/parameters/author' responses: '200': content: application/json: schema: type: object properties: revisions: type: array items: $ref: '#/components/schemas/FeatureRevisionV2' limit: type: integer offset: type: integer count: type: integer total: type: integer hasMore: type: boolean nextOffset: anyOf: - type: integer - type: 'null' required: - revisions - limit - offset - count - total - hasMore - nextOffset additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v2/features/{id}/revisions' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postFeatureRevisionV2 summary: Create a draft revision description: Creates a new draft revision branched from the current live revision. tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string requestBody: required: true content: application/json: schema: type: object properties: comment: type: string title: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v2/features/{id}/revisions' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/latest: get: operationId: getFeatureRevisionLatestV2 summary: Get the most recent active draft revision description: >- Returns the most recently updated draft revision for the feature. Returns 404 if there is no active draft. tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - name: mine in: query description: >- If true, return only the most recent active draft authored by or contributed to by the calling user. schema: description: >- If true, return only the most recent active draft authored by or contributed to by the calling user. anyOf: - type: string const: 'true' - type: string const: 'false' - type: string const: '0' - type: string const: '1' - type: boolean responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v2/features/{id}/revisions/latest' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}: get: operationId: getFeatureRevisionV2 summary: Get a single feature revision description: >- Returns the revision at the specified version for this feature. Revision `rules` is a flat array with per-rule environment scope. tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/metadata: put: operationId: putFeatureRevisionMetadataV2 summary: Update revision metadata tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: comment: type: string title: type: string description: type: string owner: description: >- 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. type: string project: type: string tags: type: array items: type: string neverStale: type: boolean customFields: type: object propertyNames: type: string additionalProperties: {} jsonSchema: type: object properties: schemaType: type: string enum: - schema - simple schema: type: string simple: type: object properties: type: type: string enum: - object - object[] - primitive - primitive[] fields: type: array items: type: object properties: key: type: string maxLength: 64 type: type: string enum: - integer - float - string - boolean required: type: boolean default: type: string maxLength: 256 description: type: string maxLength: 256 enum: maxItems: 256 type: array items: type: string maxLength: 256 min: type: number max: type: number required: - key - type - required - default - description - enum - min - max additionalProperties: false required: - type - fields additionalProperties: false date: {} enabled: type: boolean required: - schemaType - schema - simple - date - enabled additionalProperties: false additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/metadata' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/default-value: put: operationId: putFeatureRevisionDefaultValueV2 summary: Set the default value in a draft revision tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: defaultValue: type: string revisionTitle: type: string revisionComment: type: string required: - defaultValue additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/default-value' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/prerequisites: put: operationId: putFeatureRevisionPrerequisitesV2 summary: Set feature-level prerequisites in a draft revision tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false revisionTitle: type: string revisionComment: type: string required: - prerequisites additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/prerequisites' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/holdout: put: operationId: putFeatureRevisionHoldoutV2 summary: Set holdout in a draft revision tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: holdout: anyOf: - type: object properties: id: type: string value: type: string required: - id - value additionalProperties: false - type: 'null' revisionTitle: type: string revisionComment: type: string required: - holdout additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/holdout' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/archive: put: operationId: putFeatureRevisionArchiveV2 summary: Set archived state in a draft revision tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: archived: type: boolean revisionTitle: type: string revisionComment: type: string required: - archived additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/archive' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/toggle: post: operationId: postFeatureRevisionToggleV2 summary: Toggle an environment on/off in a draft revision tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: environment: type: string enabled: type: boolean revisionTitle: type: string revisionComment: type: string required: - environment - enabled additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/toggle' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/rules: post: operationId: postFeatureRevisionRuleAddV2 summary: Add a rule to a draft revision description: >- Appends a new rule to the revision's rule list. Supply `allEnvironments: true` to target all environments, or `environments: [...]` to scope to specific ones. Use `rampSchedule` for ramp configuration or `schedule` for a simple start/end window. tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: rule: anyOf: - type: object properties: description: type: string enabled: type: boolean condition: type: string savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false scheduleType: type: string enum: - none - schedule - ramp allEnvironments: description: >- When true the rule applies to all environments. Defaults to false. type: boolean environments: description: >- Specific environment IDs this rule applies to. Used when allEnvironments is false. type: array items: type: string type: type: string const: experiment-ref experimentId: type: string variations: type: array items: type: object properties: variationId: type: string value: type: string required: - value additionalProperties: false required: - type - experimentId - variations additionalProperties: false - type: object properties: description: type: string enabled: type: boolean condition: type: string savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false scheduleType: type: string enum: - none - schedule - ramp allEnvironments: description: >- When true the rule applies to all environments. Defaults to false. type: boolean environments: description: >- Specific environment IDs this rule applies to. Used when allEnvironments is false. type: array items: type: string type: type: string const: safe-rollout controlValue: type: string variationValue: type: string hashAttribute: type: string trackingKey: type: string seed: type: string safeRolloutFields: type: object properties: datasourceId: type: string exposureQueryId: type: string guardrailMetricIds: type: array items: type: string maxDuration: type: object properties: amount: type: number exclusiveMinimum: 0 unit: type: string enum: - weeks - days - hours - minutes required: - amount - unit additionalProperties: false autoRollback: type: boolean rampUpSchedule: type: object properties: enabled: type: boolean steps: minItems: 1 type: array items: type: object properties: percent: type: number minimum: 0 maximum: 1 required: - percent additionalProperties: false required: - enabled additionalProperties: false required: - datasourceId - exposureQueryId - guardrailMetricIds - maxDuration additionalProperties: false required: - type - controlValue - variationValue - hashAttribute - safeRolloutFields additionalProperties: false - type: object properties: description: type: string enabled: type: boolean condition: type: string savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false scheduleType: type: string enum: - none - schedule - ramp allEnvironments: description: >- When true the rule applies to all environments. Defaults to false. type: boolean environments: description: >- Specific environment IDs this rule applies to. Used when allEnvironments is false. type: array items: type: string type: type: string enum: - force - rollout value: type: string coverage: type: number minimum: 0 maximum: 1 hashAttribute: type: string seed: type: string required: - value additionalProperties: false rampSchedule: type: object properties: name: type: string templateId: type: string steps: type: array items: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: interval seconds: type: number exclusiveMinimum: 0 required: - type - seconds additionalProperties: false - type: object properties: type: type: string const: approval required: - type additionalProperties: false - type: object properties: type: type: string const: scheduled at: {} required: - type - at additionalProperties: false actions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' additionalProperties: false required: - patch additionalProperties: false approvalNotes: anyOf: - type: string - type: 'null' required: - trigger additionalProperties: false endActions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' additionalProperties: false required: - patch additionalProperties: false startDate: anyOf: - type: string - type: 'null' endCondition: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: scheduled at: {} required: - type - at additionalProperties: false additionalProperties: false additionalProperties: false schedule: type: object properties: startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' additionalProperties: false revisionTitle: type: string revisionComment: type: string required: - rule additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/rules' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/rules/{ruleId}: put: operationId: putFeatureRevisionRuleV2 summary: Update a rule in a draft revision description: >- Patches fields on an existing rule (identified by `ruleId`). The rule `type` cannot be changed. Scope can be updated via `allEnvironments` / `environments` patch fields. tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new - $ref: '#/components/parameters/ruleId' requestBody: required: true content: application/json: schema: type: object properties: rule: type: object properties: description: type: string enabled: type: boolean condition: type: string savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false scheduleRules: anyOf: - type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false - type: 'null' scheduleType: anyOf: - type: string enum: - none - schedule - ramp - type: 'null' type: type: string enum: - force - rollout - experiment-ref - safe-rollout value: type: string coverage: type: number minimum: 0 maximum: 1 hashAttribute: type: string seed: type: string experimentId: type: string variations: type: array items: type: object properties: variationId: type: string value: type: string required: - variationId - value additionalProperties: false controlValue: type: string variationValue: type: string allEnvironments: type: boolean environments: type: array items: type: string additionalProperties: false rampSchedule: type: object properties: name: type: string templateId: type: string steps: type: array items: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: interval seconds: type: number exclusiveMinimum: 0 required: - type - seconds additionalProperties: false - type: object properties: type: type: string const: approval required: - type additionalProperties: false - type: object properties: type: type: string const: scheduled at: {} required: - type - at additionalProperties: false actions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' additionalProperties: false required: - patch additionalProperties: false approvalNotes: anyOf: - type: string - type: 'null' required: - trigger additionalProperties: false endActions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' additionalProperties: false required: - patch additionalProperties: false startDate: anyOf: - type: string - type: 'null' endCondition: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: scheduled at: {} required: - type - at additionalProperties: false additionalProperties: false additionalProperties: false schedule: type: object properties: startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' additionalProperties: false revisionTitle: type: string revisionComment: type: string required: - rule additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/rules/{ruleId}' \ -H 'Authorization: Bearer YOUR_API_KEY' delete: operationId: deleteFeatureRevisionRuleV2 summary: Delete a rule from a draft revision description: >- Removes the rule from the revision. Any pending ramp actions for this rule are also cleared. tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new - $ref: '#/components/parameters/ruleId' requestBody: required: true content: application/json: schema: type: object properties: revisionTitle: type: string revisionComment: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/rules/{ruleId}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/rules/reorder: post: operationId: postFeatureRevisionRulesReorderV2 summary: Reorder rules in the revision description: >- 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. tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new requestBody: required: true content: application/json: schema: type: object properties: ruleIds: type: array items: type: string revisionTitle: type: string revisionComment: type: string required: - ruleIds additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/rules/reorder' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/rules/{ruleId}/ramp-schedule: put: operationId: putFeatureRevisionRuleRampScheduleV2 summary: Set ramp schedule for a rule tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new - $ref: '#/components/parameters/ruleId' requestBody: required: true content: application/json: schema: type: object properties: name: type: string templateId: type: string steps: type: array items: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: interval seconds: type: number exclusiveMinimum: 0 required: - type - seconds additionalProperties: false - type: object properties: type: type: string const: approval required: - type additionalProperties: false - type: object properties: type: type: string const: scheduled at: {} required: - type - at additionalProperties: false actions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' additionalProperties: false required: - patch additionalProperties: false approvalNotes: anyOf: - type: string - type: 'null' required: - trigger additionalProperties: false endActions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' additionalProperties: false required: - patch additionalProperties: false startDate: anyOf: - type: string - type: 'null' endCondition: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: scheduled at: {} required: - type - at additionalProperties: false additionalProperties: false environment: deprecated: true type: string revisionTitle: type: string revisionComment: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/rules/{ruleId}/ramp-schedule' \ -H 'Authorization: Bearer YOUR_API_KEY' delete: operationId: deleteFeatureRevisionRuleRampScheduleV2 summary: Remove ramp schedule from a rule tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - name: version in: path required: true description: '' schema: anyOf: - type: integer - type: string const: new - $ref: '#/components/parameters/ruleId' requestBody: required: true content: application/json: schema: type: object properties: revisionTitle: type: string revisionComment: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/rules/{ruleId}/ramp-schedule' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/request-review: post: operationId: postFeatureRevisionRequestReviewV2 summary: Request review for a draft revision tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' requestBody: required: true content: application/json: schema: type: object properties: comment: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/request-review' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/submit-review: post: operationId: postFeatureRevisionSubmitReviewV2 summary: Submit a review on a draft revision tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' requestBody: required: true content: application/json: schema: type: object properties: comment: type: string action: type: string enum: - approve - request-changes - comment additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/submit-review' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/merge-status: get: operationId: getFeatureRevisionMergeStatusV2 summary: Get merge status for a draft revision tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' responses: '200': content: application/json: schema: type: object properties: success: type: boolean conflicts: type: array items: $ref: '#/components/schemas/conflicts' result: type: object properties: defaultValue: type: string rules: type: array items: {} environmentsEnabled: type: object propertyNames: type: string additionalProperties: type: boolean prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false archived: type: boolean metadata: type: object properties: releaseType: type: string riskLevel: type: string additionalProperties: {} holdout: anyOf: - type: object properties: id: type: string value: type: string required: - id - value additionalProperties: false - type: 'null' additionalProperties: false required: - success - conflicts additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/merge-status' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/rebase: post: operationId: postFeatureRevisionRebaseV2 summary: Rebase a draft revision onto the current live version description: >- 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. Valid keys: `defaultValue`, `rules`, `prerequisites`, `archived`, `holdout`, and `environmentsEnabled.`. Unresolved conflicts respond with `409`. tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' requestBody: required: true content: application/json: schema: type: object properties: conflictResolutions: type: object propertyNames: type: string additionalProperties: type: string enum: - overwrite - discard additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/rebase' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/publish: post: operationId: postFeatureRevisionPublishV2 summary: Publish a draft revision description: >- Immediately publishes a draft revision, making it the live version of the feature. tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' requestBody: required: true content: application/json: schema: type: object properties: comment: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/publish' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/discard: post: operationId: postFeatureRevisionDiscardV2 summary: Discard a draft revision tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' requestBody: required: true content: application/json: schema: type: object properties: {} additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/discard' \ -H 'Authorization: Bearer YOUR_API_KEY' /v2/features/{id}/revisions/{version}/revert: post: operationId: postFeatureRevisionRevertV2 summary: Revert the feature to a prior revision tags: - feature-revisions-v2 parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/version' requestBody: required: true content: application/json: schema: type: object properties: strategy: type: string enum: - draft - publish comment: type: string title: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: revision: $ref: '#/components/schemas/FeatureRevisionV2' required: - revision additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v2/features/{id}/revisions/{version}/revert' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/archetypes: get: operationId: listArchetypes summary: Get the organization's archetypes tags: - archetypes responses: '200': content: application/json: schema: type: object properties: archetypes: type: array items: $ref: '#/components/schemas/Archetype' required: - archetypes additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/archetypes' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postArchetype summary: Create a single archetype tags: - archetypes requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: type: string isPublic: description: >- Whether to make this Archetype available to other team members type: boolean attributes: description: The attributes to set when using this Archetype type: object propertyNames: type: string additionalProperties: {} projects: type: array items: type: string required: - name - isPublic additionalProperties: false responses: '200': content: application/json: schema: type: object properties: archetype: $ref: '#/components/schemas/Archetype' required: - archetype additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/archetypes' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/archetypes/{id}: get: operationId: getArchetype summary: Get a single archetype tags: - archetypes parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: archetype: $ref: '#/components/schemas/Archetype' required: - archetype additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/archetypes/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' put: operationId: putArchetype summary: Update a single archetype tags: - archetypes parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: type: string isPublic: description: >- Whether to make this Archetype available to other team members type: boolean attributes: description: The attributes to set when using this Archetype type: object propertyNames: type: string additionalProperties: {} projects: type: array items: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: archetype: $ref: '#/components/schemas/Archetype' required: - archetype additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X PUT 'https://api.growthbook.io/api/v1/archetypes/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"description":"New description"}' delete: operationId: deleteArchetype summary: Deletes a single archetype tags: - archetypes parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: deletedId: type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/archetypes/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/experiments: get: operationId: listExperiments summary: Get all experiments tags: - experiments parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/projectId' - $ref: '#/components/parameters/datasourceId' - $ref: '#/components/parameters/trackingKey' - $ref: '#/components/parameters/experimentId' - name: status in: query description: '' schema: type: string enum: - draft - running - stopped responses: '200': content: application/json: schema: allOf: - type: object properties: experiments: type: array items: $ref: '#/components/schemas/Experiment' required: - experiments additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/experiments' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postExperiment summary: Create a single experiment tags: - experiments requestBody: required: true content: application/json: schema: type: object properties: datasourceId: description: >- ID for the [DataSource](#tag/DataSource_model). Can only be set if a templateId is not provided. type: string assignmentQueryId: description: >- The ID property of one of the assignment query objects associated with the datasource. Can only be set if a templateId is not provided. type: string trackingKey: type: string bypassDuplicateKeyCheck: description: >- 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. type: boolean name: description: Name of the experiment type: string type: type: string enum: - standard - multi-armed-bandit project: description: Project ID which the experiment belongs to type: string templateId: description: >- ID of the [ExperimentTemplate](#tag/ExperimentTemplate_model) this experiment was created from. Template fields are applied by default and overridden by explicitly provided payload fields. type: string hypothesis: description: Hypothesis of the experiment type: string description: description: Description of the experiment type: string tags: type: array items: type: string metrics: type: array items: type: string secondaryMetrics: type: array items: type: string guardrailMetrics: type: array items: type: string activationMetric: description: Users must convert on this metric before being included type: string segmentId: description: Only users in this segment will be included type: string queryFilter: description: WHERE clause to add to the default experiment query type: string owner: description: >- 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. type: string archived: type: boolean status: type: string enum: - draft - running - stopped autoRefresh: type: boolean hashAttribute: type: string fallbackAttribute: type: string hashVersion: anyOf: - type: number const: 1 - type: number const: 2 disableStickyBucketing: type: boolean bucketVersion: type: number minBucketVersion: type: number releasedVariationId: type: string excludeFromPayload: type: boolean inProgressConversions: type: string enum: - loose - strict attributionModel: description: >- Setting attribution model to `"experimentDuration"` is the same as selecting "Ignore Conversion Windows" for the Conversion Window Override. Setting it to `"lookbackOverride"` requires a `lookbackOverride` object to be provided. type: string enum: - firstExposure - experimentDuration - lookbackOverride lookbackOverride: description: >- Controls the lookback override for the experiment. For type "window", value must be a non-negative number and valueUnit is required. type: object properties: type: type: string enum: - date - window value: description: >- For "window" type - non-negative numeric value (e.g. 7 for 7 days). For "date" type a date string. anyOf: - description: >- For "window" type - non-negative numeric value (e.g. 7 for 7 days). For "date" type a date string. type: number - format: date-time description: >- For "window" type - non-negative numeric value (e.g. 7 for 7 days). For "date" type a date string. type: string valueUnit: description: Used when type is "window". Defaults to "days". type: string enum: - minutes - hours - days - weeks required: - type - value additionalProperties: false statsEngine: type: string enum: - bayesian - frequentist variations: minItems: 2 type: array items: type: object properties: id: type: string key: type: string name: type: string description: type: string screenshots: type: array items: type: object properties: path: type: string width: type: number height: type: number description: type: string required: - path additionalProperties: false required: - key - name additionalProperties: false phases: type: array items: type: object properties: name: type: string dateStarted: format: date-time type: string dateEnded: format: date-time type: string reasonForStopping: type: string seed: type: string coverage: type: number trafficSplit: type: array items: type: object properties: variationId: type: string weight: type: number required: - variationId - weight additionalProperties: false namespace: type: object properties: namespaceId: type: string enabled: type: boolean range: minItems: 2 maxItems: 2 type: array items: type: number ranges: type: array items: type: array prefixItems: - type: number - type: number required: - namespaceId additionalProperties: false targetingCondition: type: string prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false reason: type: string condition: type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false variationWeights: type: array items: type: number required: - name - dateStarted additionalProperties: false regressionAdjustmentEnabled: description: >- Controls whether regression adjustment (CUPED) is enabled for experiment analyses type: boolean sequentialTestingEnabled: description: Only applicable to frequentist analyses type: boolean sequentialTestingTuningParameter: type: number shareLevel: type: string enum: - public - organization banditScheduleValue: type: number banditScheduleUnit: type: string enum: - days - hours banditBurnInValue: type: number banditBurnInUnit: type: string enum: - days - hours banditConversionWindowValue: type: number banditConversionWindowUnit: type: string enum: - days - hours postStratificationEnabled: description: When null, the organization default is used. anyOf: - description: When null, the organization default is used. type: boolean - description: When null, the organization default is used. type: 'null' decisionFrameworkSettings: description: >- Controls the decision framework and metric overrides for the experiment. Replaces the entire stored object on update (does not patch individual fields). type: object properties: decisionCriteriaId: type: string decisionFrameworkMetricOverrides: type: array items: type: object properties: id: description: ID of the metric to override settings for. type: string targetMDE: description: >- The target relative MDE to use for the metric, expressed as proportions (e.g. use 0.1 for 10%). Must be greater than 0. type: number exclusiveMinimum: 0 required: - id additionalProperties: false additionalProperties: false metricOverrides: description: >- Per-metric analysis overrides for this experiment. Replaces the entire stored array (does not patch individual entries). type: array items: description: >- Per-metric analysis overrides stored on the experiment (matches internal metricOverrides). type: object properties: id: description: ID of the metric to override settings for. type: string windowType: type: string enum: - conversion - lookback - '' windowHours: type: number delayHours: type: number properPriorOverride: description: >- Must be true for the override to take effect. If true, the other proper prior settings in this object will be used if present. type: boolean properPriorEnabled: type: boolean properPriorMean: type: number properPriorStdDev: type: number regressionAdjustmentOverride: description: >- Must be true for the override to take effect. If true, the other regression adjustment settings in this object will be used if present. type: boolean regressionAdjustmentEnabled: type: boolean regressionAdjustmentDays: type: number required: - id additionalProperties: false defaultDashboardId: description: ID of the default dashboard for this experiment. type: string customFields: type: object propertyNames: type: string additionalProperties: type: string customMetricSlices: description: >- Custom slices that apply to ALL applicable metrics in the experiment type: array items: type: object properties: slices: type: array items: type: object properties: column: type: string levels: type: array items: type: string required: - column - levels additionalProperties: false required: - slices additionalProperties: false required: - trackingKey - name - variations additionalProperties: false responses: '200': content: application/json: schema: type: object properties: experiment: $ref: '#/components/schemas/Experiment' required: - experiment additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/experiments' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/experiments/{id}: get: operationId: getExperiment summary: Get a single experiment tags: - experiments parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: experiment: $ref: '#/components/schemas/ExperimentWithEnhancedStatus' required: - experiment additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/experiments/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: updateExperiment summary: Update a single experiment tags: - experiments parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: datasourceId: description: >- Can only be set if existing experiment does not have a datasource type: string assignmentQueryId: type: string trackingKey: type: string bypassDuplicateKeyCheck: description: >- 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. type: boolean name: description: Name of the experiment type: string type: type: string enum: - standard - multi-armed-bandit project: description: Project ID which the experiment belongs to type: string hypothesis: description: Hypothesis of the experiment type: string description: description: Description of the experiment type: string tags: type: array items: type: string metrics: type: array items: type: string secondaryMetrics: type: array items: type: string guardrailMetrics: type: array items: type: string activationMetric: description: Users must convert on this metric before being included type: string segmentId: description: Only users in this segment will be included type: string queryFilter: description: WHERE clause to add to the default experiment query type: string owner: description: >- 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. type: string archived: type: boolean status: type: string enum: - draft - running - stopped autoRefresh: type: boolean hashAttribute: type: string fallbackAttribute: type: string hashVersion: anyOf: - type: number const: 1 - type: number const: 2 disableStickyBucketing: type: boolean bucketVersion: type: number minBucketVersion: type: number results: description: >- The result status of the experiment. Maps to resultSummary.status in the GET response. type: string enum: - dnf - won - lost - inconclusive winner: description: >- The index of the winning variation (0-indexed). Maps to resultSummary.winner (variation ID) in the GET response. type: number analysis: description: >- Analysis summary or conclusions for the experiment. Maps to resultSummary.conclusions in the GET response. type: string releasedVariationId: description: >- The ID of the released variation. Maps to resultSummary.releasedVariationId in the GET response. type: string excludeFromPayload: description: >- If true, the experiment is excluded from the SDK payload. Maps to resultSummary.excludeFromPayload in the GET response. type: boolean inProgressConversions: type: string enum: - loose - strict attributionModel: description: >- Setting attribution model to `"experimentDuration"` is the same as selecting "Ignore Conversion Windows" for the Conversion Window Override. Setting it to `"lookbackOverride"` requires a `lookbackOverride` object to be provided. type: string enum: - firstExposure - experimentDuration - lookbackOverride lookbackOverride: description: >- Controls the lookback override for the experiment. For type "window", value must be a non-negative number and valueUnit is required. type: object properties: type: type: string enum: - date - window value: description: >- For "window" type - non-negative numeric value (e.g. 7 for 7 days). For "date" type a date string. anyOf: - description: >- For "window" type - non-negative numeric value (e.g. 7 for 7 days). For "date" type a date string. type: number - format: date-time description: >- For "window" type - non-negative numeric value (e.g. 7 for 7 days). For "date" type a date string. type: string valueUnit: description: Used when type is "window". Defaults to "days". type: string enum: - minutes - hours - days - weeks required: - type - value additionalProperties: false statsEngine: type: string enum: - bayesian - frequentist variations: minItems: 2 type: array items: type: object properties: id: type: string key: type: string name: type: string description: type: string screenshots: type: array items: type: object properties: path: type: string width: type: number height: type: number description: type: string required: - path additionalProperties: false required: - key - name additionalProperties: false phases: type: array items: type: object properties: name: type: string dateStarted: format: date-time type: string dateEnded: format: date-time type: string reasonForStopping: type: string seed: type: string coverage: type: number trafficSplit: deprecated: true description: Deprecated and unused. Use variationWeights instead. type: array items: type: object properties: variationId: type: string weight: type: number required: - variationId - weight additionalProperties: false namespace: type: object properties: namespaceId: type: string range: minItems: 2 maxItems: 2 type: array items: type: number enabled: type: boolean required: - namespaceId - range additionalProperties: false targetingCondition: type: string prerequisites: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false reason: type: string condition: type: string savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false variationWeights: type: array items: type: number required: - name - dateStarted additionalProperties: false regressionAdjustmentEnabled: description: >- Controls whether regression adjustment (CUPED) is enabled for experiment analyses type: boolean sequentialTestingEnabled: description: Only applicable to frequentist analyses type: boolean sequentialTestingTuningParameter: type: number shareLevel: type: string enum: - public - organization banditScheduleValue: type: number banditScheduleUnit: type: string enum: - days - hours banditBurnInValue: type: number banditBurnInUnit: type: string enum: - days - hours banditConversionWindowValue: type: number banditConversionWindowUnit: type: string enum: - days - hours postStratificationEnabled: description: When null, the organization default is used. anyOf: - description: When null, the organization default is used. type: boolean - description: When null, the organization default is used. type: 'null' decisionFrameworkSettings: description: >- Controls the decision framework and metric overrides for the experiment. Replaces the entire stored object on update (does not patch individual fields). type: object properties: decisionCriteriaId: type: string decisionFrameworkMetricOverrides: type: array items: type: object properties: id: description: ID of the metric to override settings for. type: string targetMDE: description: >- The target relative MDE to use for the metric, expressed as proportions (e.g. use 0.1 for 10%). Must be greater than 0. type: number exclusiveMinimum: 0 required: - id additionalProperties: false additionalProperties: false metricOverrides: description: >- Per-metric analysis overrides for this experiment. Replaces the entire stored array (does not patch individual entries). type: array items: description: >- Per-metric analysis overrides stored on the experiment (matches internal metricOverrides). type: object properties: id: description: ID of the metric to override settings for. type: string windowType: type: string enum: - conversion - lookback - '' windowHours: type: number delayHours: type: number properPriorOverride: description: >- Must be true for the override to take effect. If true, the other proper prior settings in this object will be used if present. type: boolean properPriorEnabled: type: boolean properPriorMean: type: number properPriorStdDev: type: number regressionAdjustmentOverride: description: >- Must be true for the override to take effect. If true, the other regression adjustment settings in this object will be used if present. type: boolean regressionAdjustmentEnabled: type: boolean regressionAdjustmentDays: type: number required: - id additionalProperties: false defaultDashboardId: description: ID of the default dashboard for this experiment. type: string customFields: type: object propertyNames: type: string additionalProperties: type: string customMetricSlices: description: >- Custom slices that apply to ALL applicable metrics in the experiment type: array items: type: object properties: slices: type: array items: type: object properties: column: type: string levels: type: array items: type: string required: - column - levels additionalProperties: false required: - slices additionalProperties: false additionalProperties: false responses: '200': content: application/json: schema: type: object properties: experiment: $ref: '#/components/schemas/Experiment' required: - experiment additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/experiments/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/experiments/{id}/results: get: operationId: getExperimentResults summary: Get results for an experiment tags: - experiments parameters: - $ref: '#/components/parameters/id' - $ref: '#/components/parameters/phase' - $ref: '#/components/parameters/dimension' responses: '200': content: application/json: schema: type: object properties: result: $ref: '#/components/schemas/ExperimentResults' required: - result additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/experiments/{id}/results' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/experiments/{id}/start: post: operationId: postExperimentStart summary: Start an experiment tags: - experiments parameters: - $ref: '#/components/parameters/id' requestBody: required: false content: application/json: schema: type: object properties: skipChecklist: description: >- If true, skips validating the experiment satisifies all pre-launch checklist items type: boolean additionalProperties: false responses: '200': content: application/json: schema: type: object properties: experiment: $ref: '#/components/schemas/ExperimentWithEnhancedStatus' required: - experiment additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/experiments/exp_abc123/start' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/experiments/{id}/stop: post: operationId: postExperimentStop summary: Stop an experiment tags: - experiments parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: results: description: The experiment conclusion status. type: string enum: - dnf - won - lost - inconclusive enableTemporaryRollout: description: >- If true, include this stopped experiment in SDK payload and force the release variation (`releasedVariationId`) to all traffic. type: boolean releasedVariationId: description: >- Required if enableTemporaryRollout is true. Variation ID (e.g. var_abc123) to release to 100% of traffic eligible for this experiment. type: string winnerVariationId: description: >- 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. type: string analysis: description: >- Optional markdown summary displayed on the experiment results page. type: string reason: description: >- Optional reason for ending the phase stored on the latest phase metadata. type: string dateEnded: description: >- Optional ISO datetime for ending the latest phase. Defaults to the current date and time. type: string required: - results additionalProperties: false responses: '200': content: application/json: schema: type: object properties: experiment: $ref: '#/components/schemas/ExperimentWithEnhancedStatus' required: - experiment additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/experiments/exp_abc123/stop' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"results":"won","releasedVariationId":"var_treatment","winnerVariationId":"var_treatment","enableTemporaryRollout":true,"analysis":"Reached desired sample size with statistically significant positive lift; shipping treatment"}' /v1/experiments/{id}/modify-temporary-rollout: post: operationId: postExperimentModifyTemporaryRollout summary: Modify temporary rollout status for a stopped experiment tags: - experiments parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: enableTemporaryRollout: description: >- 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. type: boolean releasedVariationId: description: >- Variation ID (e.g. var_abc123) to release to 100% of traffic eligible for this experiment. Required if enableTemporaryRollout is true. type: string required: - enableTemporaryRollout additionalProperties: false responses: '200': content: application/json: schema: type: object properties: experiment: $ref: '#/components/schemas/ExperimentWithEnhancedStatus' required: - experiment additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/experiments/exp_abc123/modify-temporary-rollout' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"enableTemporaryRollout":false}' /v1/experiments/{id}/snapshot: post: operationId: postExperimentSnapshot summary: Create Experiment Snapshot tags: - experiments - snapshots parameters: - name: id in: path required: true description: The experiment id of the experiment to update schema: description: The experiment id of the experiment to update type: string requestBody: required: false content: application/json: schema: type: object properties: triggeredBy: description: >- Set to "schedule" if you want this request to trigger notifications and other events as it if were a scheduled update. Defaults to manual. type: string enum: - manual - schedule dimension: description: >- Dimension to break results down by. For Unit Dimensions, use the dimension id (e.g. "dim_abc123"). For Experiment Dimensions, use "exp:" (e.g. "exp:country"). Built-in pre-exposure dimensions include "pre:date" and, when configured, "pre:activation". Omit this field to create a standard snapshot. type: string phase: description: >- Zero-based phase index to snapshot, where 0 is the first experiment phase. Defaults to the latest phase. type: integer minimum: 0 additionalProperties: false responses: '200': content: application/json: schema: type: object properties: snapshot: $ref: '#/components/schemas/snapshot' required: - snapshot additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/experiments/{id}/snapshot' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"triggeredBy":"schedule"}' /v1/experiments/{id}/variation/{variationId}/screenshot/upload: post: operationId: postVariationImageUpload summary: Upload a variation screenshot tags: - experiments parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/variationId' requestBody: required: true content: application/json: schema: type: object properties: screenshot: contentEncoding: base64 description: Base64-encoded screenshot data type: string contentType: description: MIME type of the screenshot type: string enum: - image/png - image/jpeg - image/gif description: description: Optional description for the screenshot type: string required: - screenshot - contentType additionalProperties: false responses: '200': content: application/json: schema: type: object properties: screenshot: $ref: '#/components/schemas/screenshot' required: - screenshot additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/experiments/{id}/variation/{variationId}/screenshot/upload' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/experiments/{id}/variation/{variationId}/screenshot: delete: operationId: deleteVariationScreenshot summary: Delete a variation screenshot tags: - experiments parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/variationId' requestBody: required: true content: application/json: schema: type: object properties: path: description: The screenshot path/URL to delete (from upload response) type: string required: - path additionalProperties: false responses: '200': description: Screenshot deleted successfully content: application/json: schema: type: object properties: {} additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/experiments/{id}/variation/{variationId}/screenshot' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/experiment-names: get: operationId: getExperimentNames summary: Get a list of experiments with names and ids tags: - experiments parameters: - $ref: '#/components/parameters/projectId' responses: '200': content: application/json: schema: type: object properties: experiments: type: array items: $ref: '#/components/schemas/experiments' required: - experiments additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/experiment-names' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/experiments/{id}/visual-changesets: get: operationId: listVisualChangesets summary: Get all visual changesets tags: - visual-changesets parameters: - name: id in: path required: true description: The experiment id the visual changesets belong to schema: description: The experiment id the visual changesets belong to type: string responses: '200': content: application/json: schema: type: object properties: visualChangesets: type: array items: $ref: '#/components/schemas/VisualChangeset' required: - visualChangesets additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/experiments/abc123/visual-changesets' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postVisualChangesets summary: Create a visual changeset for an experiment tags: - visual-changesets parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: editorUrl: description: >- URL of the page opened in the visual editor when creating this changeset type: string urlPatterns: description: >- URL patterns that determine which pages this visual changeset applies to type: array items: type: object properties: include: type: boolean type: type: string enum: - simple - regex pattern: type: string required: - type - pattern additionalProperties: false required: - editorUrl - urlPatterns additionalProperties: false responses: '200': content: application/json: schema: type: object properties: visualChangeset: $ref: '#/components/schemas/VisualChangeset' required: - visualChangeset additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/experiments/abc123/visual-changesets' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"editorUrl":"https://example.com/","urlPatterns":[{"type":"simple","pattern":"/","include":true}]}' /v1/snapshots/{id}: get: operationId: getExperimentSnapshot summary: Get an experiment snapshot status tags: - snapshots parameters: - name: id in: path required: true description: The id of the requested resource (a snapshot ID, not experiment ID) schema: description: >- The id of the requested resource (a snapshot ID, not experiment ID) type: string responses: '200': content: application/json: schema: type: object properties: snapshot: $ref: '#/components/schemas/snapshot' required: - snapshot additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/snapshots/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/metrics: get: operationId: listMetrics summary: Get all metrics tags: - metrics parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/projectId' - $ref: '#/components/parameters/datasourceId' responses: '200': content: application/json: schema: allOf: - type: object properties: metrics: type: array items: $ref: '#/components/schemas/Metric' required: - metrics additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/metrics' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postMetric summary: Create a single metric tags: - metrics requestBody: required: true content: application/json: schema: type: object properties: datasourceId: description: ID for the [DataSource](#tag/DataSource_model) type: string managedBy: description: >- 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. type: string enum: - '' - api owner: description: >- 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. type: string name: description: Name of the metric type: string description: description: Description of the metric type: string type: description: >- Type of metric. See [Metrics documentation](/app/metrics/legacy) type: string enum: - binomial - count - duration - revenue tags: description: List of tags type: array items: type: string projects: description: List of project IDs for projects that can access this metric type: array items: type: string archived: type: boolean behavior: type: object properties: goal: type: string enum: - increase - decrease cappingSettings: description: Controls how outliers are handled type: object properties: type: anyOf: - type: string enum: - none - absolute - percentile - type: 'null' value: description: >- When type is absolute, this is the absolute value. When type is percentile, this is the percentile value (from 0.0 to 1.0). type: number ignoreZeros: description: >- If true and capping is `percentile`, zeros will be ignored when calculating the percentile. type: boolean required: - type additionalProperties: false cap: deprecated: true description: >- (deprecated, use cappingSettings instead) This should be non-negative type: number minimum: 0 capping: deprecated: true description: >- (deprecated, use cappingSettings instead) Used in conjunction with `capValue` to set the capping (winsorization). Do not specify or set to null for no capping. "absolute" will cap user values at the `capValue` if it is greater than 0. "percentile" will cap user values at the percentile of user values in an experiment using the `capValue` for the percentile, if greater than 0.
If `behavior.capping` is non-null, you must specify `behavior.capValue`. anyOf: - type: string enum: - absolute - percentile - type: 'null' capValue: deprecated: true description: >- (deprecated, use cappingSettings instead) This should be non-negative.
Must specify `behavior.capping` when setting `behavior.capValue`. type: number minimum: 0 windowSettings: description: Controls the conversion window for the metric type: object properties: type: type: string enum: - none - conversion - lookback delayHours: deprecated: true description: >- Wait this many hours after experiment exposure before counting conversions. Ignored if delayValue is set. type: number delayValue: description: >- Wait this long after experiment exposure before counting conversions. type: number delayUnit: description: Default `hours`. type: string enum: - minutes - hours - days - weeks windowValue: type: number windowUnit: type: string enum: - minutes - hours - days - weeks required: - type additionalProperties: false conversionWindowStart: deprecated: true description: >- The start of a Conversion Window relative to the exposure date, in hours. This is equivalent to the [Conversion Delay](/app/metrics/legacy/#conversion-delay).
Must specify both `behavior.conversionWindowStart` and `behavior.conversionWindowEnd` or neither. type: number conversionWindowEnd: deprecated: true description: >- The end of a [Conversion Window](/app/metrics/legacy/#conversion-window) relative to the exposure date, in hours. This is equivalent to the [Conversion Delay](/app/metrics/legacy/#conversion-delay) + Conversion Window Hours settings in the UI. In other words, if you want a 48 hour window starting after 24 hours, you would set conversionWindowStart to 24 and conversionWindowEnd to 72 (24+48).
Must specify both `behavior.conversionWindowStart` and `behavior.conversionWindowEnd` or neither. type: number priorSettings: description: >- Controls the bayesian prior for the metric. If omitted, organization defaults will be used. type: object properties: override: description: >- If false, the organization default settings will be used instead of the other settings in this object type: boolean proper: description: >- If true, the `mean` and `stddev` will be used, otherwise we will use an improper flat prior. type: boolean mean: description: >- The mean of the prior distribution of relative effects in proportion terms (e.g. 0.01 is 1%) type: number stddev: description: >- Must be > 0. The standard deviation of the prior distribution of relative effects in proportion terms. type: number exclusiveMinimum: 0 required: - override - proper - mean - stddev additionalProperties: false riskThresholdSuccess: deprecated: true description: >- No longer used. Threshold for Risk to be considered low enough, as a proportion (e.g. put 0.0025 for 0.25%).
Must be a non-negative number and must not be higher than `riskThresholdDanger`. type: number minimum: 0 riskThresholdDanger: deprecated: true description: >- No longer used. Threshold for Risk to be considered too high, as a proportion (e.g. put 0.0125 for 1.25%).
Must be a non-negative number. type: number minimum: 0 minPercentChange: description: >- Minimum percent change to consider uplift significant, as a proportion (e.g. put 0.005 for 0.5%) type: number minimum: 0 maxPercentChange: description: >- Maximum percent change to consider uplift significant, as a proportion (e.g. put 0.5 for 50%) type: number minimum: 0 minSampleSize: type: number minimum: 0 targetMDE: description: >- 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. type: number minimum: 0 additionalProperties: false sql: description: >- Preferred way to define SQL. Only one of `sql`, `sqlBuilder` or `mixpanel` allowed, and at least one must be specified. type: object properties: identifierTypes: type: array items: type: string conversionSQL: type: string userAggregationSQL: description: >- Custom user level aggregation for your metric (default: `SUM(value)`) type: string denominatorMetricId: description: >- The metric ID for a [denominator metric for funnel and ratio metrics](/app/metrics/legacy/#denominator-ratio--funnel-metrics) type: string required: - identifierTypes - conversionSQL additionalProperties: false sqlBuilder: description: >- An alternative way to specify a SQL metric, rather than a full query. Using `sql` is preferred to `sqlBuilder`. Only one of `sql`, `sqlBuilder` or `mixpanel` allowed, and at least one must be specified. type: object properties: identifierTypeColumns: type: array items: type: object properties: identifierType: type: string columnName: type: string required: - identifierType - columnName additionalProperties: false tableName: type: string valueColumnName: type: string timestampColumnName: type: string conditions: type: array items: type: object properties: column: type: string operator: type: string value: type: string required: - column - operator - value additionalProperties: false required: - identifierTypeColumns - tableName - timestampColumnName additionalProperties: false mixpanel: description: >- Only use for MixPanel (non-SQL) Data Sources. Only one of `sql`, `sqlBuilder` or `mixpanel` allowed, and at least one must be specified. type: object properties: eventName: type: string eventValue: type: string userAggregation: type: string conditions: type: array items: type: object properties: property: type: string operator: type: string value: type: string required: - property - operator - value additionalProperties: false required: - eventName - userAggregation additionalProperties: false required: - datasourceId - name - type additionalProperties: false responses: '200': content: application/json: schema: type: object properties: metric: $ref: '#/components/schemas/Metric' required: - metric additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/metrics' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/metrics/{id}: get: operationId: getMetric summary: Get a single metric tags: - metrics parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: metric: $ref: '#/components/schemas/Metric' required: - metric additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/metrics/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' put: operationId: putMetric summary: Update a metric tags: - metrics parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: managedBy: description: >- 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. type: string enum: - '' - api - admin owner: description: >- 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. type: string name: description: Name of the metric type: string description: description: Description of the metric type: string type: description: >- Type of metric. See [Metrics documentation](/app/metrics/legacy) type: string enum: - binomial - count - duration - revenue tags: description: List of tags type: array items: type: string projects: description: List of project IDs for projects that can access this metric type: array items: type: string archived: type: boolean behavior: type: object properties: goal: type: string enum: - increase - decrease cappingSettings: description: Controls how outliers are handled type: object properties: type: anyOf: - type: string enum: - none - absolute - percentile - type: 'null' value: description: >- When type is absolute, this is the absolute value. When type is percentile, this is the percentile value (from 0.0 to 1.0). type: number ignoreZeros: description: >- If true and capping is `percentile`, zeros will be ignored when calculating the percentile. type: boolean required: - type additionalProperties: false cap: deprecated: true description: >- (deprecated, use cappingSettings instead) This should be non-negative type: number minimum: 0 capping: deprecated: true description: >- (deprecated, use cappingSettings instead) Used in conjunction with `capValue` to set the capping (winsorization). Do not specify or set to null for no capping. "absolute" will cap user values at the `capValue` if it is greater than 0. "percentile" will cap user values at the percentile of user values in an experiment using the `capValue` for the percentile, if greater than 0.
If `behavior.capping` is non-null, you must specify `behavior.capValue`. anyOf: - type: string enum: - absolute - percentile - type: 'null' capValue: deprecated: true description: >- (deprecated, use cappingSettings instead) This should be non-negative.
Must specify `behavior.capping` when setting `behavior.capValue`. type: number minimum: 0 windowSettings: description: Controls the conversion window for the metric type: object properties: type: type: string enum: - none - conversion - lookback delayHours: deprecated: true description: >- Wait this many hours after experiment exposure before counting conversions. Ignored if delayValue is set. type: number delayValue: description: >- Wait this long after experiment exposure before counting conversions. type: number delayUnit: description: Default `hours`. type: string enum: - minutes - hours - days - weeks windowValue: type: number windowUnit: type: string enum: - minutes - hours - days - weeks required: - type additionalProperties: false conversionWindowStart: deprecated: true description: >- The start of a Conversion Window relative to the exposure date, in hours. This is equivalent to the [Conversion Delay](/app/metrics/legacy/#conversion-delay).
Must specify both `behavior.conversionWindowStart` and `behavior.conversionWindowEnd` or neither. type: number conversionWindowEnd: deprecated: true description: >- The end of a [Conversion Window](/app/metrics/legacy/#conversion-window) relative to the exposure date, in hours. This is equivalent to the [Conversion Delay](/app/metrics/legacy/#conversion-delay) + Conversion Window Hours settings in the UI. In other words, if you want a 48 hour window starting after 24 hours, you would set conversionWindowStart to 24 and conversionWindowEnd to 72 (24+48).
Must specify both `behavior.conversionWindowStart` and `behavior.conversionWindowEnd` or neither. type: number priorSettings: description: >- Controls the bayesian prior for the metric. If omitted, organization defaults will be used. type: object properties: override: description: >- If false, the organization default settings will be used instead of the other settings in this object type: boolean proper: description: >- If true, the `mean` and `stddev` will be used, otherwise we will use an improper flat prior. type: boolean mean: description: >- The mean of the prior distribution of relative effects in proportion terms (e.g. 0.01 is 1%) type: number stddev: description: >- Must be > 0. The standard deviation of the prior distribution of relative effects in proportion terms. type: number exclusiveMinimum: 0 required: - override - proper - mean - stddev additionalProperties: false riskThresholdSuccess: deprecated: true description: >- No longer used. Threshold for Risk to be considered low enough, as a proportion (e.g. put 0.0025 for 0.25%).
Must be a non-negative number and must not be higher than `riskThresholdDanger`. type: number minimum: 0 riskThresholdDanger: deprecated: true description: >- No longer used. Threshold for Risk to be considered too high, as a proportion (e.g. put 0.0125 for 1.25%).
Must be a non-negative number. type: number minimum: 0 minPercentChange: description: >- Minimum percent change to consider uplift significant, as a proportion (e.g. put 0.005 for 0.5%) type: number minimum: 0 maxPercentChange: description: >- Maximum percent change to consider uplift significant, as a proportion (e.g. put 0.5 for 50%) type: number minimum: 0 minSampleSize: type: number minimum: 0 targetMDE: description: >- 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. type: number minimum: 0 additionalProperties: false sql: description: >- Preferred way to define SQL. Only one of `sql`, `sqlBuilder` or `mixpanel` allowed. type: object properties: identifierTypes: type: array items: type: string conversionSQL: type: string userAggregationSQL: description: >- Custom user level aggregation for your metric (default: `SUM(value)`) type: string denominatorMetricId: description: >- The metric ID for a [denominator metric for funnel and ratio metrics](/app/metrics/legacy/#denominator-ratio--funnel-metrics) type: string additionalProperties: false sqlBuilder: description: >- An alternative way to specify a SQL metric, rather than a full query. Using `sql` is preferred to `sqlBuilder`. Only one of `sql`, `sqlBuilder` or `mixpanel` allowed type: object properties: identifierTypeColumns: type: array items: type: object properties: identifierType: type: string columnName: type: string required: - identifierType - columnName additionalProperties: false tableName: type: string valueColumnName: type: string timestampColumnName: type: string conditions: type: array items: type: object properties: column: type: string operator: type: string value: type: string required: - column - operator - value additionalProperties: false additionalProperties: false mixpanel: description: >- Only use for MixPanel (non-SQL) Data Sources. Only one of `sql`, `sqlBuilder` or `mixpanel` allowed. type: object properties: eventName: type: string eventValue: type: string userAggregation: type: string conditions: type: array items: type: object properties: property: type: string operator: type: string value: type: string required: - property - operator - value additionalProperties: false additionalProperties: false additionalProperties: false responses: '200': content: application/json: schema: type: object properties: updatedId: type: string required: - updatedId additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X PUT 'https://api.growthbook.io/api/v1/metrics/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"name":"net revenue","description":"revenue minus lacroix spend"}' delete: operationId: deleteMetric summary: Deletes a metric tags: - metrics parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: deletedId: type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X DELETE 'https://api.growthbook.io/api/v1/metrics/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/usage/metrics: get: operationId: getMetricUsage summary: Get metric usage across experiments description: > 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. tags: - usage parameters: - name: ids in: query required: true description: >- List of comma-separated metric IDs (both fact and legacy) to get usage for, e.g. ids=met_123,fact_456 schema: description: >- List of comma-separated metric IDs (both fact and legacy) to get usage for, e.g. ids=met_123,fact_456 type: string responses: '200': content: application/json: schema: type: object properties: metricUsage: type: array items: $ref: '#/components/schemas/MetricUsage' required: - metricUsage additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/usage/metrics' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/segments: get: operationId: listSegments summary: Get all segments tags: - segments parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/datasourceId' responses: '200': content: application/json: schema: allOf: - type: object properties: segments: type: array items: $ref: '#/components/schemas/Segment' required: - segments additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/segments' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postSegment summary: Create a single segment tags: - segments requestBody: required: true content: application/json: schema: type: object properties: name: description: Name of the segment type: string owner: description: >- 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. type: string description: description: Description of the segment type: string datasourceId: description: ID of the datasource this segment belongs to type: string identifierType: description: Type of identifier (user, anonymous, etc.) type: string projects: description: >- List of project IDs for projects that can access this segment type: array items: type: string managedBy: description: >- Where this Segment must be managed from. If not set (empty string), it can be managed from anywhere. type: string enum: - '' - api type: description: >- 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. type: string enum: - SQL - FACT query: description: >- SQL query that defines the Segment. This is required for SQL segments. type: string factTableId: description: >- ID of the fact table this segment belongs to. This is required for FACT segments. type: string filters: description: >- Optional array of fact table filter ids that can further define the Fact Table based Segment. type: array items: type: string required: - name - datasourceId - identifierType - type additionalProperties: false responses: '200': content: application/json: schema: type: object properties: segment: $ref: '#/components/schemas/Segment' required: - segment additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/segments' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"name":"Annual Subscribers","datasourceId":"ds_123abc","identifierType":"user_id","type":"SQL","query":"SELECT plan FROM subscribers WHERE plan = "}' /v1/segments/{id}: get: operationId: getSegment summary: Get a single segment tags: - segments parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: segment: $ref: '#/components/schemas/Segment' required: - segment additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/segments/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: updateSegment summary: Update a single segment tags: - segments parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: name: description: Name of the segment type: string owner: description: >- 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. type: string description: description: Description of the segment type: string datasourceId: description: ID of the datasource this segment belongs to type: string identifierType: description: Type of identifier (user, anonymous, etc.) type: string projects: description: >- List of project IDs for projects that can access this segment type: array items: type: string managedBy: description: >- Where this Segment must be managed from. If not set (empty string), it can be managed from anywhere. type: string enum: - '' - api type: description: >- 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. type: string enum: - SQL - FACT query: description: >- SQL query that defines the Segment. This is required for SQL segments. type: string factTableId: description: >- ID of the fact table this segment belongs to. This is required for FACT segments. type: string filters: description: >- Optional array of fact table filter ids that can further define the Fact Table based Segment. type: array items: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: segment: $ref: '#/components/schemas/Segment' required: - segment additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/segments/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"name":"User Region"}' delete: operationId: deleteSegment summary: Deletes a single segment tags: - segments parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: deletedId: description: The ID of the deleted segment example: seg_123abc type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X DELETE 'https://api.growthbook.io/api/v1/segments/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/dimensions: get: operationId: listDimensions summary: Get all dimensions tags: - dimensions parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/datasourceId' responses: '200': content: application/json: schema: allOf: - type: object properties: dimensions: type: array items: $ref: '#/components/schemas/Dimension' required: - dimensions additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/dimensions' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postDimension summary: Create a single dimension tags: - dimensions requestBody: required: true content: application/json: schema: type: object properties: name: description: Name of the dimension type: string description: description: Description of the dimension type: string owner: description: >- 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. type: string datasourceId: description: ID of the datasource this dimension belongs to type: string identifierType: description: Type of identifier (user, anonymous, etc.) type: string query: description: SQL query or equivalent for the dimension type: string managedBy: description: >- Where this dimension must be managed from. If not set (empty string), it can be managed from anywhere. type: string enum: - '' - api required: - name - datasourceId - identifierType - query additionalProperties: false responses: '200': content: application/json: schema: type: object properties: dimension: $ref: '#/components/schemas/Dimension' required: - dimension additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/dimensions' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"name":"User Country","datasourceId":"ds_123abc","identifierType":"user","query":"SELECT country FROM users"}' /v1/dimensions/{id}: get: operationId: getDimension summary: Get a single dimension tags: - dimensions parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: dimension: $ref: '#/components/schemas/Dimension' required: - dimension additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/dimensions/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: updateDimension summary: Update a single dimension tags: - dimensions parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: name: description: Name of the dimension type: string description: description: Description of the dimension type: string owner: description: >- 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. type: string datasourceId: description: ID of the datasource this dimension belongs to type: string identifierType: description: Type of identifier (user, anonymous, etc.) type: string query: description: SQL query or equivalent for the dimension type: string managedBy: description: >- Where this dimension must be managed from. If not set (empty string), it can be managed from anywhere. type: string enum: - '' - api additionalProperties: false responses: '200': content: application/json: schema: type: object properties: dimension: $ref: '#/components/schemas/Dimension' required: - dimension additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/dimensions/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"name":"User Region"}' delete: operationId: deleteDimension summary: Deletes a single dimension tags: - dimensions parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: deletedId: description: The ID of the deleted dimension example: dim_123abc type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/dimensions/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/projects: get: operationId: listProjects summary: Get all projects tags: - projects parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': content: application/json: schema: allOf: - type: object properties: projects: type: array items: $ref: '#/components/schemas/Project' required: - projects additionalProperties: false - type: object properties: limit: type: integer offset: type: integer count: type: integer total: type: integer hasMore: type: boolean nextOffset: anyOf: - type: integer - type: 'null' required: - limit - offset - count - total - hasMore - nextOffset additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/projects' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postProject summary: Create a single project tags: - projects requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: type: string publicId: description: >- URL-safe slug (lowercase letters, numbers, dashes). Auto-generated from name if not provided. type: string settings: description: >- Project stats settings that, when set, override the organization settings. type: object properties: statsEngine: description: Stats engine. type: string confidenceLevel: description: >- Bayesian chance-to-win threshold (stored as decimal, e.g. 0.95). type: number pValueThreshold: description: Frequentist p-value threshold (e.g. 0.05). type: number additionalProperties: false required: - name additionalProperties: false responses: '200': content: application/json: schema: type: object properties: project: $ref: '#/components/schemas/Project' required: - project additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/projects' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"name":"My Project","description":"Super cool project"}' /v1/projects/{id}: get: operationId: getProject summary: Get a single project tags: - projects parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: project: $ref: '#/components/schemas/Project' required: - project additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/projects/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' put: operationId: putProject summary: Edit a single project tags: - projects parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: name: description: Project name. type: string description: description: Project description. type: string publicId: description: URL-safe slug (lowercase letters, numbers, dashes). type: string settings: description: >- Project stats settings that, when set, override the organization settings. type: object properties: statsEngine: description: Stats engine. type: string confidenceLevel: description: >- Bayesian chance-to-win threshold (stored as decimal, e.g. 0.95). type: number pValueThreshold: description: Frequentist p-value threshold (e.g. 0.05). type: number additionalProperties: false additionalProperties: false responses: '200': content: application/json: schema: type: object properties: project: $ref: '#/components/schemas/Project' required: - project additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X PUT 'https://api.growthbook.io/api/v1/projects/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"name":"My Subsidiary"}' delete: operationId: deleteProject summary: Deletes a single project tags: - projects parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: deletedId: description: The ID of the deleted project example: prj__123abc type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X DELETE 'https://api.growthbook.io/api/v1/projects/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/environments: get: operationId: listEnvironments summary: Get the organization's environments tags: - environments responses: '200': content: application/json: schema: type: object properties: environments: type: array items: $ref: '#/components/schemas/Environment' required: - environments additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/environments' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postEnvironment summary: Create a new environment tags: - environments requestBody: required: true content: application/json: schema: type: object properties: id: description: The ID of the new environment type: string description: description: The description of the new environment type: string toggleOnList: description: Show on feature list page type: boolean defaultState: description: Default state for new features type: boolean projects: type: array items: type: string parent: description: >- An environment that the new environment should inherit feature rules from. Requires an enterprise license type: string required: - id additionalProperties: false responses: '200': content: application/json: schema: type: object properties: environment: $ref: '#/components/schemas/Environment' required: - environment additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/environments' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"id":"new-env","description":"My new environment"}' /v1/environments/{id}: put: operationId: putEnvironment summary: Update an environment tags: - environments parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: description: description: The description of the new environment type: string toggleOnList: description: Show on feature list page type: boolean defaultState: description: Default state for new features type: boolean projects: type: array items: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: environment: $ref: '#/components/schemas/Environment' required: - environment additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X PUT 'https://api.growthbook.io/api/v1/environments/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"description":"My updated environment"}' delete: operationId: deleteEnvironment summary: Deletes a single environment tags: - environments parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: deletedId: type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/environments/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/attributes: get: operationId: listAttributes summary: Get the organization's attributes tags: - attributes responses: '200': content: application/json: schema: type: object properties: attributes: type: array items: $ref: '#/components/schemas/Attribute' required: - attributes additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/attributes' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postAttribute summary: Create a new attribute tags: - attributes requestBody: required: true content: application/json: schema: type: object properties: property: description: The attribute property type: string datatype: description: The attribute datatype type: string enum: - boolean - string - number - secureString - enum - string[] - number[] - secureString[] description: description: The description of the new attribute type: string archived: description: The attribute is archived type: boolean hashAttribute: description: Shall the attribute be hashed type: boolean enum: type: string format: description: The attribute's format type: string enum: - '' - version - date - isoCountryCode projects: type: array items: type: string tags: type: array items: type: string required: - property - datatype additionalProperties: false responses: '200': content: application/json: schema: type: object properties: attribute: $ref: '#/components/schemas/Attribute' required: - attribute additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/attributes' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"property":"foo","datatype":"boolean","description":"My new attribute"}' /v1/attributes/{property}: put: operationId: putAttribute summary: Update an attribute tags: - attributes parameters: - $ref: '#/components/parameters/property' requestBody: required: true content: application/json: schema: type: object properties: datatype: description: The attribute datatype type: string enum: - boolean - string - number - secureString - enum - string[] - number[] - secureString[] description: description: The description of the new attribute type: string archived: description: The attribute is archived type: boolean hashAttribute: description: Shall the attribute be hashed type: boolean enum: type: string format: description: The attribute's format type: string enum: - '' - version - date - isoCountryCode projects: type: array items: type: string tags: type: array items: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: attribute: $ref: '#/components/schemas/Attribute' required: - attribute additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X PUT 'https://api.growthbook.io/api/v1/attributes/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"description":"My updated attribute"}' delete: operationId: deleteAttribute summary: Deletes a single attribute tags: - attributes parameters: - $ref: '#/components/parameters/property' responses: '200': content: application/json: schema: type: object properties: deletedProperty: type: string required: - deletedProperty additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/attributes/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/sdk-connections: get: operationId: listSdkConnections summary: Get all sdk connections tags: - sdk-connections parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/projectId' - $ref: '#/components/parameters/withProxy' - $ref: '#/components/parameters/multiOrg' responses: '200': content: application/json: schema: allOf: - type: object properties: connections: type: array items: $ref: '#/components/schemas/SdkConnection' required: - connections additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/sdk-connections' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postSdkConnection summary: Create a single sdk connection tags: - sdk-connections requestBody: required: true content: application/json: schema: type: object properties: name: type: string language: type: string sdkVersion: type: string environment: type: string projects: type: array items: type: string encryptPayload: type: boolean includeVisualExperiments: type: boolean includeDraftExperiments: type: boolean includeExperimentNames: type: boolean includeRedirectExperiments: type: boolean includeRuleIds: type: boolean includeProjectIdInMetadata: type: boolean includeCustomFieldsInMetadata: type: boolean allowedCustomFieldsInMetadata: type: array items: type: string includeTagsInMetadata: type: boolean proxyEnabled: type: boolean proxyHost: type: string hashSecureAttributes: type: boolean remoteEvalEnabled: type: boolean savedGroupReferencesEnabled: type: boolean required: - name - language - environment additionalProperties: false responses: '200': content: application/json: schema: type: object properties: sdkConnection: $ref: '#/components/schemas/SdkConnection' required: - sdkConnection additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/sdk-connections' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/sdk-connections/{id}: get: operationId: getSdkConnection summary: Get a single sdk connection tags: - sdk-connections parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: sdkConnection: $ref: '#/components/schemas/SdkConnection' required: - sdkConnection additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/sdk-connections/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' put: operationId: putSdkConnection summary: Update a single sdk connection tags: - sdk-connections parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: name: type: string language: type: string sdkVersion: type: string environment: type: string projects: type: array items: type: string encryptPayload: type: boolean includeVisualExperiments: type: boolean includeDraftExperiments: type: boolean includeExperimentNames: type: boolean includeRedirectExperiments: type: boolean includeRuleIds: type: boolean includeProjectIdInMetadata: type: boolean includeCustomFieldsInMetadata: type: boolean allowedCustomFieldsInMetadata: type: array items: type: string includeTagsInMetadata: type: boolean proxyEnabled: type: boolean proxyHost: type: string hashSecureAttributes: type: boolean remoteEvalEnabled: type: boolean savedGroupReferencesEnabled: type: boolean additionalProperties: false responses: '200': content: application/json: schema: type: object properties: sdkConnection: $ref: '#/components/schemas/SdkConnection' required: - sdkConnection additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v1/sdk-connections/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' delete: operationId: deleteSdkConnection summary: Deletes a single SDK connection tags: - sdk-connections parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: deletedId: type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/sdk-connections/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/sdk-connections/lookup/{key}: get: operationId: lookupSdkConnectionByKey summary: Find a single sdk connection by its key tags: - sdk-connections parameters: - $ref: '#/components/parameters/key' responses: '200': content: application/json: schema: type: object properties: sdkConnection: $ref: '#/components/schemas/SdkConnection' required: - sdkConnection additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/sdk-connections/lookup/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/data-sources: get: operationId: listDataSources summary: Get all data sources tags: - data-sources parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/projectId' responses: '200': content: application/json: schema: allOf: - type: object properties: dataSources: type: array items: $ref: '#/components/schemas/DataSource' required: - dataSources additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/data-sources' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/data-sources/{id}: get: operationId: getDataSource summary: Get a single data source tags: - data-sources parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: dataSource: $ref: '#/components/schemas/DataSource' required: - dataSource additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/data-sources/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/data-sources/{dataSourceId}/information-schema: get: operationId: getInformationSchema summary: Get a Data Source's Information Schema description: >- 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. tags: - data-sources parameters: - $ref: '#/components/parameters/dataSourceId' responses: '200': content: application/json: schema: type: object properties: informationSchema: $ref: '#/components/schemas/InformationSchema' required: - informationSchema additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/data-sources/{dataSourceId}/information-schema' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/visual-changesets/{id}: get: operationId: getVisualChangeset summary: Get a single visual changeset tags: - visual-changesets parameters: - $ref: '#/components/parameters/id' - $ref: '#/components/parameters/includeExperiment' responses: '200': content: application/json: schema: type: object properties: visualChangeset: $ref: '#/components/schemas/VisualChangeset' experiment: $ref: '#/components/schemas/Experiment' required: - visualChangeset additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/visual-changesets/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' put: operationId: putVisualChangeset summary: Update a visual changeset tags: - visual-changesets parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: nModified: type: number visualChangeset: $ref: '#/components/schemas/VisualChangeset' required: - nModified - visualChangeset additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v1/visual-changesets/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/visual-changesets/{id}/visual-change: post: operationId: postVisualChange summary: Create a visual change for a visual changeset tags: - visual-changesets parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: nModified: type: number required: - nModified additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/visual-changesets/{id}/visual-change' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/visual-changesets/{id}/visual-change/{visualChangeId}: put: operationId: putVisualChange summary: Update a visual change for a visual changeset tags: - visual-changesets parameters: - $ref: '#/components/parameters/id' - $ref: '#/components/parameters/visualChangeId' responses: '200': content: application/json: schema: type: object properties: nModified: type: number required: - nModified additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v1/visual-changesets/{id}/visual-change/{visualChangeId}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/saved-groups: get: operationId: listSavedGroups summary: Get all saved group tags: - saved-groups parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': content: application/json: schema: allOf: - type: object properties: savedGroups: type: array items: $ref: '#/components/schemas/SavedGroup' required: - savedGroups additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/saved-groups' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postSavedGroup summary: Create a single saved group tags: - saved-groups requestBody: required: true content: application/json: schema: type: object properties: name: description: The display name of the Saved Group type: string type: description: >- The type of Saved Group (inferred from other arguments if missing) type: string enum: - condition - list condition: description: >- When type = 'condition', this is the JSON-encoded condition for the group type: string attributeKey: description: >- When type = 'list', this is the attribute key the group is based on type: string values: description: >- When type = 'list', this is the list of values for the attribute key type: array items: type: string owner: description: >- 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. type: string projects: type: array items: type: string required: - name additionalProperties: false responses: '200': content: application/json: schema: type: object properties: savedGroup: $ref: '#/components/schemas/SavedGroup' required: - savedGroup additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/saved-groups' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"name":"interal-users","values":["userId-123","userId-345","userId-678"],"attributeKey":"userId","owner":""}' /v1/saved-groups/{id}: get: operationId: getSavedGroup summary: Get a single saved group tags: - saved-groups parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: savedGroup: $ref: '#/components/schemas/SavedGroup' required: - savedGroup additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/saved-groups/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: updateSavedGroup summary: Partially update a single saved group tags: - saved-groups parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: name: description: The display name of the Saved Group type: string condition: description: >- When type = 'condition', this is the JSON-encoded condition for the group type: string values: description: >- When type = 'list', this is the list of values for the attribute key type: array items: type: string owner: description: >- 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. type: string projects: type: array items: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: savedGroup: $ref: '#/components/schemas/SavedGroup' required: - savedGroup additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/saved-groups/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"values":["userId-123","userId-345"]}' delete: operationId: deleteSavedGroup summary: Deletes a single saved group tags: - saved-groups parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: deletedId: type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/saved-groups/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/organizations: get: operationId: listOrganizations summary: >- Get all organizations (only for super admins on multi-org Enterprise Plan only) tags: - organizations parameters: - $ref: '#/components/parameters/search' - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': content: application/json: schema: allOf: - type: object properties: organizations: type: array items: $ref: '#/components/schemas/Organization' required: - organizations additionalProperties: false - type: object properties: limit: type: integer offset: type: integer count: type: integer total: type: integer hasMore: type: boolean nextOffset: anyOf: - type: integer - type: 'null' required: - limit - offset - count - total - hasMore - nextOffset additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/organizations' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postOrganization summary: >- Create a single organization (only for super admins on multi-org Enterprise Plan only) tags: - organizations requestBody: required: true content: application/json: schema: type: object properties: name: description: The name of the organization type: string externalId: description: >- An optional identifier that you use within your company for the organization type: string required: - name additionalProperties: false responses: '200': content: application/json: schema: type: object properties: organization: $ref: '#/components/schemas/Organization' required: - organization additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/organizations' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"name":"My Subsidiary"}' /v1/organizations/{id}: put: operationId: putOrganization summary: >- Edit a single organization (only for super admins on multi-org Enterprise Plan only) tags: - organizations parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: name: description: The name of the organization type: string externalId: description: >- An optional identifier that you use within your company for the organization type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: organization: $ref: '#/components/schemas/Organization' required: - organization additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v1/organizations/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"name":"My Subsidiary","externalId":"subsidiary-123"}' /v1/sdk-payload/{key}: get: operationId: getSdkPayload summary: Get a SDK payload parameters: - name: key in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: {} x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/sdk-payload/{key}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/fact-tables: get: operationId: listFactTables summary: Get all fact tables tags: - fact-tables parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/datasourceId' - $ref: '#/components/parameters/projectId' responses: '200': content: application/json: schema: allOf: - type: object properties: factTables: type: array items: $ref: '#/components/schemas/FactTable' required: - factTables additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/fact-tables' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postFactTable summary: Create a single fact table tags: - fact-tables requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: description: Description of the fact table type: string owner: description: >- 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. type: string projects: description: List of associated project ids type: array items: type: string tags: description: List of associated tags type: array items: type: string datasource: description: The datasource id type: string userIdTypes: description: >- List of identifier columns in this table. For example, "id" or "anonymous_id" type: array items: type: string sql: description: The SQL query for this fact table type: string eventName: description: The event name used in SQL template variables type: string managedBy: description: Set this to "api" to disable editing in the GrowthBook UI type: string enum: - '' - api - admin required: - name - datasource - userIdTypes - sql additionalProperties: false responses: '200': content: application/json: schema: type: object properties: factTable: $ref: '#/components/schemas/FactTable' required: - factTable additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/fact-tables' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"name":"Orders","datasource":"ds_abc123","userIdTypes":["id"],"sql":"SELECT * FROM orders"}' /v1/fact-tables/{id}: get: operationId: getFactTable summary: Get a single fact table tags: - fact-tables parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: factTable: $ref: '#/components/schemas/FactTable' required: - factTable additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/fact-tables/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: updateFactTable summary: Update a single fact table tags: - fact-tables parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: description: Description of the fact table type: string owner: description: >- 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. type: string projects: description: List of associated project ids type: array items: type: string tags: description: List of associated tags type: array items: type: string userIdTypes: description: >- List of identifier columns in this table. For example, "id" or "anonymous_id" type: array items: type: string sql: description: The SQL query for this fact table type: string eventName: description: The event name used in SQL template variables type: string columns: description: >- 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. type: array items: $ref: '#/components/schemas/FactTableColumn' columnsError: description: Error message if there was an issue parsing the SQL schema anyOf: - type: string - type: 'null' managedBy: description: Set this to "api" to disable editing in the GrowthBook UI type: string enum: - '' - api - admin archived: type: boolean additionalProperties: false responses: '200': content: application/json: schema: type: object properties: factTable: $ref: '#/components/schemas/FactTable' required: - factTable additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/fact-tables/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"name":"New Fact Table Name"}' delete: operationId: deleteFactTable summary: Deletes a single fact table tags: - fact-tables parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: deletedId: description: The ID of the deleted fact table example: ftb_123abc type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/fact-tables/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/fact-tables/{factTableId}/filters: get: operationId: listFactTableFilters summary: Get all filters for a fact table tags: - fact-tables parameters: - $ref: '#/components/parameters/factTableId' - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': content: application/json: schema: allOf: - type: object properties: factTableFilters: type: array items: $ref: '#/components/schemas/FactTableFilter' required: - factTableFilters additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/fact-tables/abc123/filters' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postFactTableFilter summary: Create a single fact table filter tags: - fact-tables parameters: - $ref: '#/components/parameters/factTableId' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: description: Description of the fact table filter type: string value: description: The SQL expression for this filter. example: country = 'US' type: string managedBy: description: >- 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" type: string enum: - '' - api required: - name - value additionalProperties: false responses: '200': content: application/json: schema: type: object properties: factTableFilter: $ref: '#/components/schemas/FactTableFilter' required: - factTableFilter additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/fact-tables/abc123/filters' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"name":"High Value Order","value":"amount>100"}' /v1/fact-tables/{factTableId}/filters/{id}: get: operationId: getFactTableFilter summary: Get a single fact filter tags: - fact-tables parameters: - $ref: '#/components/parameters/factTableId' - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: factTableFilter: $ref: '#/components/schemas/FactTableFilter' required: - factTableFilter additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/fact-tables/abc123/filters/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: updateFactTableFilter summary: Update a single fact table filter tags: - fact-tables parameters: - $ref: '#/components/parameters/factTableId' - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: description: Description of the fact table filter type: string value: description: The SQL expression for this filter. example: country = 'US' type: string managedBy: description: >- 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" type: string enum: - '' - api additionalProperties: false responses: '200': content: application/json: schema: type: object properties: factTableFilter: $ref: '#/components/schemas/FactTableFilter' required: - factTableFilter additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/fact-tables/abc123/filters/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"value":"amount > 50"}' delete: operationId: deleteFactTableFilter summary: Deletes a single fact table filter tags: - fact-tables parameters: - $ref: '#/components/parameters/factTableId' - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: deletedId: description: The ID of the deleted fact filter example: flt_123abc type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/fact-tables/abc123/filters/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/fact-metrics: get: operationId: listFactMetrics summary: Get all fact metrics tags: - fact-metrics parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/datasourceId' - $ref: '#/components/parameters/projectId' - name: factTableId in: query description: >- Filter by Fact Table Id (for ratio metrics, we only look at the numerator) schema: description: >- Filter by Fact Table Id (for ratio metrics, we only look at the numerator) type: string responses: '200': content: application/json: schema: allOf: - type: object properties: factMetrics: type: array items: $ref: '#/components/schemas/FactMetric' required: - factMetrics additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/fact-metrics' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postFactMetric summary: Create a single fact metric tags: - fact-metrics requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: type: string owner: description: >- 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. type: string projects: type: array items: type: string tags: type: array items: type: string metricType: type: string enum: - proportion - retention - mean - quantile - ratio - dailyParticipation numerator: type: object properties: factTableId: type: string column: description: >- Must be empty for proportion metrics and dailyParticipation metrics. Otherwise, the column name or one of the special values: '$$distinctUsers' or '$$count' (or '$$distinctDates' if metricType is 'mean' or 'ratio' or 'quantile' and quantileSettings.type is 'unit') type: string aggregation: description: >- User aggregation of selected column. Either sum or max for numeric columns; count distinct for string columns; hll merge / kll merge for pre-built sketch columns (requires data-source support); ignored for special columns. Default: sum. If you specify a string column you must explicitly specify count distinct. Not used for proportion metrics; for event quantile metrics only kll merge is applicable. type: string enum: - sum - max - count distinct - hll merge - kll merge filters: deprecated: true description: >- Array of Fact Table Filter Ids. Deprecated, use rowFilters instead. type: array items: type: string inlineFilters: deprecated: true description: >- Inline filters to apply to the fact table. Keys are column names, values are arrays of values to filter by. Deprecated, use rowFilters instead. type: object propertyNames: type: string additionalProperties: type: array items: type: string rowFilters: description: >- Filters to apply to the rows of the fact table before aggregation. type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - '>' - < - '>=' - <= - in - not_in - is_null - not_null - is_true - is_false - contains - not_contains - starts_with - ends_with - sql_expr - saved_filter values: description: >- Not required for is_null, not_null, is_true, is_false operators. type: array items: type: string column: description: >- Required for all operators except sql_expr and saved_filter. type: string required: - operator additionalProperties: false aggregateFilterColumn: description: >- Column to use to filter users after aggregation. Either '$$count' of rows or the name of a numeric column that will be summed by user. Must specify `aggregateFilter` if using this. Only can be used with 'retention' and 'proportion' metrics. type: string aggregateFilter: description: >- Simple comparison operator and value to apply after aggregation (e.g. '= 10' or '>= 1'). Requires `aggregateFilterColumn`. type: string required: - factTableId additionalProperties: false denominator: description: Only when metricType is 'ratio' type: object properties: factTableId: type: string column: description: >- The column name or one of the special values: '$$distinctUsers' or '$$count' (or '$$distinctDates' if metricType is 'mean' or 'ratio' or 'quantile' and quantileSettings.type is 'unit') type: string aggregation: description: >- User aggregation of selected column. Either sum or max for numeric columns; count distinct for string columns; hll merge / kll merge for pre-built sketch columns (requires data-source support); ignored for special columns. Default: sum. If you specify a string column you must explicitly specify count distinct. Not used for proportion metrics; for event quantile metrics only kll merge is applicable. type: string enum: - sum - max - count distinct - hll merge - kll merge filters: deprecated: true description: >- Array of Fact Table Filter Ids. Deprecated, use rowFilters instead. type: array items: type: string inlineFilters: deprecated: true description: >- Inline filters to apply to the fact table. Keys are column names, values are arrays of values to filter by. Deprecated, use rowFilters instead. type: object propertyNames: type: string additionalProperties: type: array items: type: string rowFilters: description: >- Filters to apply to the rows of the fact table before aggregation. type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - '>' - < - '>=' - <= - in - not_in - is_null - not_null - is_true - is_false - contains - not_contains - starts_with - ends_with - sql_expr - saved_filter values: description: >- Not required for is_null, not_null, is_true, is_false operators. type: array items: type: string column: description: >- Required for all operators except sql_expr and saved_filter. type: string required: - operator additionalProperties: false required: - factTableId - column additionalProperties: false inverse: description: >- Set to true for things like Bounce Rate, where you want the metric to decrease type: boolean quantileSettings: description: >- Controls the settings for quantile metrics (mandatory if metricType is "quantile") type: object properties: type: description: >- Whether the quantile is over unit aggregations or raw event values type: string enum: - event - unit ignoreZeros: description: >- If true, zero values will be ignored when calculating the quantile type: boolean quantile: description: The quantile value (from 0.001 to 0.999) type: number minimum: 0.001 maximum: 0.999 multipleOf: 0.001 quantileEventCountColumn: description: >- Optional override for the source-column name used to recover per-row event counts when numerator.aggregation is 'kll merge'. Defaults to '_n_events'. Only valid for event-quantile metrics with a 'kll merge' numerator. type: string required: - type - ignoreZeros - quantile additionalProperties: false cappingSettings: description: Controls how outliers are handled type: object properties: type: type: string enum: - none - absolute - percentile value: description: >- When type is absolute, this is the absolute value. When type is percentile, this is the percentile value (from 0.0 to 1.0). type: number ignoreZeros: description: >- If true and capping is `percentile`, zeros will be ignored when calculating the percentile. type: boolean required: - type additionalProperties: false windowSettings: description: Controls the conversion window for the metric type: object properties: type: type: string enum: - none - conversion - lookback delayHours: deprecated: true description: >- Wait this many hours after experiment exposure before counting conversions. Ignored if delayValue is set. type: number delayValue: description: >- Wait this long after experiment exposure before counting conversions. type: number delayUnit: description: Default `hours`. type: string enum: - minutes - hours - days - weeks windowValue: type: number windowUnit: description: Default `hours`. type: string enum: - minutes - hours - days - weeks required: - type additionalProperties: false priorSettings: description: >- Controls the bayesian prior for the metric. If omitted, organization defaults will be used. type: object properties: override: description: >- If false, the organization default settings will be used instead of the other settings in this object type: boolean proper: description: >- If true, the `mean` and `stddev` will be used, otherwise we will use an improper flat prior. type: boolean mean: description: >- The mean of the prior distribution of relative effects in proportion terms (e.g. 0.01 is 1%) type: number stddev: description: >- Must be > 0. The standard deviation of the prior distribution of relative effects in proportion terms. type: number exclusiveMinimum: 0 required: - override - proper - mean - stddev additionalProperties: false regressionAdjustmentSettings: description: >- Controls the regression adjustment (CUPED) settings for the metric type: object properties: override: description: If false, the organization default settings will be used type: boolean enabled: description: >- Controls whether or not regression adjustment is applied to the metric type: boolean days: description: >- Number of pre-exposure days to use for the regression adjustment type: number required: - override additionalProperties: false riskThresholdSuccess: deprecated: true description: >- No longer used. Threshold for Risk to be considered low enough, as a proportion (e.g. put 0.0025 for 0.25%).
Must be a non-negative number and must not be higher than `riskThresholdDanger`. type: number minimum: 0 riskThresholdDanger: deprecated: true description: >- No longer used. Threshold for Risk to be considered too high, as a proportion (e.g. put 0.0125 for 1.25%).
Must be a non-negative number. type: number minimum: 0 displayAsPercentage: description: >- 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. type: boolean minPercentChange: description: >- Minimum percent change to consider uplift significant, as a proportion (e.g. put 0.005 for 0.5%) type: number minimum: 0 maxPercentChange: description: >- Maximum percent change to consider uplift significant, as a proportion (e.g. put 0.5 for 50%) type: number minimum: 0 minSampleSize: type: number minimum: 0 targetMDE: description: >- 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. type: number minimum: 0 managedBy: description: Set this to "api" to disable editing in the GrowthBook UI type: string enum: - '' - api - admin metricAutoSlices: description: >- Array of slice column names that will be automatically included in metric analysis. This is an enterprise feature. type: array items: type: string required: - name - metricType - numerator additionalProperties: false responses: '200': content: application/json: schema: type: object properties: factMetric: $ref: '#/components/schemas/FactMetric' required: - factMetric additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/fact-metrics' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"name":"Purchased","metricType":"proportion","numerator":{"factTableId":"ftb_abc123","column":"$$distinctUsers","filters":[]},"priorSettings":{"override":false,"proper":false,"mean":0,"stddev":0.3}}' /v1/fact-metrics/{id}: get: operationId: getFactMetric summary: Get a single fact metric tags: - fact-metrics parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: factMetric: $ref: '#/components/schemas/FactMetric' required: - factMetric additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/fact-metrics/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: updateFactMetric summary: Update a single fact metric tags: - fact-metrics parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: type: string owner: description: >- 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. type: string projects: type: array items: type: string tags: type: array items: type: string metricType: type: string enum: - proportion - retention - mean - quantile - ratio - dailyParticipation numerator: type: object properties: factTableId: type: string column: description: >- Must be empty for proportion metrics and dailyParticipation metrics. Otherwise, the column name or one of the special values: '$$distinctUsers' or '$$count' (or '$$distinctDates' if metricType is 'mean' or 'ratio' or 'quantile' and quantileSettings.type is 'unit') type: string aggregation: description: >- User aggregation of selected column. Either sum or max for numeric columns; count distinct for string columns; hll merge / kll merge for pre-built sketch columns (requires data-source support); ignored for special columns. Default: sum. If you specify a string column you must explicitly specify count distinct. Not used for proportion metrics; for event quantile metrics only kll merge is applicable. type: string enum: - sum - max - count distinct - hll merge - kll merge filters: deprecated: true description: >- Array of Fact Table Filter Ids. Deprecated, use rowFilters instead. type: array items: type: string inlineFilters: deprecated: true description: >- Inline filters to apply to the fact table. Keys are column names, values are arrays of values to filter by. Deprecated, use rowFilters instead. type: object propertyNames: type: string additionalProperties: type: array items: type: string rowFilters: description: >- Filters to apply to the rows of the fact table before aggregation. type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - '>' - < - '>=' - <= - in - not_in - is_null - not_null - is_true - is_false - contains - not_contains - starts_with - ends_with - sql_expr - saved_filter values: description: >- Not required for is_null, not_null, is_true, is_false operators. type: array items: type: string column: description: >- Required for all operators except sql_expr and saved_filter. type: string required: - operator additionalProperties: false aggregateFilterColumn: description: >- Column to use to filter users after aggregation. Either '$$count' of rows or the name of a numeric column that will be summed by user. Must specify `aggregateFilter` if using this. Only can be used with 'retention' and 'proportion' metrics. type: string aggregateFilter: description: >- Simple comparison operator and value to apply after aggregation (e.g. '= 10' or '>= 1'). Requires `aggregateFilterColumn`. type: string required: - factTableId additionalProperties: false denominator: description: Only when metricType is 'ratio' type: object properties: factTableId: type: string column: description: >- The column name or one of the special values: '$$distinctUsers' or '$$count' (or '$$distinctDates' if metricType is 'mean' or 'ratio' or 'quantile' and quantileSettings.type is 'unit') type: string aggregation: description: >- User aggregation of selected column. Either sum or max for numeric columns; count distinct for string columns; hll merge / kll merge for pre-built sketch columns (requires data-source support); ignored for special columns. Default: sum. If you specify a string column you must explicitly specify count distinct. Not used for proportion metrics; for event quantile metrics only kll merge is applicable. type: string enum: - sum - max - count distinct - hll merge - kll merge filters: deprecated: true description: >- Array of Fact Table Filter Ids. Deprecated, use rowFilters instead. type: array items: type: string inlineFilters: deprecated: true description: >- Inline filters to apply to the fact table. Keys are column names, values are arrays of values to filter by. Deprecated, use rowFilters instead. type: object propertyNames: type: string additionalProperties: type: array items: type: string rowFilters: description: >- Filters to apply to the rows of the fact table before aggregation. type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - '>' - < - '>=' - <= - in - not_in - is_null - not_null - is_true - is_false - contains - not_contains - starts_with - ends_with - sql_expr - saved_filter values: description: >- Not required for is_null, not_null, is_true, is_false operators. type: array items: type: string column: description: >- Required for all operators except sql_expr and saved_filter. type: string required: - operator additionalProperties: false required: - factTableId - column additionalProperties: false inverse: description: >- Set to true for things like Bounce Rate, where you want the metric to decrease type: boolean quantileSettings: description: >- Controls the settings for quantile metrics (mandatory if metricType is "quantile") type: object properties: type: description: >- Whether the quantile is over unit aggregations or raw event values type: string enum: - event - unit ignoreZeros: description: >- If true, zero values will be ignored when calculating the quantile type: boolean quantile: description: The quantile value (from 0.001 to 0.999) type: number minimum: 0.001 maximum: 0.999 multipleOf: 0.001 quantileEventCountColumn: description: >- Optional override for the source-column name used to recover per-row event counts when numerator.aggregation is 'kll merge'. Defaults to '_n_events'. Only valid for event-quantile metrics with a 'kll merge' numerator. type: string required: - type - ignoreZeros - quantile additionalProperties: false cappingSettings: description: Controls how outliers are handled type: object properties: type: type: string enum: - none - absolute - percentile value: description: >- When type is absolute, this is the absolute value. When type is percentile, this is the percentile value (from 0.0 to 1.0). type: number ignoreZeros: description: >- If true and capping is `percentile`, zeros will be ignored when calculating the percentile. type: boolean required: - type additionalProperties: false windowSettings: description: Controls the conversion window for the metric type: object properties: type: type: string enum: - none - conversion - lookback delayHours: deprecated: true description: >- Wait this many hours after experiment exposure before counting conversions. Ignored if delayValue is set. type: number delayValue: description: >- Wait this long after experiment exposure before counting conversions. type: number delayUnit: description: Default `hours`. type: string enum: - minutes - hours - days - weeks windowValue: type: number windowUnit: description: Default `hours`. type: string enum: - minutes - hours - days - weeks required: - type additionalProperties: false priorSettings: description: >- Controls the bayesian prior for the metric. If omitted, organization defaults will be used. type: object properties: override: description: >- If false, the organization default settings will be used instead of the other settings in this object type: boolean proper: description: >- If true, the `mean` and `stddev` will be used, otherwise we will use an improper flat prior. type: boolean mean: description: >- The mean of the prior distribution of relative effects in proportion terms (e.g. 0.01 is 1%) type: number stddev: description: >- Must be > 0. The standard deviation of the prior distribution of relative effects in proportion terms. type: number exclusiveMinimum: 0 required: - override - proper - mean - stddev additionalProperties: false regressionAdjustmentSettings: description: >- Controls the regression adjustment (CUPED) settings for the metric type: object properties: override: description: If false, the organization default settings will be used type: boolean enabled: description: >- Controls whether or not regression adjustment is applied to the metric type: boolean days: description: >- Number of pre-exposure days to use for the regression adjustment type: number required: - override additionalProperties: false riskThresholdSuccess: deprecated: true description: >- No longer used. Threshold for Risk to be considered low enough, as a proportion (e.g. put 0.0025 for 0.25%).
Must be a non-negative number and must not be higher than `riskThresholdDanger`. type: number minimum: 0 riskThresholdDanger: deprecated: true description: >- No longer used. Threshold for Risk to be considered too high, as a proportion (e.g. put 0.0125 for 1.25%).
Must be a non-negative number. type: number minimum: 0 displayAsPercentage: description: >- 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. type: boolean minPercentChange: description: >- Minimum percent change to consider uplift significant, as a proportion (e.g. put 0.005 for 0.5%) type: number minimum: 0 maxPercentChange: description: >- Maximum percent change to consider uplift significant, as a proportion (e.g. put 0.5 for 50%) type: number minimum: 0 minSampleSize: type: number minimum: 0 targetMDE: type: number minimum: 0 managedBy: description: Set this to "api" to disable editing in the GrowthBook UI type: string enum: - '' - api - admin archived: type: boolean metricAutoSlices: description: >- Array of slice column names that will be automatically included in metric analysis. This is an enterprise feature. type: array items: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: factMetric: $ref: '#/components/schemas/FactMetric' required: - factMetric additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/fact-metrics/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"name":"Updated Metric Name"}' delete: operationId: deleteFactMetric summary: Deletes a single fact metric tags: - fact-metrics parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: deletedId: description: The ID of the deleted fact metric example: fact__123abc type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/fact-metrics/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/fact-metrics/{id}/analysis: post: operationId: postFactMetricAnalysis summary: Create a fact metric analysis tags: - fact-metrics parameters: - name: id in: path required: true description: The fact metric id to analyze schema: description: The fact metric id to analyze type: string requestBody: required: false content: application/json: schema: type: object properties: userIdType: description: >- The identifier type to use for the analysis. If not provided, defaults to the first available identifier type in the fact table. type: string lookbackDays: description: >- Number of days to look back for the analysis. Defaults to 30. type: number minimum: 1 maximum: 999999 populationType: description: >- 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. type: string enum: - factTable - segment populationId: description: >- The ID of the population (e.g., segment ID) when populationType is not 'factTable'. Defaults to null. anyOf: - type: string - type: 'null' additionalNumeratorFilters: description: >- 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. type: array items: type: string additionalDenominatorFilters: description: >- 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. type: array items: type: string useCache: description: >- Whether to use a cached query if one exists. Defaults to true. type: boolean additionalProperties: false responses: '200': content: application/json: schema: type: object properties: metricAnalysis: $ref: '#/components/schemas/MetricAnalysis' required: - metricAnalysis additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/fact-metrics/{id}/analysis' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"lookbackDays":90}' /v1/bulk-import/facts: post: operationId: postBulkImportFacts summary: Bulk import fact tables, filters, and metrics tags: - fact-tables requestBody: required: true content: application/json: schema: type: object properties: factTables: type: array items: type: object properties: id: type: string data: type: object properties: name: type: string description: description: Description of the fact table type: string owner: description: >- 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. type: string projects: description: List of associated project ids type: array items: type: string tags: description: List of associated tags type: array items: type: string datasource: description: The datasource id type: string userIdTypes: description: >- List of identifier columns in this table. For example, "id" or "anonymous_id" type: array items: type: string sql: description: The SQL query for this fact table type: string eventName: description: The event name used in SQL template variables type: string managedBy: description: >- Set this to "api" to disable editing in the GrowthBook UI type: string enum: - '' - api - admin required: - name - datasource - userIdTypes - sql additionalProperties: false required: - id - data additionalProperties: false factTableFilters: type: array items: type: object properties: factTableId: type: string id: type: string data: type: object properties: name: type: string description: description: Description of the fact table filter type: string value: description: The SQL expression for this filter. example: country = 'US' type: string managedBy: description: >- 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" type: string enum: - '' - api required: - name - value additionalProperties: false required: - factTableId - id - data additionalProperties: false factMetrics: type: array items: type: object properties: id: type: string data: type: object properties: name: type: string description: type: string owner: description: >- 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. type: string projects: type: array items: type: string tags: type: array items: type: string metricType: type: string enum: - proportion - retention - mean - quantile - ratio - dailyParticipation numerator: type: object properties: factTableId: type: string column: description: >- Must be empty for proportion metrics and dailyParticipation metrics. Otherwise, the column name or one of the special values: '$$distinctUsers' or '$$count' (or '$$distinctDates' if metricType is 'mean' or 'ratio' or 'quantile' and quantileSettings.type is 'unit') type: string aggregation: description: >- User aggregation of selected column. Either sum or max for numeric columns; count distinct for string columns; hll merge / kll merge for pre-built sketch columns (requires data-source support); ignored for special columns. Default: sum. If you specify a string column you must explicitly specify count distinct. Not used for proportion metrics; for event quantile metrics only kll merge is applicable. type: string enum: - sum - max - count distinct - hll merge - kll merge filters: deprecated: true description: >- Array of Fact Table Filter Ids. Deprecated, use rowFilters instead. type: array items: type: string inlineFilters: deprecated: true description: >- Inline filters to apply to the fact table. Keys are column names, values are arrays of values to filter by. Deprecated, use rowFilters instead. type: object propertyNames: type: string additionalProperties: type: array items: type: string rowFilters: description: >- Filters to apply to the rows of the fact table before aggregation. type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - '>' - < - '>=' - <= - in - not_in - is_null - not_null - is_true - is_false - contains - not_contains - starts_with - ends_with - sql_expr - saved_filter values: description: >- Not required for is_null, not_null, is_true, is_false operators. type: array items: type: string column: description: >- Required for all operators except sql_expr and saved_filter. type: string required: - operator additionalProperties: false aggregateFilterColumn: description: >- Column to use to filter users after aggregation. Either '$$count' of rows or the name of a numeric column that will be summed by user. Must specify `aggregateFilter` if using this. Only can be used with 'retention' and 'proportion' metrics. type: string aggregateFilter: description: >- Simple comparison operator and value to apply after aggregation (e.g. '= 10' or '>= 1'). Requires `aggregateFilterColumn`. type: string required: - factTableId additionalProperties: false denominator: description: Only when metricType is 'ratio' type: object properties: factTableId: type: string column: description: >- The column name or one of the special values: '$$distinctUsers' or '$$count' (or '$$distinctDates' if metricType is 'mean' or 'ratio' or 'quantile' and quantileSettings.type is 'unit') type: string aggregation: description: >- User aggregation of selected column. Either sum or max for numeric columns; count distinct for string columns; hll merge / kll merge for pre-built sketch columns (requires data-source support); ignored for special columns. Default: sum. If you specify a string column you must explicitly specify count distinct. Not used for proportion metrics; for event quantile metrics only kll merge is applicable. type: string enum: - sum - max - count distinct - hll merge - kll merge filters: deprecated: true description: >- Array of Fact Table Filter Ids. Deprecated, use rowFilters instead. type: array items: type: string inlineFilters: deprecated: true description: >- Inline filters to apply to the fact table. Keys are column names, values are arrays of values to filter by. Deprecated, use rowFilters instead. type: object propertyNames: type: string additionalProperties: type: array items: type: string rowFilters: description: >- Filters to apply to the rows of the fact table before aggregation. type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - '>' - < - '>=' - <= - in - not_in - is_null - not_null - is_true - is_false - contains - not_contains - starts_with - ends_with - sql_expr - saved_filter values: description: >- Not required for is_null, not_null, is_true, is_false operators. type: array items: type: string column: description: >- Required for all operators except sql_expr and saved_filter. type: string required: - operator additionalProperties: false required: - factTableId - column additionalProperties: false inverse: description: >- Set to true for things like Bounce Rate, where you want the metric to decrease type: boolean quantileSettings: description: >- Controls the settings for quantile metrics (mandatory if metricType is "quantile") type: object properties: type: description: >- Whether the quantile is over unit aggregations or raw event values type: string enum: - event - unit ignoreZeros: description: >- If true, zero values will be ignored when calculating the quantile type: boolean quantile: description: The quantile value (from 0.001 to 0.999) type: number minimum: 0.001 maximum: 0.999 multipleOf: 0.001 quantileEventCountColumn: description: >- Optional override for the source-column name used to recover per-row event counts when numerator.aggregation is 'kll merge'. Defaults to '_n_events'. Only valid for event-quantile metrics with a 'kll merge' numerator. type: string required: - type - ignoreZeros - quantile additionalProperties: false cappingSettings: description: Controls how outliers are handled type: object properties: type: type: string enum: - none - absolute - percentile value: description: >- When type is absolute, this is the absolute value. When type is percentile, this is the percentile value (from 0.0 to 1.0). type: number ignoreZeros: description: >- If true and capping is `percentile`, zeros will be ignored when calculating the percentile. type: boolean required: - type additionalProperties: false windowSettings: description: Controls the conversion window for the metric type: object properties: type: type: string enum: - none - conversion - lookback delayHours: deprecated: true description: >- Wait this many hours after experiment exposure before counting conversions. Ignored if delayValue is set. type: number delayValue: description: >- Wait this long after experiment exposure before counting conversions. type: number delayUnit: description: Default `hours`. type: string enum: - minutes - hours - days - weeks windowValue: type: number windowUnit: description: Default `hours`. type: string enum: - minutes - hours - days - weeks required: - type additionalProperties: false priorSettings: description: >- Controls the bayesian prior for the metric. If omitted, organization defaults will be used. type: object properties: override: description: >- If false, the organization default settings will be used instead of the other settings in this object type: boolean proper: description: >- If true, the `mean` and `stddev` will be used, otherwise we will use an improper flat prior. type: boolean mean: description: >- The mean of the prior distribution of relative effects in proportion terms (e.g. 0.01 is 1%) type: number stddev: description: >- Must be > 0. The standard deviation of the prior distribution of relative effects in proportion terms. type: number exclusiveMinimum: 0 required: - override - proper - mean - stddev additionalProperties: false regressionAdjustmentSettings: description: >- Controls the regression adjustment (CUPED) settings for the metric type: object properties: override: description: >- If false, the organization default settings will be used type: boolean enabled: description: >- Controls whether or not regression adjustment is applied to the metric type: boolean days: description: >- Number of pre-exposure days to use for the regression adjustment type: number required: - override additionalProperties: false riskThresholdSuccess: deprecated: true description: >- No longer used. Threshold for Risk to be considered low enough, as a proportion (e.g. put 0.0025 for 0.25%).
Must be a non-negative number and must not be higher than `riskThresholdDanger`. type: number minimum: 0 riskThresholdDanger: deprecated: true description: >- No longer used. Threshold for Risk to be considered too high, as a proportion (e.g. put 0.0125 for 1.25%).
Must be a non-negative number. type: number minimum: 0 displayAsPercentage: description: >- 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. type: boolean minPercentChange: description: >- Minimum percent change to consider uplift significant, as a proportion (e.g. put 0.005 for 0.5%) type: number minimum: 0 maxPercentChange: description: >- Maximum percent change to consider uplift significant, as a proportion (e.g. put 0.5 for 50%) type: number minimum: 0 minSampleSize: type: number minimum: 0 targetMDE: description: >- 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. type: number minimum: 0 managedBy: description: >- Set this to "api" to disable editing in the GrowthBook UI type: string enum: - '' - api - admin archived: description: >- Set to true to archive the metric. Archived metrics are hidden by default in the UI and excluded from new experiments. type: boolean metricAutoSlices: description: >- Array of slice column names that will be automatically included in metric analysis. This is an enterprise feature. type: array items: type: string required: - name - metricType - numerator additionalProperties: false required: - id - data additionalProperties: false additionalProperties: false responses: '200': content: application/json: schema: type: object properties: success: type: boolean factTablesAdded: type: integer factTablesUpdated: type: integer factTableFiltersAdded: type: integer factTableFiltersUpdated: type: integer factMetricsAdded: type: integer factMetricsUpdated: type: integer required: - success - factTablesAdded - factTablesUpdated - factTableFiltersAdded - factTableFiltersUpdated - factMetricsAdded - factMetricsUpdated additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/bulk-import/facts' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"factTables":[],"factTableFilters":[],"factMetrics":[]}' /v1/code-refs: post: operationId: postCodeRefs summary: Submit list of code references tags: - code-references parameters: - $ref: '#/components/parameters/deleteMissing' requestBody: required: true content: application/json: schema: type: object properties: branch: type: string repoName: type: string refs: type: array items: type: object properties: filePath: type: string startingLineNumber: type: integer lines: type: string flagKey: type: string contentHash: type: string required: - filePath - startingLineNumber - lines - flagKey - contentHash additionalProperties: false required: - branch - repoName - refs additionalProperties: false responses: '200': content: application/json: schema: type: object properties: featuresUpdated: type: array items: type: string additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/code-refs' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"branch":"main","repoName":"my-repo","refs":[{"filePath":"src/app.ts","startingLineNumber":16,"lines":"...","flagKey":"my-feature","contentHash":"abc123"}]}' get: operationId: listCodeRefs summary: Get list of all code references for the current organization tags: - code-references parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': content: application/json: schema: allOf: - type: object properties: codeRefs: type: array items: $ref: '#/components/schemas/CodeRef' required: - codeRefs additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/code-refs' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/code-refs/{id}: get: operationId: getCodeRefs summary: Get list of code references for a single feature id tags: - code-references parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: codeRefs: type: array items: $ref: '#/components/schemas/CodeRef' required: - codeRefs additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/code-refs/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/members: get: operationId: listMembers summary: Get all organization members tags: - members parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/userName' - $ref: '#/components/parameters/userEmail' - $ref: '#/components/parameters/globalRole' responses: '200': content: application/json: schema: allOf: - type: object properties: members: type: array items: $ref: '#/components/schemas/Member' required: - members additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/members' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/members/{id}/role: post: operationId: updateMemberRole summary: >- Update a member's global role (including any enviroment restrictions, if applicable). Can also update a member's project roles if your plan supports it. tags: - members parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: type: object properties: member: type: object properties: role: type: string environments: type: array items: type: string projectRoles: type: array items: type: object properties: project: type: string role: type: string environments: type: array items: type: string limitAccessByEnvironment: type: boolean required: - project - role - environments additionalProperties: false additionalProperties: false required: - member additionalProperties: false responses: '200': content: application/json: schema: type: object properties: updatedMember: $ref: '#/components/schemas/updatedMember' required: - updatedMember additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/members/{id}/role' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/members/{id}: delete: operationId: deleteMember summary: Removes a single user from an organization tags: - members parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: deletedId: type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X DELETE 'https://api.growthbook.io/api/v1/members/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/queries/{id}: get: operationId: getQuery summary: Get a single query tags: - queries parameters: - $ref: '#/components/parameters/id' responses: '200': content: application/json: schema: type: object properties: query: $ref: '#/components/schemas/Query' required: - query additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/queries/abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/settings: get: operationId: getSettings summary: Get organization settings tags: - settings responses: '200': content: application/json: schema: type: object properties: settings: $ref: '#/components/schemas/Settings' required: - settings additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/settings' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/information-schema-tables/{tableId}: get: operationId: getInformationSchemaTable summary: Get a single Information Schema Table by id description: >- 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. tags: - data-sources parameters: - $ref: '#/components/parameters/tableId' responses: '200': content: application/json: schema: type: object properties: informationSchemaTable: $ref: '#/components/schemas/InformationSchemaTable' required: - informationSchemaTable additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/information-schema-tables/{tableId}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/ramp-schedules: get: operationId: listRampSchedules summary: Get all rampSchedules description: | Returns all ramp schedules for the organization, with optional filters. tags: - ramp-schedules parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/featureId' - name: status in: query description: Filter by schedule status schema: description: Filter by schedule status type: string enum: - pending - ready - running - paused - pending-approval - completed - rolled-back responses: '200': content: application/json: schema: type: object properties: limit: type: integer offset: type: integer count: type: integer total: type: integer hasMore: type: boolean nextOffset: anyOf: - type: integer - type: 'null' rampSchedules: type: array items: $ref: '#/components/schemas/RampSchedule' required: - limit - offset - count - total - hasMore - nextOffset - rampSchedules additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/ramp-schedules' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: createRampSchedule summary: Create a single rampSchedule description: > Creates a new ramp schedule, optionally attaching it to a published feature rule. ### Target attachment (optional) Provide `featureId` and `ruleId` together to attach the schedule to a specific rule on creation. The rule must already be live (published). Each rule can only be controlled by one schedule at a time. When both are supplied, **`targetId` and `patch.ruleId` are auto-injected** into every step action and endAction — callers only need to supply the patch values (`coverage`, `condition`, etc.). `environment` is accepted for backward compatibility with pre-v2 ramps but is deprecated and no longer required. Post-v2 `rule.id` is uniquely sufficient. If rule attachment is omitted, the schedule is created as a free-standing skeleton in `pending` status. Use `POST /ramp-schedules/{id}/actions/add-target` to attach rules later, and `POST /ramp-schedules/{id}/actions/start` to start it. ### Using templates Provide `templateId` to inherit steps and endActions from a saved template. Explicit `steps` / `endActions` in the request body take precedence over the template. Template auto-population requires `featureId` and `ruleId` to be set (so targetId can be injected). Requires an **Enterprise** plan. tags: - ramp-schedules requestBody: required: true content: application/json: schema: type: object properties: name: type: string featureId: description: >- Feature that anchors this schedule. Required when `ruleId` is set. type: string ruleId: description: >- Rule to attach as the initial target. Requires `featureId`. Post-v2 `rule.id` is uniquely sufficient; `environment` is optional and deprecated. type: string environment: deprecated: true description: >- Deprecated. Legacy disambiguator for pre-v2 rules whose `ruleId` could repeat across envs. Omit on new schedules — the resolver uses `rule.id` directly. type: string steps: description: > Ordered ramp steps. When `featureId`+`ruleId` are provided, `targetId` and `patch.ruleId` in actions are auto-injected — only supply the patch fields you want to change. type: array items: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: interval seconds: type: number exclusiveMinimum: 0 required: - type - seconds additionalProperties: false - type: object properties: type: type: string const: approval required: - type additionalProperties: false - type: object properties: type: type: string const: scheduled at: type: string required: - type - at additionalProperties: false actions: type: array items: type: object properties: targetType: description: >- Omit when using featureId+ruleId+environment (auto-injected) type: string const: feature-rule targetId: description: >- Auto-injected when featureId+ruleId+environment are provided type: string patch: description: >- Sparse patch — only fields present are applied; absent fields accumulate from previous steps type: object properties: ruleId: description: >- Auto-injected when ruleId is provided at the top level type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' additionalProperties: false required: - patch additionalProperties: false approvalNotes: anyOf: - type: string - type: 'null' required: - trigger additionalProperties: false endActions: description: >- Actions applied when the ramp completes. `targetId` and `patch.ruleId` are auto-injected when `featureId`+`ruleId` are provided. type: array items: type: object properties: targetType: description: >- Omit when using featureId+ruleId+environment (auto-injected) type: string const: feature-rule targetId: description: >- Auto-injected when featureId+ruleId+environment are provided type: string patch: description: >- Sparse patch — only fields present are applied; absent fields accumulate from previous steps type: object properties: ruleId: description: >- Auto-injected when ruleId is provided at the top level type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' additionalProperties: false required: - patch additionalProperties: false startDate: description: When to start. Absent/null = immediately on start action. anyOf: - type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ - type: 'null' endCondition: description: Optional hard deadline type: object properties: trigger: type: object properties: type: type: string const: scheduled at: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ required: - type - at additionalProperties: false additionalProperties: false templateId: description: >- Load steps and endActions from a saved template (featureId+ruleId must also be set for auto-injection) type: string required: - name additionalProperties: false responses: '200': content: application/json: schema: type: object properties: rampSchedule: $ref: '#/components/schemas/RampSchedule' required: - rampSchedule additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/ramp-schedules/{id}/actions/start: post: operationId: startRampSchedule summary: Start a ramp schedule description: > Transitions the schedule from `ready` to `running` and processes the first step immediately if eligible. tags: - ramp-schedules parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: rampSchedule: $ref: '#/components/schemas/RampSchedule' required: - rampSchedule additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/start' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/ramp-schedules/{id}/actions/pause: post: operationId: pauseRampSchedule summary: Pause a ramp schedule description: | Pauses a `running` or `pending-approval` schedule. The schedule can be resumed from the same position with the `/actions/resume` endpoint. tags: - ramp-schedules parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: rampSchedule: $ref: '#/components/schemas/RampSchedule' required: - rampSchedule additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/pause' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/ramp-schedules/{id}/actions/resume: post: operationId: resumeRampSchedule summary: Resume a paused ramp schedule description: | Resumes a `paused` schedule. Adjusts timing anchors to account for the pause duration so step intervals continue from where they left off. tags: - ramp-schedules parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: rampSchedule: $ref: '#/components/schemas/RampSchedule' required: - rampSchedule additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/resume' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/ramp-schedules/{id}/actions/rollback: post: operationId: rollbackRampSchedule summary: Roll back a ramp schedule description: | Rolls back to the starting position and lands in `paused` status so the schedule can be restarted with `/actions/start` or `/actions/resume`. tags: - ramp-schedules parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: rampSchedule: $ref: '#/components/schemas/RampSchedule' required: - rampSchedule additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/rollback' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/ramp-schedules/{id}/actions/jump: post: operationId: jumpRampSchedule summary: Jump to a specific step description: > Moves the schedule directly to `targetStepIndex` (forward or backward) and pauses. Use `-1` to jump to the pre-start position without rolling back rule patches. tags: - ramp-schedules parameters: - name: id in: path required: true description: '' schema: type: string requestBody: required: true content: application/json: schema: type: object properties: targetStepIndex: description: Zero-based index of the step to jump to; -1 = pre-start type: integer minimum: -1 required: - targetStepIndex additionalProperties: false responses: '200': content: application/json: schema: type: object properties: rampSchedule: $ref: '#/components/schemas/RampSchedule' required: - rampSchedule additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/jump' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/ramp-schedules/{id}/actions/complete: post: operationId: completeRampSchedule summary: Complete a ramp schedule immediately description: | Applies end actions and marks the schedule as `completed`, regardless of how many steps remain. tags: - ramp-schedules parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: rampSchedule: $ref: '#/components/schemas/RampSchedule' required: - rampSchedule additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/complete' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/ramp-schedules/{id}/actions/approve-step: post: operationId: approveStepRampSchedule summary: Approve the current pending-approval step description: | Approves the current step on a schedule in `pending-approval` status and advances to the next step. Requires the caller to have feature review permissions for the associated feature. tags: - ramp-schedules parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: rampSchedule: $ref: '#/components/schemas/RampSchedule' required: - rampSchedule additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/approve-step' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/ramp-schedules/{id}/actions/add-target: post: operationId: addTargetRampSchedule summary: Add a target rule to a ramp schedule description: > 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. tags: - ramp-schedules parameters: - name: id in: path required: true description: '' schema: type: string requestBody: required: true content: application/json: schema: type: object properties: featureId: type: string ruleId: type: string environment: deprecated: true description: >- Deprecated pre-v2 disambiguator; ignored on v2 rules where `rule.id` is uniquely sufficient. type: string required: - featureId - ruleId additionalProperties: false responses: '200': content: application/json: schema: type: object properties: rampSchedule: $ref: '#/components/schemas/RampSchedule' required: - rampSchedule additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/add-target' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/ramp-schedules/{id}/actions/eject-target: post: operationId: ejectTargetRampSchedule summary: Remove a target rule from a ramp schedule description: > 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`. tags: - ramp-schedules parameters: - name: id in: path required: true description: '' schema: type: string requestBody: required: true content: application/json: schema: type: object properties: targetId: description: Target ID (from the targets array) type: string ruleId: description: Rule ID — use as an alternative to targetId type: string environment: deprecated: true description: >- Deprecated pre-v2 disambiguator. Optional when used with ruleId; omit on v2 ramps. type: string additionalProperties: false responses: '200': content: application/json: schema: anyOf: - type: object properties: rampSchedule: $ref: '#/components/schemas/RampSchedule' required: - rampSchedule additionalProperties: false - type: object properties: deleted: type: boolean rampScheduleId: type: string required: - deleted - rampScheduleId additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedules/{id}/actions/eject-target' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/namespaces: get: operationId: listNamespaces summary: Get all namespaces tags: - namespaces parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': content: application/json: schema: allOf: - type: object properties: namespaces: type: array items: $ref: '#/components/schemas/Namespace' required: - namespaces additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/namespaces' \ -H 'Authorization: Bearer YOUR_API_KEY' post: operationId: postNamespace summary: Create a namespace tags: - namespaces requestBody: required: true content: application/json: schema: type: object properties: displayName: description: >- Human-readable display name. Must be unique within the organization. type: string description: type: string status: type: string enum: - active - inactive format: description: >- Namespace format. Defaults to 'multiRange', which supports multiple ranges per experiment and a configurable hash attribute. type: string enum: - legacy - multiRange hashAttribute: description: >- Required when format is 'multiRange'. The user attribute (e.g. 'id', 'device_id') used to assign users to namespace buckets. type: string required: - displayName additionalProperties: false responses: '200': content: application/json: schema: type: object properties: namespace: $ref: '#/components/schemas/Namespace' required: - namespace additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/namespaces' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"displayName":"Checkout Flow","description":"Experiments on the checkout funnel","format":"multiRange","hashAttribute":"id"}' /v1/namespaces/{id}: get: operationId: getNamespace summary: Get a single namespace tags: - namespaces parameters: - name: id in: path required: true description: The unique id of the namespace schema: description: The unique id of the namespace type: string responses: '200': content: application/json: schema: type: object properties: namespace: $ref: '#/components/schemas/Namespace' required: - namespace additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/namespaces/ns-abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' put: operationId: putNamespace summary: Update a namespace tags: - namespaces parameters: - name: id in: path required: true description: The unique id of the namespace schema: description: The unique id of the namespace type: string requestBody: required: true content: application/json: schema: type: object properties: displayName: description: Human-readable display name. type: string description: description: Namespace description. type: string status: description: Set to 'inactive' to disable the namespace. type: string enum: - active - inactive hashAttribute: description: >- Only applies to multiRange namespaces. Changes which user attribute is used for bucket hashing going forward. type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: namespace: $ref: '#/components/schemas/Namespace' required: - namespace additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v1/namespaces/ns-abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"displayName":"Checkout v2","status":"inactive"}' delete: operationId: deleteNamespace summary: Delete a namespace description: >- 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. tags: - namespaces parameters: - name: id in: path required: true description: The unique id of the namespace schema: description: The unique id of the namespace type: string responses: '200': content: application/json: schema: type: object properties: deletedId: description: The ID of the deleted namespace. example: ns-abc123 type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/namespaces/ns-abc123' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/namespaces/{id}/memberships: get: operationId: getNamespaceMemberships summary: Get namespace membership tags: - namespaces parameters: - name: id in: path required: true description: The unique id of the namespace schema: description: The unique id of the namespace type: string - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': content: application/json: schema: allOf: - type: object properties: experiments: type: array items: $ref: '#/components/schemas/NamespaceExperimentMember' required: - experiments additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/namespaces/ns-abc123/memberships' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/namespaces/{id}/rotateSeed: post: operationId: postNamespaceRotateSeed summary: Rotate namespace seed description: >- ⚠️ 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. tags: - namespaces parameters: - name: id in: path required: true description: The unique id of the namespace schema: description: The unique id of the namespace type: string requestBody: required: true content: application/json: schema: type: object properties: seed: description: >- A specific value to use as the new seed. If omitted, a random value is generated. type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: namespace: $ref: '#/components/schemas/Namespace' required: - namespace additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/namespaces/ns-abc123/rotateSeed' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/transform-copy: post: operationId: postCopyTransform requestBody: required: true content: application/json: schema: type: object properties: visualChangesetId: type: string copy: type: string mode: type: string enum: - energetic - concise - humorous required: - visualChangesetId - copy - mode additionalProperties: false responses: '200': content: application/json: schema: {} x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/transform-copy' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/dashboards/{id}: get: operationId: getDashboard summary: Get a single dashboard tags: - Dashboards parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: dashboard: $ref: '#/components/schemas/Dashboard' required: - dashboard additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/dashboards/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' delete: operationId: deleteDashboard summary: Delete a single dashboard tags: - Dashboards parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: deletedId: type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X DELETE 'https://api.growthbook.io/api/v1/dashboards/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' put: operationId: updateDashboard summary: Update a single dashboard tags: - Dashboards parameters: - name: id in: path required: true description: '' schema: type: string requestBody: required: true content: application/json: schema: type: object properties: title: description: The display name of the Dashboard type: string editLevel: description: >- Dashboards that are "published" are editable by organization members with appropriate permissions type: string enum: - published - private shareLevel: description: >- General Dashboards only. Dashboards that are "published" are viewable by organization members with appropriate permissions type: string enum: - published - private enableAutoUpdates: description: >- If enabled for a General Dashboard, also requires an updateSchedule type: boolean updateSchedule: description: >- General Dashboards only. Experiment Dashboards update based on the parent experiment instead anyOf: - type: object properties: type: type: string const: stale hours: type: number required: - type - hours additionalProperties: false - type: object properties: type: type: string const: cron cron: type: string required: - type - cron additionalProperties: false projects: description: >- General Dashboards only, Experiment Dashboards use the experiment's projects type: array items: type: string blocks: type: array items: anyOf: - anyOf: - type: object properties: type: type: string const: markdown title: type: string description: type: string snapshotId: type: string content: type: string required: - type - title - description - content additionalProperties: false - type: object properties: type: type: string const: experiment-metadata title: type: string description: type: string snapshotId: type: string experimentId: type: string showDescription: type: boolean showHypothesis: type: boolean showVariationImages: type: boolean variationIds: type: array items: type: string required: - type - title - description - experimentId - showDescription - showHypothesis - showVariationImages additionalProperties: false - type: object properties: type: type: string const: experiment-metric title: type: string description: type: string snapshotId: type: string experimentId: type: string metricIds: type: array items: type: string variationIds: type: array items: type: string baselineRow: type: number differenceType: type: string enum: - absolute - relative - scaled columnsFilter: type: array items: type: string enum: - Metric & Variation Names - Baseline Average - Variation Averages - Chance to Win - CI Graph - Lift sliceTagsFilter: type: array items: type: string metricTagFilter: type: array items: type: string sortBy: anyOf: - type: string enum: - metrics - metricTags - significance - change - type: 'null' sortDirection: anyOf: - type: string enum: - asc - desc - type: 'null' required: - type - title - description - snapshotId - experimentId - metricIds - variationIds - baselineRow - differenceType - columnsFilter - sliceTagsFilter - metricTagFilter - sortBy - sortDirection additionalProperties: false - type: object properties: type: type: string const: experiment-dimension title: type: string description: type: string snapshotId: type: string experimentId: type: string dimensionId: type: string dimensionValues: type: array items: type: string metricIds: type: array items: type: string variationIds: type: array items: type: string baselineRow: type: number differenceType: type: string enum: - absolute - relative - scaled columnsFilter: type: array items: type: string enum: - Metric & Variation Names - Baseline Average - Variation Averages - Chance to Win - CI Graph - Lift metricTagFilter: type: array items: type: string sortBy: anyOf: - type: string enum: - metrics - metricTags - significance - change - type: 'null' sortDirection: anyOf: - type: string enum: - asc - desc - type: 'null' required: - type - title - description - snapshotId - experimentId - dimensionId - dimensionValues - metricIds - variationIds - baselineRow - differenceType - columnsFilter - metricTagFilter - sortBy - sortDirection additionalProperties: false - type: object properties: type: type: string const: experiment-time-series title: type: string description: type: string snapshotId: type: string experimentId: type: string metricId: type: string metricIds: type: array items: type: string variationIds: type: array items: type: string differenceType: type: string enum: - absolute - relative - scaled sliceTagsFilter: type: array items: type: string metricTagFilter: type: array items: type: string sortBy: anyOf: - type: string enum: - metrics - metricTags - significance - change - type: 'null' sortDirection: anyOf: - type: string enum: - asc - desc - type: 'null' required: - type - title - description - snapshotId - experimentId - metricIds - variationIds - differenceType - sliceTagsFilter - metricTagFilter - sortBy - sortDirection additionalProperties: false - type: object properties: type: type: string const: experiment-traffic title: type: string description: type: string snapshotId: type: string experimentId: type: string showTable: type: boolean showTimeseries: type: boolean required: - type - title - description - experimentId - showTable - showTimeseries additionalProperties: false - type: object properties: type: type: string const: sql-explorer title: type: string description: type: string snapshotId: type: string savedQueryId: type: string dataVizConfigIndex: type: number blockConfig: type: array items: type: string required: - type - title - description - savedQueryId - blockConfig additionalProperties: false - type: object properties: type: type: string const: metric-explorer title: type: string description: type: string snapshotId: type: string factMetricId: type: string visualizationType: type: string enum: - histogram - bigNumber - timeseries valueType: type: string enum: - avg - sum metricAnalysisId: type: string analysisSettings: type: object properties: userIdType: type: string lookbackDays: type: number populationType: type: string enum: - metric - factTable - exposureQuery - population - segment populationId: anyOf: - type: string - type: 'null' additionalNumeratorFilters: type: array items: type: string additionalDenominatorFilters: type: array items: type: string startDate: type: string endDate: type: string required: - userIdType - lookbackDays - populationType - populationId - startDate - endDate additionalProperties: false required: - type - title - description - factMetricId - visualizationType - valueType - metricAnalysisId - analysisSettings additionalProperties: false - anyOf: - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: metric-explorer title: type: string description: type: string snapshotId: type: string factMetricId: type: string visualizationType: type: string enum: - histogram - bigNumber - timeseries valueType: type: string enum: - avg - sum metricAnalysisId: type: string analysisSettings: type: object properties: userIdType: type: string lookbackDays: type: number populationType: type: string enum: - metric - factTable - exposureQuery - population - segment populationId: anyOf: - type: string - type: 'null' additionalNumeratorFilters: type: array items: type: string additionalDenominatorFilters: type: array items: type: string startDate: type: string endDate: type: string required: - userIdType - lookbackDays - populationType - populationId - startDate - endDate additionalProperties: false required: - organization - id - uid - type - title - description - factMetricId - visualizationType - valueType - metricAnalysisId - analysisSettings additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: markdown title: type: string description: type: string snapshotId: type: string content: type: string required: - organization - id - uid - type - title - description - content additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: experiment-metadata title: type: string description: type: string snapshotId: type: string experimentId: type: string showDescription: type: boolean showHypothesis: type: boolean showVariationImages: type: boolean variationIds: type: array items: type: string required: - organization - id - uid - type - title - description - experimentId - showDescription - showHypothesis - showVariationImages additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: experiment-metric title: type: string description: type: string snapshotId: type: string experimentId: type: string metricIds: type: array items: type: string variationIds: type: array items: type: string baselineRow: type: number differenceType: type: string enum: - absolute - relative - scaled columnsFilter: type: array items: type: string enum: - Metric & Variation Names - Baseline Average - Variation Averages - Chance to Win - CI Graph - Lift sliceTagsFilter: type: array items: type: string metricTagFilter: type: array items: type: string sortBy: anyOf: - type: string enum: - metrics - metricTags - significance - change - type: 'null' sortDirection: anyOf: - type: string enum: - asc - desc - type: 'null' required: - organization - id - uid - type - title - description - snapshotId - experimentId - metricIds - variationIds - baselineRow - differenceType - columnsFilter - sliceTagsFilter - metricTagFilter - sortBy - sortDirection additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: experiment-dimension title: type: string description: type: string snapshotId: type: string experimentId: type: string dimensionId: type: string dimensionValues: type: array items: type: string metricIds: type: array items: type: string variationIds: type: array items: type: string baselineRow: type: number differenceType: type: string enum: - absolute - relative - scaled columnsFilter: type: array items: type: string enum: - Metric & Variation Names - Baseline Average - Variation Averages - Chance to Win - CI Graph - Lift metricTagFilter: type: array items: type: string sortBy: anyOf: - type: string enum: - metrics - metricTags - significance - change - type: 'null' sortDirection: anyOf: - type: string enum: - asc - desc - type: 'null' required: - organization - id - uid - type - title - description - snapshotId - experimentId - dimensionId - dimensionValues - metricIds - variationIds - baselineRow - differenceType - columnsFilter - metricTagFilter - sortBy - sortDirection additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: experiment-time-series title: type: string description: type: string snapshotId: type: string experimentId: type: string metricId: type: string metricIds: type: array items: type: string variationIds: type: array items: type: string differenceType: type: string enum: - absolute - relative - scaled sliceTagsFilter: type: array items: type: string metricTagFilter: type: array items: type: string sortBy: anyOf: - type: string enum: - metrics - metricTags - significance - change - type: 'null' sortDirection: anyOf: - type: string enum: - asc - desc - type: 'null' required: - organization - id - uid - type - title - description - snapshotId - experimentId - metricIds - variationIds - differenceType - sliceTagsFilter - metricTagFilter - sortBy - sortDirection additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: experiment-traffic title: type: string description: type: string snapshotId: type: string experimentId: type: string showTable: type: boolean showTimeseries: type: boolean required: - organization - id - uid - type - title - description - experimentId - showTable - showTimeseries additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: sql-explorer title: type: string description: type: string snapshotId: type: string savedQueryId: type: string dataVizConfigIndex: type: number blockConfig: type: array items: type: string required: - organization - id - uid - type - title - description - savedQueryId - blockConfig additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: metric-exploration title: type: string description: type: string snapshotId: type: string explorerAnalysisId: type: string config: type: object properties: datasource: description: ID of the datasource to query type: string dimensions: type: array items: anyOf: - type: object properties: dimensionType: type: string const: date column: anyOf: - type: string - type: 'null' dateGranularity: type: string enum: - auto - hour - day - week - month - year required: - dimensionType - column - dateGranularity additionalProperties: false - type: object properties: dimensionType: type: string const: dynamic column: anyOf: - type: string - type: 'null' maxValues: type: number required: - dimensionType - column - maxValues additionalProperties: false - type: object properties: dimensionType: type: string const: static column: type: string values: type: array items: type: string required: - dimensionType - column - values additionalProperties: false - type: object properties: dimensionType: type: string const: slice slices: type: array items: type: object properties: name: type: string filters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false required: - name - filters additionalProperties: false required: - dimensionType - slices additionalProperties: false chartType: type: string enum: - line - area - timeseries-table - table - bar - stackedBar - horizontalBar - stackedHorizontalBar - bigNumber dateRange: type: object properties: predefined: type: string enum: - today - last7Days - last30Days - last90Days - customLookback - customDateRange lookbackValue: anyOf: - type: number - type: 'null' lookbackUnit: anyOf: - type: string enum: - hour - day - week - month - type: 'null' startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' required: - predefined additionalProperties: false showAs: type: string enum: - total - per_unit type: type: string const: metric dataset: type: object properties: type: type: string const: metric values: type: array items: type: object properties: name: type: string rowFilters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false type: type: string const: metric metricId: type: string unit: anyOf: - type: string - type: 'null' denominatorUnit: anyOf: - type: string - type: 'null' required: - name - rowFilters - type - metricId - unit - denominatorUnit additionalProperties: false required: - type - values additionalProperties: false required: - datasource - dimensions - chartType - dateRange - type - dataset additionalProperties: false required: - organization - id - uid - type - title - description - explorerAnalysisId - config additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: fact-table-exploration title: type: string description: type: string snapshotId: type: string explorerAnalysisId: type: string config: type: object properties: datasource: description: ID of the datasource to query type: string dimensions: type: array items: anyOf: - type: object properties: dimensionType: type: string const: date column: anyOf: - type: string - type: 'null' dateGranularity: type: string enum: - auto - hour - day - week - month - year required: - dimensionType - column - dateGranularity additionalProperties: false - type: object properties: dimensionType: type: string const: dynamic column: anyOf: - type: string - type: 'null' maxValues: type: number required: - dimensionType - column - maxValues additionalProperties: false - type: object properties: dimensionType: type: string const: static column: type: string values: type: array items: type: string required: - dimensionType - column - values additionalProperties: false - type: object properties: dimensionType: type: string const: slice slices: type: array items: type: object properties: name: type: string filters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false required: - name - filters additionalProperties: false required: - dimensionType - slices additionalProperties: false chartType: type: string enum: - line - area - timeseries-table - table - bar - stackedBar - horizontalBar - stackedHorizontalBar - bigNumber dateRange: type: object properties: predefined: type: string enum: - today - last7Days - last30Days - last90Days - customLookback - customDateRange lookbackValue: anyOf: - type: number - type: 'null' lookbackUnit: anyOf: - type: string enum: - hour - day - week - month - type: 'null' startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' required: - predefined additionalProperties: false showAs: type: string enum: - total - per_unit type: type: string const: fact_table dataset: type: object properties: type: type: string const: fact_table factTableId: anyOf: - type: string - type: 'null' values: type: array items: type: object properties: name: type: string rowFilters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false type: type: string const: fact_table valueType: type: string enum: - unit_count - count - sum valueColumn: anyOf: - type: string - type: 'null' unit: anyOf: - type: string - type: 'null' required: - name - rowFilters - type - valueType - valueColumn - unit additionalProperties: false required: - type - factTableId - values additionalProperties: false required: - datasource - dimensions - chartType - dateRange - type - dataset additionalProperties: false required: - organization - id - uid - type - title - description - explorerAnalysisId - config additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: data-source-exploration title: type: string description: type: string snapshotId: type: string explorerAnalysisId: type: string config: type: object properties: datasource: description: ID of the datasource to query type: string dimensions: type: array items: anyOf: - type: object properties: dimensionType: type: string const: date column: anyOf: - type: string - type: 'null' dateGranularity: type: string enum: - auto - hour - day - week - month - year required: - dimensionType - column - dateGranularity additionalProperties: false - type: object properties: dimensionType: type: string const: dynamic column: anyOf: - type: string - type: 'null' maxValues: type: number required: - dimensionType - column - maxValues additionalProperties: false - type: object properties: dimensionType: type: string const: static column: type: string values: type: array items: type: string required: - dimensionType - column - values additionalProperties: false - type: object properties: dimensionType: type: string const: slice slices: type: array items: type: object properties: name: type: string filters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false required: - name - filters additionalProperties: false required: - dimensionType - slices additionalProperties: false chartType: type: string enum: - line - area - timeseries-table - table - bar - stackedBar - horizontalBar - stackedHorizontalBar - bigNumber dateRange: type: object properties: predefined: type: string enum: - today - last7Days - last30Days - last90Days - customLookback - customDateRange lookbackValue: anyOf: - type: number - type: 'null' lookbackUnit: anyOf: - type: string enum: - hour - day - week - month - type: 'null' startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' required: - predefined additionalProperties: false showAs: type: string enum: - total - per_unit type: type: string const: data_source dataset: type: object properties: type: type: string const: data_source table: type: string path: type: string timestampColumn: type: string columnTypes: type: object propertyNames: type: string additionalProperties: type: string enum: - string - number - date - boolean - other values: type: array items: type: object properties: name: type: string rowFilters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false type: type: string const: data_source valueType: type: string enum: - unit_count - count - sum valueColumn: anyOf: - type: string - type: 'null' unit: anyOf: - type: string - type: 'null' required: - name - rowFilters - type - valueType - valueColumn - unit additionalProperties: false required: - type - table - path - timestampColumn - columnTypes - values additionalProperties: false required: - datasource - dimensions - chartType - dateRange - type - dataset additionalProperties: false required: - organization - id - uid - type - title - description - explorerAnalysisId - config additionalProperties: false additionalProperties: false responses: '200': content: application/json: schema: type: object properties: dashboard: $ref: '#/components/schemas/Dashboard' required: - dashboard additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X PUT 'https://api.growthbook.io/api/v1/dashboards/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/dashboards: post: operationId: createDashboard summary: Create a single dashboard tags: - Dashboards requestBody: required: true content: application/json: schema: type: object properties: title: description: The display name of the Dashboard type: string editLevel: description: >- Dashboards that are "published" are editable by organization members with appropriate permissions type: string enum: - published - private shareLevel: description: >- General Dashboards only. Dashboards that are "published" are viewable by organization members with appropriate permissions type: string enum: - published - private enableAutoUpdates: description: >- If enabled for a General Dashboard, also requires an updateSchedule type: boolean updateSchedule: description: >- General Dashboards only. Experiment Dashboards update based on the parent experiment instead anyOf: - type: object properties: type: type: string const: stale hours: type: number required: - type - hours additionalProperties: false - type: object properties: type: type: string const: cron cron: type: string required: - type - cron additionalProperties: false experimentId: description: >- The parent experiment for an Experiment Dashboard, or undefined for a general dashboard type: string projects: description: >- General Dashboards only, Experiment Dashboards use the experiment's projects type: array items: type: string blocks: type: array items: anyOf: - type: object properties: type: type: string const: markdown title: type: string description: type: string snapshotId: type: string content: type: string required: - type - title - description - content additionalProperties: false - type: object properties: type: type: string const: experiment-metadata title: type: string description: type: string snapshotId: type: string experimentId: type: string showDescription: type: boolean showHypothesis: type: boolean showVariationImages: type: boolean variationIds: type: array items: type: string required: - type - title - description - experimentId - showDescription - showHypothesis - showVariationImages additionalProperties: false - type: object properties: type: type: string const: experiment-metric title: type: string description: type: string snapshotId: type: string experimentId: type: string metricIds: type: array items: type: string variationIds: type: array items: type: string baselineRow: type: number differenceType: type: string enum: - absolute - relative - scaled columnsFilter: type: array items: type: string enum: - Metric & Variation Names - Baseline Average - Variation Averages - Chance to Win - CI Graph - Lift sliceTagsFilter: type: array items: type: string metricTagFilter: type: array items: type: string sortBy: anyOf: - type: string enum: - metrics - metricTags - significance - change - type: 'null' sortDirection: anyOf: - type: string enum: - asc - desc - type: 'null' required: - type - title - description - snapshotId - experimentId - metricIds - variationIds - baselineRow - differenceType - columnsFilter - sliceTagsFilter - metricTagFilter - sortBy - sortDirection additionalProperties: false - type: object properties: type: type: string const: experiment-dimension title: type: string description: type: string snapshotId: type: string experimentId: type: string dimensionId: type: string dimensionValues: type: array items: type: string metricIds: type: array items: type: string variationIds: type: array items: type: string baselineRow: type: number differenceType: type: string enum: - absolute - relative - scaled columnsFilter: type: array items: type: string enum: - Metric & Variation Names - Baseline Average - Variation Averages - Chance to Win - CI Graph - Lift metricTagFilter: type: array items: type: string sortBy: anyOf: - type: string enum: - metrics - metricTags - significance - change - type: 'null' sortDirection: anyOf: - type: string enum: - asc - desc - type: 'null' required: - type - title - description - snapshotId - experimentId - dimensionId - dimensionValues - metricIds - variationIds - baselineRow - differenceType - columnsFilter - metricTagFilter - sortBy - sortDirection additionalProperties: false - type: object properties: type: type: string const: experiment-time-series title: type: string description: type: string snapshotId: type: string experimentId: type: string metricId: type: string metricIds: type: array items: type: string variationIds: type: array items: type: string differenceType: type: string enum: - absolute - relative - scaled sliceTagsFilter: type: array items: type: string metricTagFilter: type: array items: type: string sortBy: anyOf: - type: string enum: - metrics - metricTags - significance - change - type: 'null' sortDirection: anyOf: - type: string enum: - asc - desc - type: 'null' required: - type - title - description - snapshotId - experimentId - metricIds - variationIds - differenceType - sliceTagsFilter - metricTagFilter - sortBy - sortDirection additionalProperties: false - type: object properties: type: type: string const: experiment-traffic title: type: string description: type: string snapshotId: type: string experimentId: type: string showTable: type: boolean showTimeseries: type: boolean required: - type - title - description - experimentId - showTable - showTimeseries additionalProperties: false - type: object properties: type: type: string const: sql-explorer title: type: string description: type: string snapshotId: type: string savedQueryId: type: string dataVizConfigIndex: type: number blockConfig: type: array items: type: string required: - type - title - description - savedQueryId - blockConfig additionalProperties: false - type: object properties: type: type: string const: metric-explorer title: type: string description: type: string snapshotId: type: string factMetricId: type: string visualizationType: type: string enum: - histogram - bigNumber - timeseries valueType: type: string enum: - avg - sum metricAnalysisId: type: string analysisSettings: type: object properties: userIdType: type: string lookbackDays: type: number populationType: type: string enum: - metric - factTable - exposureQuery - population - segment populationId: anyOf: - type: string - type: 'null' additionalNumeratorFilters: type: array items: type: string additionalDenominatorFilters: type: array items: type: string startDate: type: string endDate: type: string required: - userIdType - lookbackDays - populationType - populationId - startDate - endDate additionalProperties: false required: - type - title - description - factMetricId - visualizationType - valueType - metricAnalysisId - analysisSettings additionalProperties: false required: - title - editLevel - shareLevel - enableAutoUpdates - blocks additionalProperties: false responses: '200': content: application/json: schema: type: object properties: dashboard: $ref: '#/components/schemas/Dashboard' required: - dashboard additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/dashboards' \ -H 'Authorization: Bearer YOUR_API_KEY' get: operationId: listDashboards summary: Get all dashboards tags: - Dashboards responses: '200': content: application/json: schema: type: object properties: dashboards: type: array items: $ref: '#/components/schemas/Dashboard' required: - dashboards additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/dashboards' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/dashboards/by-experiment/{experimentId}: get: operationId: getDashboardsForExperiment summary: Get all dashboards for an experiment tags: - Dashboards parameters: - name: experimentId in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: dashboards: type: array items: $ref: '#/components/schemas/Dashboard' required: - dashboards additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/dashboards/by-experiment/{experimentId}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/custom-fields: post: operationId: createCustomField summary: Create a single customField tags: - CustomFields requestBody: required: true content: application/json: schema: type: object properties: id: description: The unique key for the custom field type: string minLength: 1 name: description: The display name of the custom field type: string description: type: string placeholder: type: string defaultValue: anyOf: - type: string - type: number - type: boolean - type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ - type: string format: date pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ - type: array items: type: string - type: array items: type: number - type: array items: type: boolean - type: array items: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ - type: array items: type: string format: date pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ type: description: The type of value this custom field will take type: string enum: - text - textarea - markdown - enum - multiselect - url - number - boolean - date - datetime values: type: string required: type: boolean projects: type: array items: type: string sections: description: >- What types of objects this custom field is applicable to (feature, experiment) type: array items: type: string enum: - feature - experiment required: - id - name - type - required - sections additionalProperties: false responses: '200': content: application/json: schema: type: object properties: customField: $ref: '#/components/schemas/CustomField' required: - customField additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/custom-fields' \ -H 'Authorization: Bearer YOUR_API_KEY' get: operationId: listCustomFields summary: Get all custom fields tags: - CustomFields parameters: - name: projectId in: query description: '' schema: type: string responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/CustomField' x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/custom-fields' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/custom-fields/{id}: delete: operationId: deleteCustomField summary: Delete a single customField tags: - CustomFields parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/index' responses: '200': content: application/json: schema: type: object properties: deletedId: type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/custom-fields/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' get: operationId: getCustomField summary: Get a single customField tags: - CustomFields parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: customField: $ref: '#/components/schemas/CustomField' required: - customField additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/custom-fields/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' put: operationId: updateCustomField summary: Update a single customField tags: - CustomFields parameters: - name: id in: path required: true description: '' schema: type: string requestBody: required: true content: application/json: schema: type: object properties: name: description: The display name of the custom field type: string description: type: string placeholder: type: string defaultValue: anyOf: - type: string - type: number - type: boolean - type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ - type: string format: date pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ - type: array items: type: string - type: array items: type: number - type: array items: type: boolean - type: array items: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ - type: array items: type: string format: date pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ values: type: string required: type: boolean projects: type: array items: type: string sections: description: >- What types of objects this custom field is applicable to (feature, experiment) type: array items: type: string enum: - feature - experiment active: type: boolean additionalProperties: false responses: '200': content: application/json: schema: type: object properties: customField: $ref: '#/components/schemas/CustomField' required: - customField additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X PUT 'https://api.growthbook.io/api/v1/custom-fields/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/metric-groups/{id}: get: operationId: getMetricGroup summary: Get a single metricGroup tags: - MetricGroups parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: metricGroup: $ref: '#/components/schemas/MetricGroup' required: - metricGroup additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/metric-groups/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' delete: operationId: deleteMetricGroup summary: Delete a single metricGroup tags: - MetricGroups parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: deletedId: type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/metric-groups/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' put: operationId: updateMetricGroup summary: Update a single metricGroup tags: - MetricGroups parameters: - name: id in: path required: true description: '' schema: type: string requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: type: string tags: type: array items: type: string projects: type: array items: type: string metrics: type: array items: type: string datasource: type: string owner: description: >- 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. type: string archived: type: boolean additionalProperties: false responses: '200': content: application/json: schema: type: object properties: metricGroup: $ref: '#/components/schemas/MetricGroup' required: - metricGroup additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X PUT 'https://api.growthbook.io/api/v1/metric-groups/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/metric-groups: post: operationId: createMetricGroup summary: Create a single metricGroup tags: - MetricGroups requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: type: string tags: type: array items: type: string projects: type: array items: type: string metrics: type: array items: type: string datasource: type: string owner: description: >- 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. type: string archived: type: boolean required: - name - description - projects - metrics - datasource additionalProperties: false responses: '200': content: application/json: schema: type: object properties: metricGroup: $ref: '#/components/schemas/MetricGroup' required: - metricGroup additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/metric-groups' \ -H 'Authorization: Bearer YOUR_API_KEY' get: operationId: listMetricGroups summary: Get all metricGroups tags: - MetricGroups responses: '200': content: application/json: schema: type: object properties: metricGroups: type: array items: $ref: '#/components/schemas/MetricGroup' required: - metricGroups additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/metric-groups' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/teams/{id}: get: operationId: getTeam summary: Get a single team tags: - Teams parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: team: $ref: '#/components/schemas/Team' required: - team additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/teams/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' put: operationId: updateTeam summary: Update a single team tags: - Teams parameters: - name: id in: path required: true description: '' schema: type: string requestBody: required: true content: application/json: schema: type: object properties: name: type: string createdBy: type: string description: type: string role: description: The global role for members of this team type: string limitAccessByEnvironment: type: boolean environments: description: An empty array means 'all environments' type: array items: type: string projectRoles: type: array items: type: object properties: role: type: string limitAccessByEnvironment: type: boolean environments: type: array items: type: string teams: type: array items: type: string project: type: string required: - role - limitAccessByEnvironment - environments - project additionalProperties: false managedBy: anyOf: - type: object properties: type: type: string const: vercel resourceId: type: string required: - type - resourceId additionalProperties: false defaultProject: type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: team: $ref: '#/components/schemas/Team' required: - team additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X PUT 'https://api.growthbook.io/api/v1/teams/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' delete: operationId: deleteTeam summary: Delete a single team tags: - Teams parameters: - name: id in: path required: true description: '' schema: type: string - $ref: '#/components/parameters/deleteMembers' responses: '200': content: application/json: schema: type: object properties: deletedId: type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X DELETE 'https://api.growthbook.io/api/v1/teams/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/teams: post: operationId: createTeam summary: Create a single team tags: - Teams requestBody: required: true content: application/json: schema: type: object properties: name: type: string createdBy: type: string description: type: string role: description: The global role for members of this team type: string limitAccessByEnvironment: type: boolean environments: description: An empty array means 'all environments' type: array items: type: string projectRoles: type: array items: type: object properties: role: type: string limitAccessByEnvironment: type: boolean environments: type: array items: type: string teams: type: array items: type: string project: type: string required: - role - limitAccessByEnvironment - environments - project additionalProperties: false managedBy: anyOf: - type: object properties: type: type: string const: vercel resourceId: type: string required: - type - resourceId additionalProperties: false defaultProject: type: string required: - name - description - role additionalProperties: false responses: '200': content: application/json: schema: type: object properties: team: $ref: '#/components/schemas/Team' required: - team additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/teams' \ -H 'Authorization: Bearer YOUR_API_KEY' get: operationId: listTeams summary: Get all teams tags: - Teams responses: '200': content: application/json: schema: type: object properties: teams: type: array items: $ref: '#/components/schemas/Team' required: - teams additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/teams' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/teams/{id}/members: post: operationId: addTeamMembers summary: Add members to team tags: - Teams parameters: - name: id in: path required: true description: '' schema: type: string requestBody: required: true content: application/json: schema: type: object properties: members: type: array items: type: string required: - members additionalProperties: false responses: '200': content: application/json: schema: type: object properties: status: type: number required: - status additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X POST 'https://api.growthbook.io/api/v1/teams/{id}/members' \ -H 'Authorization: Bearer YOUR_API_KEY' delete: operationId: removeTeamMember summary: Remove members from team tags: - Teams parameters: - name: id in: path required: true description: '' schema: type: string requestBody: required: true content: application/json: schema: type: object properties: members: type: array items: type: string required: - members additionalProperties: false responses: '200': content: application/json: schema: type: object properties: status: type: number required: - status additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/teams/{id}/members' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/experiment-templates/{id}: get: operationId: getExperimentTemplate summary: Get a single experimentTemplate tags: - ExperimentTemplates parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: experimentTemplate: $ref: '#/components/schemas/ExperimentTemplate' required: - experimentTemplate additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/experiment-templates/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' delete: operationId: deleteExperimentTemplate summary: Delete a single experimentTemplate tags: - ExperimentTemplates parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: deletedId: type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/experiment-templates/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' put: operationId: updateExperimentTemplate summary: Update a single experimentTemplate tags: - ExperimentTemplates parameters: - name: id in: path required: true description: '' schema: type: string requestBody: required: true content: application/json: schema: type: object properties: project: type: string templateMetadata: type: object properties: name: type: string description: type: string required: - name additionalProperties: false type: type: string enum: - standard hypothesis: type: string description: type: string tags: type: array items: type: string customFields: type: object propertyNames: type: string additionalProperties: type: string datasource: type: string exposureQueryId: type: string hashAttribute: type: string fallbackAttribute: type: string disableStickyBucketing: type: boolean goalMetrics: type: array items: type: string secondaryMetrics: type: array items: type: string guardrailMetrics: type: array items: type: string activationMetric: type: string statsEngine: type: string enum: - bayesian - frequentist segment: type: string skipPartialData: type: boolean targeting: type: object properties: coverage: type: number savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false condition: type: string required: - coverage - condition additionalProperties: false customMetricSlices: type: array items: type: object properties: slices: type: array items: type: object properties: column: type: string levels: type: array items: type: string required: - column - levels additionalProperties: false required: - slices additionalProperties: false additionalProperties: false responses: '200': content: application/json: schema: type: object properties: experimentTemplate: $ref: '#/components/schemas/ExperimentTemplate' required: - experimentTemplate additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v1/experiment-templates/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/experiment-templates: post: operationId: createExperimentTemplate summary: Create a single experimentTemplate tags: - ExperimentTemplates requestBody: required: true content: application/json: schema: type: object properties: project: type: string templateMetadata: type: object properties: name: type: string description: type: string required: - name additionalProperties: false type: type: string enum: - standard hypothesis: type: string description: type: string tags: type: array items: type: string customFields: type: object propertyNames: type: string additionalProperties: type: string datasource: type: string exposureQueryId: type: string hashAttribute: type: string fallbackAttribute: type: string disableStickyBucketing: type: boolean goalMetrics: type: array items: type: string secondaryMetrics: type: array items: type: string guardrailMetrics: type: array items: type: string activationMetric: type: string statsEngine: type: string enum: - bayesian - frequentist segment: type: string skipPartialData: type: boolean targeting: type: object properties: coverage: type: number savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false condition: type: string required: - coverage - condition additionalProperties: false customMetricSlices: type: array items: type: object properties: slices: type: array items: type: object properties: column: type: string levels: type: array items: type: string required: - column - levels additionalProperties: false required: - slices additionalProperties: false required: - templateMetadata - type - datasource - exposureQueryId - statsEngine - targeting additionalProperties: false responses: '200': content: application/json: schema: type: object properties: experimentTemplate: $ref: '#/components/schemas/ExperimentTemplate' required: - experimentTemplate additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/experiment-templates' \ -H 'Authorization: Bearer YOUR_API_KEY' get: operationId: listExperimentTemplates summary: Get all experimentTemplates tags: - ExperimentTemplates parameters: - name: projectId in: query description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: experimentTemplates: type: array items: $ref: '#/components/schemas/ExperimentTemplate' required: - experimentTemplates additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/experiment-templates' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/experiment-templates/bulk-import: post: operationId: bulkImportExperimentTemplates summary: Bulk create or update experiment templates tags: - ExperimentTemplates requestBody: required: true content: application/json: schema: type: object properties: templates: type: array items: type: object properties: id: type: string data: type: object properties: project: type: string templateMetadata: type: object properties: name: type: string description: type: string required: - name additionalProperties: false type: type: string enum: - standard hypothesis: type: string description: type: string tags: type: array items: type: string customFields: type: object propertyNames: type: string additionalProperties: type: string datasource: type: string exposureQueryId: type: string hashAttribute: type: string fallbackAttribute: type: string disableStickyBucketing: type: boolean goalMetrics: type: array items: type: string secondaryMetrics: type: array items: type: string guardrailMetrics: type: array items: type: string activationMetric: type: string statsEngine: type: string enum: - bayesian - frequentist segment: type: string skipPartialData: type: boolean targeting: type: object properties: coverage: type: number savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false condition: type: string required: - coverage - condition additionalProperties: false customMetricSlices: type: array items: type: object properties: slices: type: array items: type: object properties: column: type: string levels: type: array items: type: string required: - column - levels additionalProperties: false required: - slices additionalProperties: false required: - templateMetadata - type - datasource - exposureQueryId - statsEngine - targeting additionalProperties: false required: - id - data additionalProperties: false required: - templates additionalProperties: false responses: '200': content: application/json: schema: type: object properties: added: type: integer updated: type: integer required: - added - updated additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/experiment-templates/bulk-import' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/product-analytics/metric-exploration: post: operationId: postMetricExploration summary: Create a Metric based visualization tags: - AnalyticsExplorations parameters: - $ref: '#/components/parameters/cache' requestBody: required: true content: application/json: schema: type: object properties: datasource: description: ID of the datasource to query type: string dimensions: type: array items: anyOf: - type: object properties: dimensionType: type: string const: date column: anyOf: - type: string - type: 'null' dateGranularity: type: string enum: - auto - hour - day - week - month - year required: - dimensionType - column - dateGranularity additionalProperties: false - type: object properties: dimensionType: type: string const: dynamic column: anyOf: - type: string - type: 'null' maxValues: type: number required: - dimensionType - column - maxValues additionalProperties: false - type: object properties: dimensionType: type: string const: static column: type: string values: type: array items: type: string required: - dimensionType - column - values additionalProperties: false - type: object properties: dimensionType: type: string const: slice slices: type: array items: type: object properties: name: type: string filters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false required: - name - filters additionalProperties: false required: - dimensionType - slices additionalProperties: false chartType: type: string enum: - line - area - timeseries-table - table - bar - stackedBar - horizontalBar - stackedHorizontalBar - bigNumber dateRange: type: object properties: predefined: type: string enum: - today - last7Days - last30Days - last90Days - customLookback - customDateRange lookbackValue: anyOf: - type: number - type: 'null' lookbackUnit: anyOf: - type: string enum: - hour - day - week - month - type: 'null' startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' required: - predefined additionalProperties: false showAs: type: string enum: - total - per_unit type: type: string const: metric dataset: type: object properties: type: type: string const: metric values: type: array items: type: object properties: name: type: string rowFilters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false type: type: string const: metric metricId: type: string unit: anyOf: - type: string - type: 'null' denominatorUnit: anyOf: - type: string - type: 'null' required: - name - rowFilters - type - metricId - unit - denominatorUnit additionalProperties: false required: - type - values additionalProperties: false required: - datasource - dimensions - chartType - dateRange - type - dataset additionalProperties: false responses: '200': content: application/json: schema: type: object properties: exploration: anyOf: - type: object properties: id: type: string dateCreated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ dateUpdated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ datasource: type: string status: type: string enum: - running - success - error dateStart: type: string dateEnd: type: string error: anyOf: - type: string - type: 'null' result: type: object properties: rows: type: array items: type: object properties: dimensions: type: array items: anyOf: - type: string - type: 'null' values: type: array items: type: object properties: metricId: type: string numerator: anyOf: - type: number - type: 'null' denominator: anyOf: - type: number - type: 'null' required: - metricId - numerator - denominator additionalProperties: false required: - dimensions - values additionalProperties: false required: - rows additionalProperties: false config: type: object properties: datasource: description: ID of the datasource to query type: string dimensions: type: array items: anyOf: - type: object properties: dimensionType: type: string const: date column: anyOf: - type: string - type: 'null' dateGranularity: type: string enum: - auto - hour - day - week - month - year required: - dimensionType - column - dateGranularity additionalProperties: false - type: object properties: dimensionType: type: string const: dynamic column: anyOf: - type: string - type: 'null' maxValues: type: number required: - dimensionType - column - maxValues additionalProperties: false - type: object properties: dimensionType: type: string const: static column: type: string values: type: array items: type: string required: - dimensionType - column - values additionalProperties: false - type: object properties: dimensionType: type: string const: slice slices: type: array items: type: object properties: name: type: string filters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false required: - name - filters additionalProperties: false required: - dimensionType - slices additionalProperties: false chartType: type: string enum: - line - area - timeseries-table - table - bar - stackedBar - horizontalBar - stackedHorizontalBar - bigNumber dateRange: type: object properties: predefined: type: string enum: - today - last7Days - last30Days - last90Days - customLookback - customDateRange lookbackValue: anyOf: - type: number - type: 'null' lookbackUnit: anyOf: - type: string enum: - hour - day - week - month - type: 'null' startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' required: - predefined additionalProperties: false showAs: type: string enum: - total - per_unit type: type: string const: metric dataset: type: object properties: type: type: string const: metric values: type: array items: type: object properties: name: type: string rowFilters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false type: type: string const: metric metricId: type: string unit: anyOf: - type: string - type: 'null' denominatorUnit: anyOf: - type: string - type: 'null' required: - name - rowFilters - type - metricId - unit - denominatorUnit additionalProperties: false required: - type - values additionalProperties: false required: - datasource - dimensions - chartType - dateRange - type - dataset additionalProperties: false required: - id - dateCreated - dateUpdated - datasource - status - dateStart - dateEnd - result - config additionalProperties: false - type: 'null' query: anyOf: - $ref: '#/components/schemas/Query' - type: 'null' explorationUrl: description: >- A direct link to view this exploration in the GrowthBook Application. type: string message: description: >- Present when `exploration` is null, explaining why no result was returned. type: string required: - exploration - query additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/product-analytics/metric-exploration' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/product-analytics/fact-table-exploration: post: operationId: postFactTableExploration summary: Run a Fact Table based visualization tags: - AnalyticsExplorations parameters: - $ref: '#/components/parameters/cache' requestBody: required: true content: application/json: schema: type: object properties: datasource: description: ID of the datasource to query type: string dimensions: type: array items: anyOf: - type: object properties: dimensionType: type: string const: date column: anyOf: - type: string - type: 'null' dateGranularity: type: string enum: - auto - hour - day - week - month - year required: - dimensionType - column - dateGranularity additionalProperties: false - type: object properties: dimensionType: type: string const: dynamic column: anyOf: - type: string - type: 'null' maxValues: type: number required: - dimensionType - column - maxValues additionalProperties: false - type: object properties: dimensionType: type: string const: static column: type: string values: type: array items: type: string required: - dimensionType - column - values additionalProperties: false - type: object properties: dimensionType: type: string const: slice slices: type: array items: type: object properties: name: type: string filters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false required: - name - filters additionalProperties: false required: - dimensionType - slices additionalProperties: false chartType: type: string enum: - line - area - timeseries-table - table - bar - stackedBar - horizontalBar - stackedHorizontalBar - bigNumber dateRange: type: object properties: predefined: type: string enum: - today - last7Days - last30Days - last90Days - customLookback - customDateRange lookbackValue: anyOf: - type: number - type: 'null' lookbackUnit: anyOf: - type: string enum: - hour - day - week - month - type: 'null' startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' required: - predefined additionalProperties: false showAs: type: string enum: - total - per_unit type: type: string const: fact_table dataset: type: object properties: type: type: string const: fact_table factTableId: anyOf: - type: string - type: 'null' values: type: array items: type: object properties: name: type: string rowFilters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false type: type: string const: fact_table valueType: type: string enum: - unit_count - count - sum valueColumn: anyOf: - type: string - type: 'null' unit: anyOf: - type: string - type: 'null' required: - name - rowFilters - type - valueType - valueColumn - unit additionalProperties: false required: - type - factTableId - values additionalProperties: false required: - datasource - dimensions - chartType - dateRange - type - dataset additionalProperties: false responses: '200': content: application/json: schema: type: object properties: exploration: anyOf: - type: object properties: id: type: string dateCreated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ dateUpdated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ datasource: type: string status: type: string enum: - running - success - error dateStart: type: string dateEnd: type: string error: anyOf: - type: string - type: 'null' result: type: object properties: rows: type: array items: type: object properties: dimensions: type: array items: anyOf: - type: string - type: 'null' values: type: array items: type: object properties: metricId: type: string numerator: anyOf: - type: number - type: 'null' denominator: anyOf: - type: number - type: 'null' required: - metricId - numerator - denominator additionalProperties: false required: - dimensions - values additionalProperties: false required: - rows additionalProperties: false config: type: object properties: datasource: description: ID of the datasource to query type: string dimensions: type: array items: anyOf: - type: object properties: dimensionType: type: string const: date column: anyOf: - type: string - type: 'null' dateGranularity: type: string enum: - auto - hour - day - week - month - year required: - dimensionType - column - dateGranularity additionalProperties: false - type: object properties: dimensionType: type: string const: dynamic column: anyOf: - type: string - type: 'null' maxValues: type: number required: - dimensionType - column - maxValues additionalProperties: false - type: object properties: dimensionType: type: string const: static column: type: string values: type: array items: type: string required: - dimensionType - column - values additionalProperties: false - type: object properties: dimensionType: type: string const: slice slices: type: array items: type: object properties: name: type: string filters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false required: - name - filters additionalProperties: false required: - dimensionType - slices additionalProperties: false chartType: type: string enum: - line - area - timeseries-table - table - bar - stackedBar - horizontalBar - stackedHorizontalBar - bigNumber dateRange: type: object properties: predefined: type: string enum: - today - last7Days - last30Days - last90Days - customLookback - customDateRange lookbackValue: anyOf: - type: number - type: 'null' lookbackUnit: anyOf: - type: string enum: - hour - day - week - month - type: 'null' startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' required: - predefined additionalProperties: false showAs: type: string enum: - total - per_unit type: type: string const: fact_table dataset: type: object properties: type: type: string const: fact_table factTableId: anyOf: - type: string - type: 'null' values: type: array items: type: object properties: name: type: string rowFilters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false type: type: string const: fact_table valueType: type: string enum: - unit_count - count - sum valueColumn: anyOf: - type: string - type: 'null' unit: anyOf: - type: string - type: 'null' required: - name - rowFilters - type - valueType - valueColumn - unit additionalProperties: false required: - type - factTableId - values additionalProperties: false required: - datasource - dimensions - chartType - dateRange - type - dataset additionalProperties: false required: - id - dateCreated - dateUpdated - datasource - status - dateStart - dateEnd - result - config additionalProperties: false - type: 'null' query: anyOf: - $ref: '#/components/schemas/Query' - type: 'null' explorationUrl: description: >- A direct link to view this exploration in the GrowthBook Application. type: string message: description: >- Present when `exploration` is null, explaining why no result was returned. type: string required: - exploration - query additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/product-analytics/fact-table-exploration' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/product-analytics/data-source-exploration: post: operationId: postDataSourceExploration summary: Create a Data Source based visualization tags: - AnalyticsExplorations parameters: - $ref: '#/components/parameters/cache' requestBody: required: true content: application/json: schema: type: object properties: datasource: description: ID of the datasource to query type: string dimensions: type: array items: anyOf: - type: object properties: dimensionType: type: string const: date column: anyOf: - type: string - type: 'null' dateGranularity: type: string enum: - auto - hour - day - week - month - year required: - dimensionType - column - dateGranularity additionalProperties: false - type: object properties: dimensionType: type: string const: dynamic column: anyOf: - type: string - type: 'null' maxValues: type: number required: - dimensionType - column - maxValues additionalProperties: false - type: object properties: dimensionType: type: string const: static column: type: string values: type: array items: type: string required: - dimensionType - column - values additionalProperties: false - type: object properties: dimensionType: type: string const: slice slices: type: array items: type: object properties: name: type: string filters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false required: - name - filters additionalProperties: false required: - dimensionType - slices additionalProperties: false chartType: type: string enum: - line - area - timeseries-table - table - bar - stackedBar - horizontalBar - stackedHorizontalBar - bigNumber dateRange: type: object properties: predefined: type: string enum: - today - last7Days - last30Days - last90Days - customLookback - customDateRange lookbackValue: anyOf: - type: number - type: 'null' lookbackUnit: anyOf: - type: string enum: - hour - day - week - month - type: 'null' startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' required: - predefined additionalProperties: false showAs: type: string enum: - total - per_unit type: type: string const: data_source dataset: type: object properties: type: type: string const: data_source table: type: string path: type: string timestampColumn: type: string columnTypes: type: object propertyNames: type: string additionalProperties: type: string enum: - string - number - date - boolean - other values: type: array items: type: object properties: name: type: string rowFilters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false type: type: string const: data_source valueType: type: string enum: - unit_count - count - sum valueColumn: anyOf: - type: string - type: 'null' unit: anyOf: - type: string - type: 'null' required: - name - rowFilters - type - valueType - valueColumn - unit additionalProperties: false required: - type - table - path - timestampColumn - columnTypes - values additionalProperties: false required: - datasource - dimensions - chartType - dateRange - type - dataset additionalProperties: false responses: '200': content: application/json: schema: type: object properties: exploration: anyOf: - type: object properties: id: type: string dateCreated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ dateUpdated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ datasource: type: string status: type: string enum: - running - success - error dateStart: type: string dateEnd: type: string error: anyOf: - type: string - type: 'null' result: type: object properties: rows: type: array items: type: object properties: dimensions: type: array items: anyOf: - type: string - type: 'null' values: type: array items: type: object properties: metricId: type: string numerator: anyOf: - type: number - type: 'null' denominator: anyOf: - type: number - type: 'null' required: - metricId - numerator - denominator additionalProperties: false required: - dimensions - values additionalProperties: false required: - rows additionalProperties: false config: type: object properties: datasource: description: ID of the datasource to query type: string dimensions: type: array items: anyOf: - type: object properties: dimensionType: type: string const: date column: anyOf: - type: string - type: 'null' dateGranularity: type: string enum: - auto - hour - day - week - month - year required: - dimensionType - column - dateGranularity additionalProperties: false - type: object properties: dimensionType: type: string const: dynamic column: anyOf: - type: string - type: 'null' maxValues: type: number required: - dimensionType - column - maxValues additionalProperties: false - type: object properties: dimensionType: type: string const: static column: type: string values: type: array items: type: string required: - dimensionType - column - values additionalProperties: false - type: object properties: dimensionType: type: string const: slice slices: type: array items: type: object properties: name: type: string filters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false required: - name - filters additionalProperties: false required: - dimensionType - slices additionalProperties: false chartType: type: string enum: - line - area - timeseries-table - table - bar - stackedBar - horizontalBar - stackedHorizontalBar - bigNumber dateRange: type: object properties: predefined: type: string enum: - today - last7Days - last30Days - last90Days - customLookback - customDateRange lookbackValue: anyOf: - type: number - type: 'null' lookbackUnit: anyOf: - type: string enum: - hour - day - week - month - type: 'null' startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' required: - predefined additionalProperties: false showAs: type: string enum: - total - per_unit type: type: string const: data_source dataset: type: object properties: type: type: string const: data_source table: type: string path: type: string timestampColumn: type: string columnTypes: type: object propertyNames: type: string additionalProperties: type: string enum: - string - number - date - boolean - other values: type: array items: type: object properties: name: type: string rowFilters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false type: type: string const: data_source valueType: type: string enum: - unit_count - count - sum valueColumn: anyOf: - type: string - type: 'null' unit: anyOf: - type: string - type: 'null' required: - name - rowFilters - type - valueType - valueColumn - unit additionalProperties: false required: - type - table - path - timestampColumn - columnTypes - values additionalProperties: false required: - datasource - dimensions - chartType - dateRange - type - dataset additionalProperties: false required: - id - dateCreated - dateUpdated - datasource - status - dateStart - dateEnd - result - config additionalProperties: false - type: 'null' query: anyOf: - $ref: '#/components/schemas/Query' - type: 'null' explorationUrl: description: >- A direct link to view this exploration in the GrowthBook Application. type: string message: description: >- Present when `exploration` is null, explaining why no result was returned. type: string required: - exploration - query additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/product-analytics/data-source-exploration' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/ramp-schedule-templates/{id}: get: operationId: getRampScheduleTemplate summary: Get a single rampScheduleTemplate tags: - RampScheduleTemplates parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: rampScheduleTemplate: $ref: '#/components/schemas/RampScheduleTemplate' required: - rampScheduleTemplate additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/ramp-schedule-templates/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' delete: operationId: deleteRampScheduleTemplate summary: Delete a single rampScheduleTemplate tags: - RampScheduleTemplates parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: deletedId: type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/ramp-schedule-templates/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' put: operationId: updateRampScheduleTemplate summary: Update a single rampScheduleTemplate tags: - RampScheduleTemplates parameters: - name: id in: path required: true description: '' schema: type: string requestBody: required: true content: application/json: schema: type: object properties: name: type: string steps: type: array items: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: interval seconds: type: number exclusiveMinimum: 0 required: - type - seconds additionalProperties: false - type: object properties: type: type: string const: approval required: - type additionalProperties: false - type: object properties: type: type: string const: scheduled at: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ required: - type - at additionalProperties: false actions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' enabled: anyOf: - type: boolean - type: 'null' required: - ruleId additionalProperties: false required: - targetType - targetId - patch additionalProperties: false approvalNotes: anyOf: - type: string - type: 'null' required: - trigger - actions additionalProperties: false endPatch: type: object properties: coverage: type: number minimum: 0 maximum: 1 condition: type: string savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false additionalProperties: false official: type: boolean additionalProperties: false responses: '200': content: application/json: schema: type: object properties: rampScheduleTemplate: $ref: '#/components/schemas/RampScheduleTemplate' required: - rampScheduleTemplate additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X PUT 'https://api.growthbook.io/api/v1/ramp-schedule-templates/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/ramp-schedule-templates: post: operationId: createRampScheduleTemplate summary: Create a single rampScheduleTemplate tags: - RampScheduleTemplates requestBody: required: true content: application/json: schema: type: object properties: name: type: string steps: type: array items: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: interval seconds: type: number exclusiveMinimum: 0 required: - type - seconds additionalProperties: false - type: object properties: type: type: string const: approval required: - type additionalProperties: false - type: object properties: type: type: string const: scheduled at: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ required: - type - at additionalProperties: false actions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' enabled: anyOf: - type: boolean - type: 'null' required: - ruleId additionalProperties: false required: - targetType - targetId - patch additionalProperties: false approvalNotes: anyOf: - type: string - type: 'null' required: - trigger - actions additionalProperties: false endPatch: type: object properties: coverage: type: number minimum: 0 maximum: 1 condition: type: string savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false additionalProperties: false official: type: boolean required: - name - steps additionalProperties: false responses: '200': content: application/json: schema: type: object properties: rampScheduleTemplate: $ref: '#/components/schemas/RampScheduleTemplate' required: - rampScheduleTemplate additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X POST 'https://api.growthbook.io/api/v1/ramp-schedule-templates' \ -H 'Authorization: Bearer YOUR_API_KEY' get: operationId: listRampScheduleTemplates summary: Get all rampScheduleTemplates tags: - RampScheduleTemplates responses: '200': content: application/json: schema: type: object properties: rampScheduleTemplates: type: array items: $ref: '#/components/schemas/RampScheduleTemplate' required: - rampScheduleTemplates additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X GET 'https://api.growthbook.io/api/v1/ramp-schedule-templates' \ -H 'Authorization: Bearer YOUR_API_KEY' /v1/ramp-schedules/{id}: get: operationId: getRampSchedule summary: Get a single rampSchedule tags: - ramp-schedules parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: rampSchedule: $ref: '#/components/schemas/RampSchedule' required: - rampSchedule additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X GET 'https://api.growthbook.io/api/v1/ramp-schedules/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' delete: operationId: deleteRampSchedule summary: Delete a single rampSchedule description: > Permanently deletes a ramp schedule. This does not undo any rule patches that were already applied by completed steps. tags: - ramp-schedules parameters: - name: id in: path required: true description: '' schema: type: string responses: '200': content: application/json: schema: type: object properties: deletedId: type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: >- curl -X DELETE 'https://api.growthbook.io/api/v1/ramp-schedules/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' put: operationId: updateRampSchedule summary: Update a single rampSchedule description: > Updates the name, steps, endActions, startDate, or endCondition 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`. tags: - ramp-schedules parameters: - name: id in: path required: true description: '' schema: type: string requestBody: required: true content: application/json: schema: type: object properties: name: type: string steps: type: array items: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: interval seconds: type: number exclusiveMinimum: 0 required: - type - seconds additionalProperties: false - type: object properties: type: type: string const: approval required: - type additionalProperties: false - type: object properties: type: type: string const: scheduled at: type: string required: - type - at additionalProperties: false actions: type: array items: type: object properties: patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' required: - ruleId additionalProperties: false targetType: type: string const: feature-rule targetId: type: string required: - patch additionalProperties: false approvalNotes: anyOf: - type: string - type: 'null' required: - trigger additionalProperties: false endActions: type: array items: type: object properties: patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' required: - ruleId additionalProperties: false targetType: type: string const: feature-rule targetId: type: string required: - patch additionalProperties: false startDate: anyOf: - type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ - type: 'null' endCondition: anyOf: - type: object properties: trigger: type: object properties: type: type: string const: scheduled at: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ required: - type - at additionalProperties: false additionalProperties: false - type: 'null' additionalProperties: false responses: '200': content: application/json: schema: type: object properties: rampSchedule: $ref: '#/components/schemas/RampSchedule' required: - rampSchedule additionalProperties: false x-codeSamples: - lang: cURL source: |- curl -X PUT 'https://api.growthbook.io/api/v1/ramp-schedules/{id}' \ -H 'Authorization: Bearer YOUR_API_KEY' components: parameters: limit: name: limit in: query description: The number of items to return schema: default: 10 description: The number of items to return type: integer minimum: 1 maximum: 100 offset: name: offset in: query description: How many items to skip (use in conjunction with limit for pagination) schema: default: 0 description: How many items to skip (use in conjunction with limit for pagination) type: integer minimum: 0 projectId: name: projectId in: query description: Filter by project id schema: description: Filter by project id type: string clientKey: name: clientKey in: query description: Filter by a SDK connection's client key schema: description: Filter by a SDK connection's client key type: string skipPagination: name: skipPagination in: query description: >- 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. schema: description: >- 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. default: false anyOf: - type: string const: 'true' - type: string const: 'false' - type: string const: '0' - type: string const: '1' - type: boolean x-selfHostedOnly: true x-requiresEnv: API_ALLOW_SKIP_PAGINATION id: name: id in: path required: true description: The id of the requested resource schema: description: The id of the requested resource type: string withRevisions: name: withRevisions in: query description: Also return feature revisions (all, draft, or published statuses) schema: description: Also return feature revisions (all, draft, or published statuses) type: string enum: - all - drafts - published - none ids: name: ids in: query required: true description: > Comma-separated list of feature IDs (URL-encoded if needed). Example: `my_feature,another_feature` schema: description: > Comma-separated list of feature IDs (URL-encoded if needed). Example: `my_feature,another_feature` type: string featureId: name: featureId in: query description: '' schema: type: string status: name: status in: query description: '' schema: type: string enum: - draft - published - discarded - approved - changes-requested - pending-review - pending-parent author: name: author in: query description: '' schema: type: string mine: name: mine in: query description: >- If true, return only revisions authored by or contributed to by the calling user. Requires a user-scoped API key. Mutually exclusive with `author`. schema: description: >- If true, return only revisions authored by or contributed to by the calling user. Requires a user-scoped API key. Mutually exclusive with `author`. anyOf: - type: string const: 'true' - type: string const: 'false' - type: string const: '0' - type: string const: '1' - type: boolean version: name: version in: path required: true description: '' schema: type: integer ruleId: name: ruleId in: path required: true description: '' schema: type: string datasourceId: name: datasourceId in: query description: Filter by Data Source schema: description: Filter by Data Source type: string trackingKey: name: trackingKey in: query description: Filter by experiment tracking key schema: description: Filter by experiment tracking key type: string experimentId: name: experimentId in: query description: >- Filter the returned list by the experiment tracking key (not the internal experiment ID). Note, this was deprecated to help reduce confusion, consider using `trackingKey` instead, which is functionally identical. You cannot use both params at the same time. schema: deprecated: true description: >- Filter the returned list by the experiment tracking key (not the internal experiment ID). Note, this was deprecated to help reduce confusion, consider using `trackingKey` instead, which is functionally identical. You cannot use both params at the same time. type: string phase: name: phase in: query description: '' schema: type: string dimension: name: dimension in: query description: '' schema: type: string variationId: name: variationId in: path required: true description: '' schema: type: string property: name: property in: path required: true description: The attribute property schema: description: The attribute property type: string withProxy: name: withProxy in: query description: '' schema: type: string multiOrg: name: multiOrg in: query description: '' schema: type: string key: name: key in: path required: true description: The key of the requested sdkConnection schema: description: The key of the requested sdkConnection type: string dataSourceId: name: dataSourceId in: path required: true description: The id of the data source schema: description: The id of the data source type: string includeExperiment: name: includeExperiment in: query description: Include the associated experiment in payload schema: description: Include the associated experiment in payload type: integer visualChangeId: name: visualChangeId in: path required: true description: Specify a specific visual change schema: description: Specify a specific visual change type: string search: name: search in: query description: >- Search string to search organization names, owner emails, and external ids by schema: description: >- Search string to search organization names, owner emails, and external ids by type: string factTableId: name: factTableId in: path required: true description: Specify a specific fact table schema: description: Specify a specific fact table type: string deleteMissing: name: deleteMissing in: query description: >- Whether to delete code references that are no longer present in the submitted data schema: description: >- Whether to delete code references that are no longer present in the submitted data default: 'false' type: string enum: - 'true' - 'false' userName: name: userName in: query description: Name of the user. schema: description: Name of the user. type: string userEmail: name: userEmail in: query description: Email address of the user. schema: description: Email address of the user. type: string globalRole: name: globalRole in: query description: Name of the global role schema: description: Name of the global role type: string tableId: name: tableId in: path required: true description: The id of the information schema table schema: description: The id of the information schema table type: string environment: name: environment in: query description: '' schema: type: string index: name: index in: query description: '' schema: type: string deleteMembers: name: deleteMembers in: query description: When 'true', enables deleting a team that contains members schema: description: When 'true', enables deleting a team that contains members type: string cache: name: cache in: query description: >- Controls cache behavior for this exploration: `preferred` (default) returns a cached result if one exists, otherwise runs a new query; `never` always runs a new query, ignoring any cached results; `required` only returns a cached result, if none exists returns exploration: null with a message schema: description: >- Controls cache behavior for this exploration: `preferred` (default) returns a cached result if one exists, otherwise runs a new query; `never` always runs a new query, ignoring any cached results; `required` only returns a cached result, if none exists returns exploration: null with a message type: string enum: - preferred - required - never schemas: Feature: type: object properties: id: type: string dateCreated: format: date-time type: string dateUpdated: format: date-time type: string archived: type: boolean description: type: string owner: description: The userId of the owner (or raw owner name/email for legacy records) type: string ownerEmail: description: >- The email address of the owner, when the owner can be resolved to a known user. type: string project: type: string valueType: type: string enum: - boolean - string - number - json defaultValue: type: string tags: type: array items: type: string environments: type: object propertyNames: type: string additionalProperties: $ref: '#/components/schemas/FeatureEnvironment' prerequisites: description: Feature IDs. Each feature must evaluate to `true` type: array items: type: string revision: type: object properties: version: type: integer comment: type: string date: format: date-time type: string createdBy: type: string publishedBy: type: string required: - version - comment - date - createdBy - publishedBy additionalProperties: false customFields: type: object propertyNames: type: string additionalProperties: {} holdout: anyOf: - type: object properties: id: description: Holdout ID type: string value: description: >- The feature value assigned to users in the holdout treatment group type: string required: - id - value additionalProperties: false - type: 'null' required: - id - dateCreated - dateUpdated - archived - description - owner - project - valueType - defaultValue - tags - environments - revision additionalProperties: false FeatureEnvironment: type: object properties: enabled: type: boolean defaultValue: type: string rules: type: array items: $ref: '#/components/schemas/FeatureRule' definition: description: A JSON stringified [FeatureDefinition](#tag/FeatureDefinition_model) type: string draft: type: object properties: enabled: type: boolean defaultValue: type: string rules: type: array items: $ref: '#/components/schemas/FeatureRule' definition: description: >- A JSON stringified [FeatureDefinition](#tag/FeatureDefinition_model) type: string required: - enabled - defaultValue - rules additionalProperties: false required: - enabled - defaultValue - rules additionalProperties: false FeatureRule: anyOf: - $ref: '#/components/schemas/FeatureForceRule' - $ref: '#/components/schemas/FeatureRolloutRule' - $ref: '#/components/schemas/FeatureExperimentRule' - $ref: '#/components/schemas/FeatureExperimentRefRule' - $ref: '#/components/schemas/FeatureSafeRolloutRule' FeatureForceRule: allOf: - description: > Common fields shared by all feature rule types. Specific rule types extend this base with their own required properties (value, coverage, etc.). type: object properties: description: type: string condition: type: string id: type: string enabled: type: boolean scheduleRules: description: Simple time-based on/off schedule for this rule type: array items: $ref: '#/components/schemas/ScheduleRule' scheduleType: description: > UI hint for which scheduling mode is active: - `none` – no schedule - `schedule` – simple time-based enable/disable via `scheduleRules` - `ramp` – multi-step ramp-up controlled by an associated RampSchedule document type: string enum: - none - schedule - ramp savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID of the prerequisite type: string condition: type: string required: - id - condition additionalProperties: false required: - description - id - enabled additionalProperties: false - type: object properties: type: type: string const: force value: type: string required: - type - value additionalProperties: false ScheduleRule: type: object properties: enabled: description: >- Whether the rule should be enabled or disabled at the specified timestamp. type: boolean timestamp: description: ISO timestamp when the rule should activate. anyOf: - format: date-time type: string - type: 'null' required: - enabled - timestamp additionalProperties: false FeatureRolloutRule: allOf: - description: > Common fields shared by all feature rule types. Specific rule types extend this base with their own required properties (value, coverage, etc.). type: object properties: description: type: string condition: type: string id: type: string enabled: type: boolean scheduleRules: description: Simple time-based on/off schedule for this rule type: array items: $ref: '#/components/schemas/ScheduleRule' scheduleType: description: > UI hint for which scheduling mode is active: - `none` – no schedule - `schedule` – simple time-based enable/disable via `scheduleRules` - `ramp` – multi-step ramp-up controlled by an associated RampSchedule document type: string enum: - none - schedule - ramp savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID of the prerequisite type: string condition: type: string required: - id - condition additionalProperties: false required: - description - id - enabled additionalProperties: false - type: object properties: type: type: string const: rollout value: type: string coverage: type: number minimum: 0 maximum: 1 hashAttribute: type: string seed: description: Optional seed for the hash function; defaults to the rule id type: string required: - type - value - coverage - hashAttribute additionalProperties: false FeatureExperimentRule: allOf: - description: > Common fields shared by all feature rule types. Specific rule types extend this base with their own required properties (value, coverage, etc.). type: object properties: description: type: string condition: type: string id: type: string enabled: type: boolean scheduleRules: description: Simple time-based on/off schedule for this rule type: array items: $ref: '#/components/schemas/ScheduleRule' scheduleType: description: > UI hint for which scheduling mode is active: - `none` – no schedule - `schedule` – simple time-based enable/disable via `scheduleRules` - `ramp` – multi-step ramp-up controlled by an associated RampSchedule document type: string enum: - none - schedule - ramp savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID of the prerequisite type: string condition: type: string required: - id - condition additionalProperties: false required: - description - id - enabled additionalProperties: false - type: object properties: type: type: string const: experiment trackingKey: type: string hashAttribute: type: string fallbackAttribute: type: string disableStickyBucketing: type: boolean bucketVersion: type: number minBucketVersion: type: number namespace: type: object properties: enabled: type: boolean name: type: string range: minItems: 2 maxItems: 2 type: array items: type: number required: - enabled - name - range additionalProperties: false coverage: type: number minimum: 0 maximum: 1 value: description: Variation values with weights type: array items: type: object properties: value: type: string weight: type: number name: type: string required: - value - weight additionalProperties: false required: - type additionalProperties: false FeatureExperimentRefRule: allOf: - description: > Common fields shared by all feature rule types. Specific rule types extend this base with their own required properties (value, coverage, etc.). type: object properties: description: type: string condition: type: string id: type: string enabled: type: boolean scheduleRules: description: Simple time-based on/off schedule for this rule type: array items: $ref: '#/components/schemas/ScheduleRule' scheduleType: description: > UI hint for which scheduling mode is active: - `none` – no schedule - `schedule` – simple time-based enable/disable via `scheduleRules` - `ramp` – multi-step ramp-up controlled by an associated RampSchedule document type: string enum: - none - schedule - ramp savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID of the prerequisite type: string condition: type: string required: - id - condition additionalProperties: false required: - description - id - enabled additionalProperties: false - type: object properties: type: type: string const: experiment-ref variations: type: array items: type: object properties: value: type: string variationId: type: string required: - value - variationId additionalProperties: false experimentId: type: string required: - type - variations - experimentId additionalProperties: false FeatureSafeRolloutRule: allOf: - description: > Common fields shared by all feature rule types. Specific rule types extend this base with their own required properties (value, coverage, etc.). type: object properties: description: type: string condition: type: string id: type: string enabled: type: boolean scheduleRules: description: Simple time-based on/off schedule for this rule type: array items: $ref: '#/components/schemas/ScheduleRule' scheduleType: description: > UI hint for which scheduling mode is active: - `none` – no schedule - `schedule` – simple time-based enable/disable via `scheduleRules` - `ramp` – multi-step ramp-up controlled by an associated RampSchedule document type: string enum: - none - schedule - ramp savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID of the prerequisite type: string condition: type: string required: - id - condition additionalProperties: false required: - description - id - enabled additionalProperties: false - type: object properties: type: type: string const: safe-rollout controlValue: type: string variationValue: type: string seed: type: string hashAttribute: type: string trackingKey: type: string safeRolloutId: type: string status: type: string enum: - running - released - rolled-back - stopped required: - type - controlValue - variationValue additionalProperties: false PaginationFields: type: object properties: limit: type: integer offset: type: integer count: type: integer total: type: integer hasMore: type: boolean nextOffset: anyOf: - type: integer - type: 'null' required: - limit - offset - count - total - hasMore - nextOffset additionalProperties: false FeatureWithRevisions: allOf: - $ref: '#/components/schemas/Feature' - type: object properties: revisions: type: array items: $ref: '#/components/schemas/FeatureRevision' additionalProperties: false FeatureRevision: type: object properties: featureId: description: The feature this revision belongs to type: string baseVersion: type: integer version: type: integer comment: type: string date: format: date-time type: string status: type: string createdBy: type: string publishedBy: type: string defaultValue: description: The default value at the time this revision was created type: string rules: type: object propertyNames: type: string additionalProperties: type: array items: $ref: '#/components/schemas/FeatureRule' definitions: type: object propertyNames: type: string additionalProperties: description: >- A JSON stringified [FeatureDefinition](#tag/FeatureDefinition_model) type: string environmentsEnabled: description: >- Per-environment enabled state captured in this revision (only present when kill-switch gating is enabled) type: object propertyNames: type: string additionalProperties: type: boolean envPrerequisites: description: >- Per-environment prerequisites captured in this revision (only present when prerequisite gating is enabled) type: object propertyNames: type: string additionalProperties: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false prerequisites: description: >- Feature-level prerequisites captured in this revision (only present when prerequisite gating is enabled) type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false metadata: description: >- Metadata fields captured in this revision (only present when metadata gating is enabled) type: object properties: description: type: string owner: description: >- The userId of the owner (or raw owner name/email for legacy records) type: string project: type: string tags: type: array items: type: string neverStale: type: boolean valueType: type: string jsonSchema: type: object properties: schemaType: type: string enum: - schema - simple schema: type: string simple: type: object propertyNames: type: string additionalProperties: {} date: format: date-time type: string enabled: type: boolean additionalProperties: false customFields: type: object propertyNames: type: string additionalProperties: {} additionalProperties: false required: - featureId - baseVersion - version - comment - date - status - rules additionalProperties: false FeatureV2: type: object properties: id: type: string dateCreated: format: date-time type: string dateUpdated: format: date-time type: string archived: type: boolean description: type: string owner: description: >- 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. type: string project: type: string valueType: type: string enum: - boolean - string - number - json defaultValue: type: string tags: type: array items: type: string rules: description: >- Unified rules array. Each rule carries its own environment scope via `allEnvironments` / `environments`. type: array items: $ref: '#/components/schemas/FeatureRuleV2' environments: description: >- Per-environment enabled state and SDK payload. Rules are on the top-level `rules` field. type: object propertyNames: type: string additionalProperties: $ref: '#/components/schemas/FeatureEnvironmentV2' prerequisites: description: Feature IDs. Each feature must evaluate to `true` type: array items: type: string revision: type: object properties: version: type: integer comment: type: string date: format: date-time type: string createdBy: type: string publishedBy: type: string required: - version - comment - date - createdBy - publishedBy additionalProperties: false customFields: type: object propertyNames: type: string additionalProperties: {} holdout: anyOf: - type: object properties: id: description: Holdout ID type: string value: description: >- The feature value assigned to users in the holdout treatment group type: string required: - id - value additionalProperties: false - type: 'null' required: - id - dateCreated - dateUpdated - archived - description - owner - project - valueType - defaultValue - tags - rules - environments - revision additionalProperties: false FeatureRuleV2: allOf: - $ref: '#/components/schemas/FeatureRule' - type: object properties: allEnvironments: description: >- When true the rule applies to all environments. When false only the environments listed in `environments` receive the rule. type: boolean environments: description: >- The environment IDs this rule is active in. Populated when `allEnvironments` is false. type: array items: type: string required: - allEnvironments additionalProperties: false FeatureEnvironmentV2: type: object properties: enabled: type: boolean defaultValue: type: string definition: description: A JSON stringified [FeatureDefinition](#tag/FeatureDefinition_model) type: string required: - enabled - defaultValue additionalProperties: false FeatureWithRevisionsV2: allOf: - $ref: '#/components/schemas/FeatureV2' - type: object properties: revisions: type: array items: $ref: '#/components/schemas/FeatureRevisionV2' additionalProperties: false FeatureRevisionV2: type: object properties: featureId: description: The feature this revision belongs to type: string baseVersion: type: integer version: type: integer comment: type: string date: format: date-time type: string status: type: string createdBy: type: string publishedBy: type: string defaultValue: description: The default value at the time this revision was created type: string rules: description: >- Unified rules array. Each rule carries its own environment scope via `allEnvironments` / `environments`. type: array items: $ref: '#/components/schemas/FeatureRuleV2' definitions: type: object propertyNames: type: string additionalProperties: description: >- A JSON stringified [FeatureDefinition](#tag/FeatureDefinition_model) type: string environmentsEnabled: description: >- Per-environment enabled state captured in this revision (only present when kill-switch gating is enabled) type: object propertyNames: type: string additionalProperties: type: boolean envPrerequisites: description: >- Per-environment prerequisites captured in this revision (only present when prerequisite gating is enabled) type: object propertyNames: type: string additionalProperties: type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false prerequisites: description: >- Feature-level prerequisites captured in this revision (only present when prerequisite gating is enabled) type: array items: type: object properties: id: description: Feature ID type: string condition: type: string required: - id - condition additionalProperties: false metadata: description: >- Metadata fields captured in this revision (only present when metadata gating is enabled) type: object properties: description: type: string owner: description: >- The userId of the owner (or raw owner name/email for legacy records) type: string project: type: string tags: type: array items: type: string neverStale: type: boolean valueType: type: string jsonSchema: type: object properties: schemaType: type: string enum: - schema - simple schema: type: string simple: type: object propertyNames: type: string additionalProperties: {} date: format: date-time type: string enabled: type: boolean additionalProperties: false customFields: type: object propertyNames: type: string additionalProperties: {} additionalProperties: false required: - featureId - baseVersion - version - comment - date - status - rules additionalProperties: false Archetype: type: object properties: id: type: string dateCreated: type: string dateUpdated: type: string name: type: string description: type: string owner: description: The userId of the owner (or raw owner name/email for legacy records) type: string ownerEmail: description: >- The email address of the owner, when the owner can be resolved to a known user. type: string isPublic: type: boolean attributes: description: The attributes to set when using this Archetype type: object propertyNames: type: string additionalProperties: {} projects: type: array items: type: string required: - id - dateCreated - dateUpdated - name - owner - isPublic - attributes additionalProperties: false Experiment: type: object properties: id: type: string trackingKey: type: string dateCreated: format: date-time type: string dateUpdated: format: date-time type: string name: type: string type: type: string enum: - standard - multi-armed-bandit project: type: string hypothesis: type: string description: type: string tags: type: array items: type: string owner: description: The userId of the owner (or raw owner name/email for legacy records) type: string ownerEmail: description: >- The email address of the owner, when the owner can be resolved to a known user. type: string archived: type: boolean status: type: string autoRefresh: type: boolean hashAttribute: type: string fallbackAttribute: type: string hashVersion: anyOf: - type: number const: 1 - type: number const: 2 disableStickyBucketing: type: boolean bucketVersion: type: number minBucketVersion: type: number variations: type: array items: type: object properties: variationId: type: string key: type: string name: type: string description: type: string screenshots: type: array items: type: string required: - variationId - key - name - description - screenshots additionalProperties: false phases: type: array items: type: object properties: name: type: string dateStarted: type: string dateEnded: type: string reasonForStopping: type: string seed: type: string coverage: type: number trafficSplit: type: array items: type: object properties: variationId: type: string weight: type: number required: - variationId - weight additionalProperties: false namespace: type: object properties: namespaceId: type: string enabled: type: boolean range: minItems: 2 maxItems: 2 type: array items: type: number ranges: type: array items: type: array prefixItems: - type: number - type: number required: - namespaceId additionalProperties: false targetingCondition: type: string prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false required: - name - dateStarted - dateEnded - reasonForStopping - seed - coverage - trafficSplit - targetingCondition additionalProperties: false settings: $ref: '#/components/schemas/ExperimentAnalysisSettings' resultSummary: type: object properties: status: type: string winner: type: string conclusions: type: string releasedVariationId: type: string excludeFromPayload: type: boolean required: - status - winner - conclusions - releasedVariationId - excludeFromPayload additionalProperties: false shareLevel: type: string enum: - public - organization publicUrl: type: string banditScheduleValue: type: number banditScheduleUnit: type: string enum: - days - hours banditBurnInValue: type: number banditBurnInUnit: type: string enum: - days - hours banditConversionWindowValue: type: number banditConversionWindowUnit: type: string enum: - days - hours linkedFeatures: type: array items: type: string hasVisualChangesets: type: boolean hasURLRedirects: type: boolean customFields: type: object propertyNames: type: string additionalProperties: {} customMetricSlices: description: Custom slices that apply to ALL applicable metrics in the experiment type: array items: type: object properties: slices: type: array items: type: object properties: column: type: string levels: type: array items: type: string required: - column - levels additionalProperties: false required: - slices additionalProperties: false defaultDashboardId: description: ID of the default dashboard for this experiment. type: string templateId: type: string required: - id - trackingKey - dateCreated - dateUpdated - name - type - project - hypothesis - description - tags - owner - archived - status - autoRefresh - hashAttribute - hashVersion - variations - phases - settings additionalProperties: false ExperimentAnalysisSettings: type: object properties: datasourceId: type: string assignmentQueryId: type: string experimentId: type: string segmentId: type: string queryFilter: type: string inProgressConversions: type: string enum: - include - exclude attributionModel: description: >- Setting attribution model to `"experimentDuration"` is the same as selecting "Ignore Conversion Windows" for the Conversion Window Override. Setting it to `"lookbackOverride"` requires a `lookbackOverride` object to be provided. type: string enum: - firstExposure - experimentDuration - lookbackOverride lookbackOverride: $ref: '#/components/schemas/LookbackOverride' statsEngine: type: string enum: - bayesian - frequentist regressionAdjustmentEnabled: type: boolean sequentialTestingEnabled: type: boolean sequentialTestingTuningParameter: type: number postStratificationEnabled: description: When null, the organization default is used. anyOf: - description: When null, the organization default is used. type: boolean - description: When null, the organization default is used. type: 'null' decisionFrameworkSettings: $ref: '#/components/schemas/ExperimentDecisionFrameworkSettings' metricOverrides: description: >- 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). type: array items: $ref: '#/components/schemas/ExperimentMetricOverrideEntry' goals: type: array items: $ref: '#/components/schemas/ExperimentMetric' secondaryMetrics: type: array items: $ref: '#/components/schemas/ExperimentMetric' guardrails: type: array items: $ref: '#/components/schemas/ExperimentMetric' activationMetric: $ref: '#/components/schemas/ExperimentMetric' required: - datasourceId - assignmentQueryId - experimentId - segmentId - queryFilter - inProgressConversions - attributionModel - statsEngine - goals - secondaryMetrics - guardrails additionalProperties: false LookbackOverride: description: >- Controls the lookback override for the experiment. For type "window", value must be a non-negative number and valueUnit is required. type: object properties: type: type: string enum: - date - window value: description: >- For "window" type - non-negative numeric value (e.g. 7 for 7 days). For "date" type a date string. anyOf: - description: >- For "window" type - non-negative numeric value (e.g. 7 for 7 days). For "date" type a date string. type: number - format: date-time description: >- For "window" type - non-negative numeric value (e.g. 7 for 7 days). For "date" type a date string. type: string valueUnit: description: Used when type is "window". Defaults to "days". type: string enum: - minutes - hours - days - weeks required: - type - value additionalProperties: false ExperimentDecisionFrameworkSettings: description: >- Controls the decision framework and metric overrides for the experiment. Replaces the entire stored object on update (does not patch individual fields). type: object properties: decisionCriteriaId: type: string decisionFrameworkMetricOverrides: type: array items: type: object properties: id: description: ID of the metric to override settings for. type: string targetMDE: description: >- The target relative MDE to use for the metric, expressed as proportions (e.g. use 0.1 for 10%). Must be greater than 0. type: number exclusiveMinimum: 0 required: - id additionalProperties: false additionalProperties: false ExperimentMetricOverrideEntry: description: >- Per-metric analysis overrides stored on the experiment (matches internal metricOverrides). type: object properties: id: description: ID of the metric to override settings for. type: string windowType: type: string enum: - conversion - lookback - '' windowHours: type: number delayHours: type: number properPriorOverride: description: >- Must be true for the override to take effect. If true, the other proper prior settings in this object will be used if present. type: boolean properPriorEnabled: type: boolean properPriorMean: type: number properPriorStdDev: type: number regressionAdjustmentOverride: description: >- Must be true for the override to take effect. If true, the other regression adjustment settings in this object will be used if present. type: boolean regressionAdjustmentEnabled: type: boolean regressionAdjustmentDays: type: number required: - id additionalProperties: false ExperimentMetric: type: object properties: metricId: type: string overrides: type: object properties: delayHours: type: number windowHours: type: number window: type: string enum: - conversion - lookback - '' winRiskThreshold: deprecated: true type: number loseRiskThreshold: deprecated: true type: number properPriorOverride: type: boolean properPriorEnabled: type: boolean properPriorMean: type: number properPriorStdDev: type: number regressionAdjustmentOverride: type: boolean regressionAdjustmentEnabled: type: boolean regressionAdjustmentDays: type: number additionalProperties: false required: - metricId - overrides additionalProperties: false ExperimentWithEnhancedStatus: allOf: - type: object properties: id: type: string trackingKey: type: string dateCreated: format: date-time type: string dateUpdated: format: date-time type: string name: type: string type: type: string enum: - standard - multi-armed-bandit project: type: string hypothesis: type: string description: type: string tags: type: array items: type: string owner: description: >- The userId of the owner (or raw owner name/email for legacy records) type: string ownerEmail: description: >- The email address of the owner, when the owner can be resolved to a known user. type: string archived: type: boolean status: type: string autoRefresh: type: boolean hashAttribute: type: string fallbackAttribute: type: string hashVersion: anyOf: - type: number const: 1 - type: number const: 2 disableStickyBucketing: type: boolean bucketVersion: type: number minBucketVersion: type: number variations: type: array items: type: object properties: variationId: type: string key: type: string name: type: string description: type: string screenshots: type: array items: type: string required: - variationId - key - name - description - screenshots additionalProperties: false phases: type: array items: type: object properties: name: type: string dateStarted: type: string dateEnded: type: string reasonForStopping: type: string seed: type: string coverage: type: number trafficSplit: type: array items: type: object properties: variationId: type: string weight: type: number required: - variationId - weight additionalProperties: false namespace: type: object properties: namespaceId: type: string enabled: type: boolean range: minItems: 2 maxItems: 2 type: array items: type: number ranges: type: array items: type: array prefixItems: - type: number - type: number required: - namespaceId additionalProperties: false targetingCondition: type: string prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false required: - name - dateStarted - dateEnded - reasonForStopping - seed - coverage - trafficSplit - targetingCondition additionalProperties: false settings: $ref: '#/components/schemas/ExperimentAnalysisSettings' resultSummary: type: object properties: status: type: string winner: type: string conclusions: type: string releasedVariationId: type: string excludeFromPayload: type: boolean required: - status - winner - conclusions - releasedVariationId - excludeFromPayload additionalProperties: false shareLevel: type: string enum: - public - organization publicUrl: type: string banditScheduleValue: type: number banditScheduleUnit: type: string enum: - days - hours banditBurnInValue: type: number banditBurnInUnit: type: string enum: - days - hours banditConversionWindowValue: type: number banditConversionWindowUnit: type: string enum: - days - hours linkedFeatures: type: array items: type: string hasVisualChangesets: type: boolean hasURLRedirects: type: boolean customFields: type: object propertyNames: type: string additionalProperties: {} customMetricSlices: description: >- Custom slices that apply to ALL applicable metrics in the experiment type: array items: type: object properties: slices: type: array items: type: object properties: column: type: string levels: type: array items: type: string required: - column - levels additionalProperties: false required: - slices additionalProperties: false defaultDashboardId: description: ID of the default dashboard for this experiment. type: string templateId: type: string required: - id - trackingKey - dateCreated - dateUpdated - name - type - project - hypothesis - description - tags - owner - archived - status - autoRefresh - hashAttribute - hashVersion - variations - phases - settings additionalProperties: false - type: object properties: enhancedStatus: type: object properties: status: type: string enum: - Running - Stopped - Draft - Archived detailedStatus: type: string required: - status additionalProperties: false additionalProperties: false ExperimentResults: type: object properties: id: type: string dateUpdated: type: string experimentId: type: string phase: type: string dateStart: type: string dateEnd: type: string dimension: type: object properties: type: type: string id: type: string required: - type additionalProperties: false settings: $ref: '#/components/schemas/ExperimentAnalysisSettings' queryIds: type: array items: type: string results: type: array items: type: object properties: dimension: type: string totalUsers: type: number checks: type: object properties: srm: type: number required: - srm additionalProperties: false metrics: type: array items: type: object properties: metricId: type: string variations: type: array items: type: object properties: variationId: type: string users: type: number analyses: type: array items: type: object properties: engine: type: string enum: - bayesian - frequentist numerator: type: number denominator: type: number mean: type: number stddev: type: number percentChange: type: number ciLow: type: number ciHigh: type: number pValue: type: number risk: type: number chanceToBeatControl: type: number required: - engine - numerator - denominator - mean - stddev - percentChange - ciLow - ciHigh additionalProperties: false required: - variationId - analyses additionalProperties: false required: - metricId - variations additionalProperties: false required: - dimension - totalUsers - checks - metrics additionalProperties: false required: - id - dateUpdated - experimentId - phase - dateStart - dateEnd - dimension - settings - queryIds - results additionalProperties: false VisualChangeset: type: object properties: id: type: string urlPatterns: type: array items: type: object properties: include: type: boolean type: type: string enum: - simple - regex pattern: type: string required: - type - pattern additionalProperties: false editorUrl: type: string experiment: type: string visualChanges: type: array items: type: object properties: description: type: string css: type: string js: type: string variation: type: string domMutations: type: array items: type: object properties: selector: type: string action: type: string enum: - append - set - remove attribute: type: string value: type: string parentSelector: type: string insertBeforeSelector: type: string required: - selector - action - attribute additionalProperties: false required: - variation - domMutations additionalProperties: false required: - urlPatterns - editorUrl - experiment - visualChanges additionalProperties: false Metric: type: object properties: id: type: string managedBy: description: >- Where this metric must be managed from. If not set (empty string), it can be managed from anywhere. type: string enum: - '' - api - config - admin dateCreated: type: string dateUpdated: type: string owner: description: The userId of the owner (or raw owner name/email for legacy records) type: string ownerEmail: description: >- The email address of the owner, when the owner can be resolved to a known user. type: string datasourceId: type: string name: type: string description: type: string type: type: string enum: - binomial - count - duration - revenue tags: type: array items: type: string projects: type: array items: type: string archived: type: boolean behavior: type: object properties: goal: type: string enum: - increase - decrease cappingSettings: description: Controls how outliers are handled type: object properties: type: type: string enum: - none - absolute - percentile value: description: >- When type is absolute, this is the absolute value. When type is percentile, this is the percentile value (from 0.0 to 1.0). type: number ignoreZeros: description: >- If true and capping is `percentile`, zeros will be ignored when calculating the percentile. type: boolean required: - type additionalProperties: false cap: deprecated: true type: number capping: deprecated: true anyOf: - type: string enum: - absolute - percentile - type: 'null' capValue: deprecated: true type: number windowSettings: description: Controls the conversion window for the metric type: object properties: type: type: string enum: - none - conversion - lookback delayValue: description: >- Wait this long after experiment exposure before counting conversions type: number delayUnit: type: string enum: - minutes - hours - days - weeks windowValue: type: number windowUnit: type: string enum: - minutes - hours - days - weeks required: - type additionalProperties: false priorSettings: description: Controls the bayesian prior for the metric. type: object properties: override: description: >- If false, the organization default settings will be used instead of the other settings in this object type: boolean proper: description: >- If true, the `mean` and `stddev` will be used, otherwise we will use an improper flat prior. type: boolean mean: description: >- The mean of the prior distribution of relative effects in proportion terms (e.g. 0.01 is 1%) type: number stddev: description: >- Must be > 0. The standard deviation of the prior distribution of relative effects in proportion terms. type: number required: - override - proper - mean - stddev additionalProperties: false conversionWindowStart: deprecated: true type: number conversionWindowEnd: deprecated: true type: number riskThresholdSuccess: type: number riskThresholdDanger: type: number minPercentChange: type: number maxPercentChange: type: number minSampleSize: type: number targetMDE: type: number required: - goal - windowSettings - riskThresholdSuccess - riskThresholdDanger - minPercentChange - maxPercentChange - minSampleSize - targetMDE additionalProperties: false sql: type: object properties: identifierTypes: type: array items: type: string conversionSQL: type: string userAggregationSQL: type: string denominatorMetricId: type: string required: - identifierTypes - conversionSQL - userAggregationSQL - denominatorMetricId additionalProperties: false sqlBuilder: type: object properties: identifierTypeColumns: type: array items: type: object properties: identifierType: type: string columnName: type: string required: - identifierType - columnName additionalProperties: false tableName: type: string valueColumnName: type: string timestampColumnName: type: string conditions: type: array items: type: object properties: column: type: string operator: type: string value: type: string required: - column - operator - value additionalProperties: false required: - identifierTypeColumns - tableName - valueColumnName - timestampColumnName - conditions additionalProperties: false mixpanel: type: object properties: eventName: type: string eventValue: type: string userAggregation: type: string conditions: type: array items: type: object properties: property: type: string operator: type: string value: type: string required: - property - operator - value additionalProperties: false required: - eventName - eventValue - userAggregation - conditions additionalProperties: false required: - id - managedBy - dateCreated - dateUpdated - owner - datasourceId - name - description - type - tags - projects - archived - behavior additionalProperties: false MetricUsage: type: object properties: metricId: description: The metric ID type: string error: description: >- Set when the metric does not exist or the caller has no permission to read it. type: string experiments: description: List of experiments using this metric type: array items: type: object properties: experimentId: description: The experiment ID type: string experimentStatus: description: The current status of the experiment type: string enum: - draft - running - stopped lastSnapshotAttempt: description: The last time a snapshot was attempted for this experiment anyOf: - format: date-time type: string - type: 'null' required: - experimentId - experimentStatus - lastSnapshotAttempt additionalProperties: false lastSnapshotAttempt: description: >- The most recent snapshot attempt across all experiments using this metric anyOf: - format: date-time type: string - type: 'null' required: - metricId additionalProperties: false Segment: type: object properties: id: type: string owner: description: The userId of the owner (or raw owner name/email for legacy records) type: string ownerEmail: description: >- The email address of the owner, when the owner can be resolved to a known user. type: string datasourceId: type: string identifierType: type: string name: type: string description: type: string query: type: string dateCreated: type: string dateUpdated: type: string managedBy: description: >- Where this segment must be managed from. If not set (empty string), it can be managed from anywhere. type: string enum: - '' - api - config type: type: string enum: - SQL - FACT factTableId: type: string filters: type: array items: type: string projects: type: array items: type: string required: - id - owner - datasourceId - identifierType - name - dateCreated - dateUpdated additionalProperties: false Dimension: type: object properties: id: type: string dateCreated: type: string dateUpdated: type: string owner: description: The userId of the owner (or raw owner name/email for legacy records) type: string ownerEmail: description: >- The email address of the owner, when the owner can be resolved to a known user. type: string datasourceId: type: string identifierType: type: string name: type: string description: type: string query: type: string managedBy: description: >- Where this dimension must be managed from. If not set (empty string), it can be managed from anywhere. type: string enum: - '' - api - config required: - id - dateCreated - dateUpdated - owner - datasourceId - identifierType - name - query additionalProperties: false Project: type: object properties: id: type: string name: type: string dateCreated: format: date-time type: string dateUpdated: format: date-time type: string description: type: string publicId: description: >- URL-safe slug used in SDK payload metadata. Auto-generated from name if not provided. type: string settings: type: object properties: statsEngine: type: string confidenceLevel: type: number pValueThreshold: type: number additionalProperties: false required: - id - name - dateCreated - dateUpdated additionalProperties: false Environment: type: object properties: id: type: string description: type: string toggleOnList: type: boolean defaultState: type: boolean projects: type: array items: type: string parent: type: string required: - id - description - toggleOnList - defaultState - projects additionalProperties: false Attribute: type: object properties: property: type: string datatype: type: string enum: - boolean - string - number - secureString - enum - string[] - number[] - secureString[] description: type: string hashAttribute: type: boolean archived: type: boolean enum: type: string format: type: string enum: - '' - version - date - isoCountryCode projects: type: array items: type: string tags: type: array items: type: string required: - property - datatype additionalProperties: false SdkConnection: type: object properties: id: type: string dateCreated: format: date-time type: string dateUpdated: format: date-time type: string name: type: string organization: type: string languages: type: array items: type: string sdkVersion: type: string environment: type: string project: description: >- Use 'projects' instead. This is only for backwards compatibility and contains the first project only. type: string projects: type: array items: type: string encryptPayload: type: boolean encryptionKey: type: string includeVisualExperiments: type: boolean includeDraftExperiments: type: boolean includeExperimentNames: type: boolean includeRedirectExperiments: type: boolean includeRuleIds: type: boolean includeProjectIdInMetadata: type: boolean includeCustomFieldsInMetadata: type: boolean allowedCustomFieldsInMetadata: type: array items: type: string includeTagsInMetadata: type: boolean key: type: string proxyEnabled: type: boolean proxyHost: type: string proxySigningKey: type: string sseEnabled: type: boolean hashSecureAttributes: type: boolean remoteEvalEnabled: type: boolean savedGroupReferencesEnabled: type: boolean required: - id - dateCreated - dateUpdated - name - organization - languages - environment - project - encryptPayload - encryptionKey - key - proxyEnabled - proxyHost - proxySigningKey additionalProperties: false DataSource: type: object properties: id: type: string dateCreated: format: date-time type: string dateUpdated: format: date-time type: string type: type: string name: type: string description: type: string projectIds: type: array items: type: string eventTracker: type: string identifierTypes: type: array items: type: object properties: id: type: string description: type: string required: - id - description additionalProperties: false assignmentQueries: type: array items: type: object properties: id: type: string name: type: string description: type: string identifierType: type: string sql: type: string includesNameColumns: type: boolean dimensionColumns: type: array items: type: string required: - id - name - description - identifierType - sql - includesNameColumns - dimensionColumns additionalProperties: false identifierJoinQueries: type: array items: type: object properties: identifierTypes: type: array items: type: string sql: type: string required: - identifierTypes - sql additionalProperties: false mixpanelSettings: type: object properties: viewedExperimentEventName: type: string experimentIdProperty: type: string variationIdProperty: type: string extraUserIdProperty: type: string required: - viewedExperimentEventName - experimentIdProperty - variationIdProperty - extraUserIdProperty additionalProperties: false required: - id - dateCreated - dateUpdated - type - name - description - projectIds - eventTracker - identifierTypes - assignmentQueries - identifierJoinQueries additionalProperties: false InformationSchema: type: object properties: id: type: string datasourceId: type: string status: type: string enum: - PENDING - COMPLETE error: type: object properties: errorType: type: string enum: - generic - not_supported - missing_params message: type: string required: - errorType - message additionalProperties: false databases: type: array items: type: object properties: databaseName: type: string path: type: string dateCreated: format: date-time type: string dateUpdated: format: date-time type: string schemas: type: array items: type: object properties: schemaName: type: string path: type: string dateCreated: format: date-time type: string dateUpdated: format: date-time type: string tables: type: array items: type: object properties: tableName: type: string path: type: string id: type: string numOfColumns: type: number dateCreated: format: date-time type: string dateUpdated: format: date-time type: string required: - tableName - id - numOfColumns - dateCreated - dateUpdated additionalProperties: false required: - schemaName - dateCreated - dateUpdated - tables additionalProperties: false required: - databaseName - dateCreated - dateUpdated - schemas additionalProperties: false dateCreated: format: date-time type: string dateUpdated: format: date-time type: string required: - id - datasourceId - status - databases - dateCreated - dateUpdated additionalProperties: false SavedGroup: type: object properties: id: type: string type: type: string enum: - condition - list dateCreated: format: date-time type: string dateUpdated: format: date-time type: string name: type: string owner: description: The userId of the owner (or raw owner name/email for legacy records) type: string ownerEmail: description: >- The email address of the owner, when the owner can be resolved to a known user. type: string condition: description: >- When type = 'condition', this is the JSON-encoded condition for the group type: string attributeKey: description: When type = 'list', this is the attribute key the group is based on type: string values: description: When type = 'list', this is the list of values for the attribute key type: array items: type: string description: type: string projects: type: array items: type: string required: - id - type - dateCreated - dateUpdated - name additionalProperties: false Organization: type: object properties: id: description: The Growthbook unique identifier for the organization type: string externalId: description: >- An optional identifier that you use within your company for the organization type: string dateCreated: format: date-time description: The date the organization was created type: string name: description: The name of the organization type: string ownerEmail: description: The email address of the organization owner type: string additionalProperties: false FactTable: type: object properties: id: type: string name: type: string description: type: string owner: description: The userId of the owner (or raw owner name/email for legacy records) type: string ownerEmail: description: >- The email address of the owner, when the owner can be resolved to a known user. type: string projects: type: array items: type: string tags: type: array items: type: string datasource: type: string userIdTypes: type: array items: type: string sql: type: string eventName: description: The event name used in SQL template variables type: string columns: description: Array of column definitions for this fact table type: array items: $ref: '#/components/schemas/FactTableColumn' columnsError: description: Error message if there was an issue parsing the SQL schema anyOf: - type: string - type: 'null' archived: type: boolean managedBy: description: >- Where this fact table must be managed from. If not set (empty string), it can be managed from anywhere. type: string enum: - '' - api - admin dateCreated: format: date-time type: string dateUpdated: format: date-time type: string required: - id - name - description - owner - projects - tags - datasource - userIdTypes - sql - managedBy - dateCreated - dateUpdated additionalProperties: false FactTableColumn: type: object properties: column: description: The actual column name in the database/SQL query type: string datatype: type: string enum: - number - string - date - boolean - json - binary - other - '' numberFormat: type: string enum: - '' - currency - time:seconds - memory:bytes - memory:kilobytes jsonFields: description: For JSON columns, defines the structure of nested fields type: object propertyNames: type: string additionalProperties: type: object properties: datatype: type: string enum: - number - string - date - boolean - json - binary - other - '' additionalProperties: false name: description: >- Display name for the column (can be different from the actual column name) type: string description: type: string alwaysInlineFilter: default: false description: >- Whether this column should always be included as an inline filter in queries type: boolean deleted: default: false type: boolean isAutoSliceColumn: default: false description: >- Whether this column can be used for auto slice analysis. This is an enterprise feature. type: boolean autoSlices: description: Specific slices to automatically analyze for this column. type: array items: type: string lockedAutoSlices: description: >- 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. type: array items: type: string dateCreated: readOnly: true format: date-time type: string dateUpdated: readOnly: true format: date-time type: string required: - column - datatype additionalProperties: false FactTableFilter: type: object properties: id: type: string name: type: string description: type: string value: type: string managedBy: description: >- Where this fact table filter must be managed from. If not set (empty string), it can be managed from anywhere. type: string enum: - '' - api dateCreated: format: date-time type: string dateUpdated: format: date-time type: string required: - id - name - description - value - managedBy - dateCreated - dateUpdated additionalProperties: false FactMetric: type: object properties: id: type: string name: type: string description: type: string owner: description: The userId of the owner (or raw owner name/email for legacy records) type: string ownerEmail: description: >- The email address of the owner, when the owner can be resolved to a known user. type: string projects: type: array items: type: string tags: type: array items: type: string datasource: type: string metricType: type: string enum: - proportion - retention - mean - quantile - ratio - dailyParticipation numerator: type: object properties: factTableId: type: string column: type: string aggregation: type: string enum: - sum - max - count distinct - hll merge - kll merge filters: deprecated: true description: >- Array of Fact Table Filter Ids. Deprecated, use rowFilters instead. type: array items: type: string inlineFilters: deprecated: true description: >- Inline filters to apply to the fact table. Keys are column names, values are arrays of values to filter by. Deprecated, use rowFilters instead. type: object propertyNames: type: string additionalProperties: type: array items: type: string rowFilters: description: >- Filters to apply to the rows of the fact table before aggregation. type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - '>' - < - '>=' - <= - in - not_in - is_null - not_null - is_true - is_false - contains - not_contains - starts_with - ends_with - sql_expr - saved_filter values: description: >- Not required for is_null, not_null, is_true, is_false operators. type: array items: type: string column: description: >- Required for all operators except sql_expr and saved_filter. type: string required: - operator additionalProperties: false aggregateFilterColumn: description: >- Column to use to filter users after aggregation. Either '$$count' of rows or the name of a numeric column that will be summed by user. Must specify `aggregateFilter` if using this. Only can be used with 'retention' and 'proportion' metrics. type: string aggregateFilter: description: >- Simple comparison operator and value to apply after aggregation (e.g. '= 10' or '>= 1'). Requires `aggregateFilterColumn`. type: string required: - factTableId - column additionalProperties: false denominator: type: object properties: factTableId: type: string column: type: string filters: deprecated: true description: >- Array of Fact Table Filter Ids. Deprecated, use rowFilters instead. type: array items: type: string inlineFilters: deprecated: true description: >- Inline filters to apply to the fact table. Keys are column names, values are arrays of values to filter by. Deprecated, use rowFilters instead. type: object propertyNames: type: string additionalProperties: type: array items: type: string rowFilters: description: >- Filters to apply to the rows of the fact table before aggregation. type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - '>' - < - '>=' - <= - in - not_in - is_null - not_null - is_true - is_false - contains - not_contains - starts_with - ends_with - sql_expr - saved_filter values: description: >- Not required for is_null, not_null, is_true, is_false operators. type: array items: type: string column: description: >- Required for all operators except sql_expr and saved_filter. type: string required: - operator additionalProperties: false required: - factTableId - column additionalProperties: false inverse: description: >- Set to true for things like Bounce Rate, where you want the metric to decrease type: boolean quantileSettings: description: >- Controls the settings for quantile metrics (mandatory if metricType is "quantile") type: object properties: type: description: >- Whether the quantile is over unit aggregations or raw event values type: string enum: - event - unit ignoreZeros: description: >- If true, zero values will be ignored when calculating the quantile type: boolean quantile: description: The quantile value (from 0.001 to 0.999) type: number minimum: 0.001 maximum: 0.999 multipleOf: 0.001 quantileEventCountColumn: description: >- Optional override for the source-column name used to recover per-row event counts when numerator.aggregation is 'kll merge'. Defaults to '_n_events'. Only valid for event-quantile metrics with a 'kll merge' numerator. type: string required: - type - ignoreZeros - quantile additionalProperties: false cappingSettings: description: Controls how outliers are handled type: object properties: type: type: string enum: - none - absolute - percentile value: description: >- When type is absolute, this is the absolute value. When type is percentile, this is the percentile value (from 0.0 to 1.0). type: number ignoreZeros: description: >- If true and capping is `percentile`, zeros will be ignored when calculating the percentile. type: boolean required: - type additionalProperties: false windowSettings: description: Controls the conversion window for the metric type: object properties: type: type: string enum: - none - conversion - lookback delayValue: description: >- Wait this long after experiment exposure before counting conversions. type: number delayUnit: type: string enum: - minutes - hours - days - weeks windowValue: type: number windowUnit: type: string enum: - minutes - hours - days - weeks required: - type additionalProperties: false priorSettings: description: Controls the bayesian prior for the metric type: object properties: override: description: >- If false, the organization default settings will be used instead of the other settings in this object type: boolean proper: description: >- If true, the `mean` and `stddev` will be used, otherwise we will use an improper flat prior. type: boolean mean: description: >- The mean of the prior distribution of relative effects in proportion terms (e.g. 0.01 is 1%) type: number stddev: description: >- Must be > 0. The standard deviation of the prior distribution of relative effects in proportion terms. type: number required: - override - proper - mean - stddev additionalProperties: false regressionAdjustmentSettings: description: Controls the regression adjustment (CUPED) settings for the metric type: object properties: override: description: If false, the organization default settings will be used type: boolean enabled: description: >- Controls whether or not regresion adjustment is applied to the metric type: boolean days: description: Number of pre-exposure days to use for the regression adjustment type: number required: - override additionalProperties: false riskThresholdSuccess: type: number riskThresholdDanger: type: number displayAsPercentage: description: >- If true and the metric is a ratio metric, variation means will be displayed as a percentage type: boolean minPercentChange: type: number maxPercentChange: type: number minSampleSize: type: number targetMDE: type: number managedBy: description: >- Where this fact metric must be managed from. If not set (empty string), it can be managed from anywhere. type: string enum: - '' - api - admin dateCreated: format: date-time type: string dateUpdated: format: date-time type: string archived: type: boolean metricAutoSlices: description: >- Array of slice column names that will be automatically included in metric analysis. This is an enterprise feature. type: array items: type: string required: - id - name - description - owner - projects - tags - datasource - metricType - numerator - inverse - cappingSettings - windowSettings - priorSettings - regressionAdjustmentSettings - riskThresholdSuccess - riskThresholdDanger - minPercentChange - maxPercentChange - minSampleSize - targetMDE - managedBy - dateCreated - dateUpdated additionalProperties: false MetricAnalysis: type: object properties: id: description: The ID of the created metric analysis type: string status: description: The status of the analysis (e.g., "running", "completed", "error") type: string settings: type: object propertyNames: type: string additionalProperties: {} required: - id - status additionalProperties: false CodeRef: type: object properties: organization: description: The organization name type: string dateUpdated: format: date-time description: When the code references were last updated type: string feature: description: Feature identifier type: string repo: description: Repository name type: string branch: description: Branch name type: string platform: description: Source control platform type: string enum: - github - gitlab - bitbucket refs: type: array items: type: object properties: filePath: description: Path to the file containing the reference type: string startingLineNumber: description: Line number where the reference starts type: integer lines: description: The code lines containing the reference type: string flagKey: description: The feature flag key referenced type: string required: - filePath - startingLineNumber - lines - flagKey additionalProperties: false required: - organization - dateUpdated - feature - repo - branch - refs additionalProperties: false Member: type: object properties: id: type: string name: type: string email: type: string globalRole: type: string environments: type: array items: type: string limitAccessByEnvironment: type: boolean managedbyIdp: type: boolean teams: type: array items: type: string projectRoles: type: array items: type: object properties: project: type: string role: type: string limitAccessByEnvironment: type: boolean environments: type: array items: type: string required: - project - role - limitAccessByEnvironment - environments additionalProperties: false lastLoginDate: format: date-time type: string dateCreated: format: date-time type: string dateUpdated: format: date-time type: string required: - id - email - globalRole additionalProperties: false Query: type: object properties: id: type: string organization: type: string datasource: type: string language: type: string query: type: string queryType: type: string createdAt: type: string startedAt: type: string status: type: string enum: - running - queued - failed - partially-succeeded - succeeded externalId: type: string dependencies: type: array items: type: string runAtEnd: type: boolean required: - id - organization - datasource - language - query - queryType - createdAt - startedAt - status - externalId - dependencies - runAtEnd additionalProperties: false Settings: type: object properties: confidenceLevel: type: number northStar: anyOf: - type: object properties: title: type: string metricIds: type: array items: type: string additionalProperties: false - type: 'null' metricDefaults: type: object properties: priorSettings: type: object properties: override: type: boolean proper: type: boolean mean: type: number stddev: type: number required: - override - proper - mean - stddev additionalProperties: false minimumSampleSize: type: number maxPercentageChange: type: number minPercentageChange: type: number targetMDE: type: number additionalProperties: false pastExperimentsMinLength: type: number metricAnalysisDays: type: number updateSchedule: anyOf: - type: object properties: type: type: string enum: - cron - never - stale cron: anyOf: - type: string - type: 'null' hours: anyOf: - type: number - type: 'null' additionalProperties: false - type: 'null' multipleExposureMinPercent: type: number defaultRole: type: object properties: role: type: string limitAccessByEnvironment: type: boolean environments: type: array items: type: string additionalProperties: false statsEngine: type: string pValueThreshold: type: number regressionAdjustmentEnabled: type: boolean regressionAdjustmentDays: type: number sequentialTestingEnabled: type: boolean sequentialTestingTuningParameter: type: number attributionModel: type: string enum: - firstExposure - experimentDuration - lookbackOverride targetMDE: type: number delayHours: type: number windowType: type: string windowHours: type: number winRisk: type: number loseRisk: type: number secureAttributeSalt: type: string killswitchConfirmation: type: boolean featureKillSwitchBehavior: type: string enum: - 'off' - warn requireReviews: type: array items: type: object properties: requireReviewOn: type: boolean resetReviewOnChange: type: boolean environments: type: array items: type: string projects: type: array items: type: string featureRequireEnvironmentReview: type: boolean featureRequireMetadataReview: type: boolean additionalProperties: false restApiBypassesReviews: type: boolean featureKeyExample: type: string featureRegexValidator: type: string banditScheduleValue: type: number banditScheduleUnit: type: string enum: - hours - days banditBurnInValue: type: number banditBurnInUnit: type: string enum: - hours - days experimentMinLengthDays: type: number experimentMaxLengthDays: anyOf: - type: number - type: 'null' preferredEnvironment: anyOf: - type: string - type: 'null' maxMetricSliceLevels: type: number required: - confidenceLevel - northStar - metricDefaults - pastExperimentsMinLength - metricAnalysisDays - updateSchedule - multipleExposureMinPercent - defaultRole - statsEngine - pValueThreshold - regressionAdjustmentEnabled - regressionAdjustmentDays - sequentialTestingEnabled - sequentialTestingTuningParameter - attributionModel - targetMDE - delayHours - windowType - windowHours - winRisk - loseRisk - secureAttributeSalt - killswitchConfirmation - requireReviews - featureKeyExample - featureRegexValidator - banditScheduleValue - banditScheduleUnit - banditBurnInValue - banditBurnInUnit - experimentMinLengthDays additionalProperties: false InformationSchemaTable: type: object properties: id: type: string datasourceId: type: string informationSchemaId: type: string tableName: type: string tableSchema: type: string databaseName: type: string columns: type: array items: type: object properties: columnName: type: string dataType: type: string required: - columnName - dataType additionalProperties: false refreshMS: type: number dateCreated: format: date-time type: string dateUpdated: format: date-time type: string required: - id - datasourceId - informationSchemaId - tableName - tableSchema - databaseName - columns - refreshMS - dateCreated - dateUpdated additionalProperties: false RampSchedule: type: object properties: id: description: Unique identifier (rs_ prefix) type: string dateCreated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ dateUpdated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ name: type: string entityType: type: string enum: - feature entityId: type: string targets: description: Controlled entity references type: array items: type: object properties: id: type: string entityType: type: string enum: - feature entityId: type: string ruleId: anyOf: - type: string - type: 'null' environment: deprecated: true description: >- Legacy disambiguator used alongside `ruleId` for pre-v2 ramps. May be null on newer targets. anyOf: - type: string - type: 'null' status: type: string enum: - pending-join - active activatingRevisionVersion: description: >- Feature revision version that activates this ramp; cleared once published anyOf: - type: integer - type: 'null' required: - id - entityType - entityId - status additionalProperties: false steps: description: Ordered ramp steps type: array items: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: interval seconds: type: number exclusiveMinimum: 0 required: - type - seconds additionalProperties: false - type: object properties: type: type: string const: approval required: - type additionalProperties: false - type: object properties: type: type: string const: scheduled at: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ required: - type - at additionalProperties: false actions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' required: - ruleId additionalProperties: false required: - targetType - targetId - patch additionalProperties: false approvalNotes: anyOf: - type: string - type: 'null' required: - trigger - actions additionalProperties: false endActions: description: >- Actions applied on top of all step patches when the ramp completes. Represents the final desired rule state. type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' force: description: Force value (any JSON type) enabled: anyOf: - type: boolean - type: 'null' required: - ruleId additionalProperties: false required: - targetType - targetId - patch additionalProperties: false startDate: description: >- 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. anyOf: - type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ - type: 'null' endCondition: description: Optional hard deadline for standard (no-step) schedules anyOf: - type: object properties: trigger: anyOf: - type: object properties: type: type: string const: scheduled at: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ required: - type - at additionalProperties: false additionalProperties: false - type: 'null' status: type: string enum: - pending - ready - running - paused - pending-approval - completed - rolled-back currentStepIndex: description: Index of current step; -1 = not yet started type: integer minimum: -1 startedAt: anyOf: - type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ - type: 'null' phaseStartedAt: description: >- Anchor for cumulative interval timing; resets after each approval gate anyOf: - type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ - type: 'null' pausedAt: anyOf: - type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ - type: 'null' nextStepAt: description: >- When the next step fires; null for approval steps and terminal states anyOf: - type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ - type: 'null' nextProcessAt: anyOf: - type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ - type: 'null' elapsedMs: description: Milliseconds since startedAt (computed at response time, not stored) anyOf: - type: integer - type: 'null' required: - id - dateCreated - dateUpdated - name - entityType - entityId - targets - steps - status - currentStepIndex - nextStepAt additionalProperties: false Namespace: type: object properties: id: description: The unique internal identifier for the namespace (e.g. 'ns-abc123'). type: string displayName: description: Human-readable display name. type: string description: type: string status: type: string enum: - active - inactive format: description: >- Namespace format. 'multiRange' supports multiple ranges per experiment and a configurable hash attribute. type: string enum: - legacy - multiRange hashAttribute: description: >- The user attribute used to assign bucket membership. Only present on multiRange namespaces. type: string seed: description: >- The seed used for bucket hashing. Changing this re-randomizes which traffic is eligible for which experiment. Use the rotateSeed endpoint to change it. type: string required: - id - displayName - description - status - format additionalProperties: false NamespaceExperimentMember: type: object properties: id: description: The internal experiment ID. type: string name: description: Display name of the experiment. type: string trackingKey: description: The experiment tracking key used by the SDK. type: string status: description: The current status of the experiment. type: string enum: - draft - running - stopped ranges: description: >- The ranges claimed within this namespace, as [start, end] pairs between 0 and 1. type: array items: type: array prefixItems: - type: number - type: number required: - id - name - trackingKey - status - ranges additionalProperties: false Dashboard: type: object properties: id: type: string uid: type: string organization: type: string experimentId: type: string isDefault: type: boolean isDeleted: type: boolean userId: type: string editLevel: type: string enum: - published - private shareLevel: type: string enum: - published - private enableAutoUpdates: type: boolean updateSchedule: anyOf: - type: object properties: type: type: string const: stale hours: type: number required: - type - hours additionalProperties: false - type: object properties: type: type: string const: cron cron: type: string required: - type - cron additionalProperties: false title: type: string projects: type: array items: type: string nextUpdate: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ lastUpdated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ dateCreated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ dateUpdated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ blocks: type: array items: anyOf: - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: metric-explorer title: type: string description: type: string snapshotId: type: string factMetricId: type: string visualizationType: type: string enum: - histogram - bigNumber - timeseries valueType: type: string enum: - avg - sum metricAnalysisId: type: string analysisSettings: type: object properties: userIdType: type: string lookbackDays: type: number populationType: type: string enum: - metric - factTable - exposureQuery - population - segment populationId: anyOf: - type: string - type: 'null' additionalNumeratorFilters: type: array items: type: string additionalDenominatorFilters: type: array items: type: string startDate: type: string endDate: type: string required: - userIdType - lookbackDays - populationType - populationId - startDate - endDate additionalProperties: false required: - organization - id - uid - type - title - description - factMetricId - visualizationType - valueType - metricAnalysisId - analysisSettings additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: markdown title: type: string description: type: string snapshotId: type: string content: type: string required: - organization - id - uid - type - title - description - content additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: experiment-metadata title: type: string description: type: string snapshotId: type: string experimentId: type: string showDescription: type: boolean showHypothesis: type: boolean showVariationImages: type: boolean variationIds: type: array items: type: string required: - organization - id - uid - type - title - description - experimentId - showDescription - showHypothesis - showVariationImages additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: experiment-metric title: type: string description: type: string snapshotId: type: string experimentId: type: string metricIds: type: array items: type: string variationIds: type: array items: type: string baselineRow: type: number differenceType: type: string enum: - absolute - relative - scaled columnsFilter: type: array items: type: string enum: - Metric & Variation Names - Baseline Average - Variation Averages - Chance to Win - CI Graph - Lift sliceTagsFilter: type: array items: type: string metricTagFilter: type: array items: type: string sortBy: anyOf: - type: string enum: - metrics - metricTags - significance - change - type: 'null' sortDirection: anyOf: - type: string enum: - asc - desc - type: 'null' required: - organization - id - uid - type - title - description - snapshotId - experimentId - metricIds - variationIds - baselineRow - differenceType - columnsFilter - sliceTagsFilter - metricTagFilter - sortBy - sortDirection additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: experiment-dimension title: type: string description: type: string snapshotId: type: string experimentId: type: string dimensionId: type: string dimensionValues: type: array items: type: string metricIds: type: array items: type: string variationIds: type: array items: type: string baselineRow: type: number differenceType: type: string enum: - absolute - relative - scaled columnsFilter: type: array items: type: string enum: - Metric & Variation Names - Baseline Average - Variation Averages - Chance to Win - CI Graph - Lift metricTagFilter: type: array items: type: string sortBy: anyOf: - type: string enum: - metrics - metricTags - significance - change - type: 'null' sortDirection: anyOf: - type: string enum: - asc - desc - type: 'null' required: - organization - id - uid - type - title - description - snapshotId - experimentId - dimensionId - dimensionValues - metricIds - variationIds - baselineRow - differenceType - columnsFilter - metricTagFilter - sortBy - sortDirection additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: experiment-time-series title: type: string description: type: string snapshotId: type: string experimentId: type: string metricId: type: string metricIds: type: array items: type: string variationIds: type: array items: type: string differenceType: type: string enum: - absolute - relative - scaled sliceTagsFilter: type: array items: type: string metricTagFilter: type: array items: type: string sortBy: anyOf: - type: string enum: - metrics - metricTags - significance - change - type: 'null' sortDirection: anyOf: - type: string enum: - asc - desc - type: 'null' required: - organization - id - uid - type - title - description - snapshotId - experimentId - metricIds - variationIds - differenceType - sliceTagsFilter - metricTagFilter - sortBy - sortDirection additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: experiment-traffic title: type: string description: type: string snapshotId: type: string experimentId: type: string showTable: type: boolean showTimeseries: type: boolean required: - organization - id - uid - type - title - description - experimentId - showTable - showTimeseries additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: sql-explorer title: type: string description: type: string snapshotId: type: string savedQueryId: type: string dataVizConfigIndex: type: number blockConfig: type: array items: type: string required: - organization - id - uid - type - title - description - savedQueryId - blockConfig additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: metric-exploration title: type: string description: type: string snapshotId: type: string explorerAnalysisId: type: string config: type: object properties: datasource: description: ID of the datasource to query type: string dimensions: type: array items: anyOf: - type: object properties: dimensionType: type: string const: date column: anyOf: - type: string - type: 'null' dateGranularity: type: string enum: - auto - hour - day - week - month - year required: - dimensionType - column - dateGranularity additionalProperties: false - type: object properties: dimensionType: type: string const: dynamic column: anyOf: - type: string - type: 'null' maxValues: type: number required: - dimensionType - column - maxValues additionalProperties: false - type: object properties: dimensionType: type: string const: static column: type: string values: type: array items: type: string required: - dimensionType - column - values additionalProperties: false - type: object properties: dimensionType: type: string const: slice slices: type: array items: type: object properties: name: type: string filters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false required: - name - filters additionalProperties: false required: - dimensionType - slices additionalProperties: false chartType: type: string enum: - line - area - timeseries-table - table - bar - stackedBar - horizontalBar - stackedHorizontalBar - bigNumber dateRange: type: object properties: predefined: type: string enum: - today - last7Days - last30Days - last90Days - customLookback - customDateRange lookbackValue: anyOf: - type: number - type: 'null' lookbackUnit: anyOf: - type: string enum: - hour - day - week - month - type: 'null' startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' required: - predefined additionalProperties: false showAs: type: string enum: - total - per_unit type: type: string const: metric dataset: type: object properties: type: type: string const: metric values: type: array items: type: object properties: name: type: string rowFilters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false type: type: string const: metric metricId: type: string unit: anyOf: - type: string - type: 'null' denominatorUnit: anyOf: - type: string - type: 'null' required: - name - rowFilters - type - metricId - unit - denominatorUnit additionalProperties: false required: - type - values additionalProperties: false required: - datasource - dimensions - chartType - dateRange - type - dataset additionalProperties: false required: - organization - id - uid - type - title - description - explorerAnalysisId - config additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: fact-table-exploration title: type: string description: type: string snapshotId: type: string explorerAnalysisId: type: string config: type: object properties: datasource: description: ID of the datasource to query type: string dimensions: type: array items: anyOf: - type: object properties: dimensionType: type: string const: date column: anyOf: - type: string - type: 'null' dateGranularity: type: string enum: - auto - hour - day - week - month - year required: - dimensionType - column - dateGranularity additionalProperties: false - type: object properties: dimensionType: type: string const: dynamic column: anyOf: - type: string - type: 'null' maxValues: type: number required: - dimensionType - column - maxValues additionalProperties: false - type: object properties: dimensionType: type: string const: static column: type: string values: type: array items: type: string required: - dimensionType - column - values additionalProperties: false - type: object properties: dimensionType: type: string const: slice slices: type: array items: type: object properties: name: type: string filters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false required: - name - filters additionalProperties: false required: - dimensionType - slices additionalProperties: false chartType: type: string enum: - line - area - timeseries-table - table - bar - stackedBar - horizontalBar - stackedHorizontalBar - bigNumber dateRange: type: object properties: predefined: type: string enum: - today - last7Days - last30Days - last90Days - customLookback - customDateRange lookbackValue: anyOf: - type: number - type: 'null' lookbackUnit: anyOf: - type: string enum: - hour - day - week - month - type: 'null' startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' required: - predefined additionalProperties: false showAs: type: string enum: - total - per_unit type: type: string const: fact_table dataset: type: object properties: type: type: string const: fact_table factTableId: anyOf: - type: string - type: 'null' values: type: array items: type: object properties: name: type: string rowFilters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false type: type: string const: fact_table valueType: type: string enum: - unit_count - count - sum valueColumn: anyOf: - type: string - type: 'null' unit: anyOf: - type: string - type: 'null' required: - name - rowFilters - type - valueType - valueColumn - unit additionalProperties: false required: - type - factTableId - values additionalProperties: false required: - datasource - dimensions - chartType - dateRange - type - dataset additionalProperties: false required: - organization - id - uid - type - title - description - explorerAnalysisId - config additionalProperties: false - type: object properties: organization: type: string id: type: string uid: type: string type: type: string const: data-source-exploration title: type: string description: type: string snapshotId: type: string explorerAnalysisId: type: string config: type: object properties: datasource: description: ID of the datasource to query type: string dimensions: type: array items: anyOf: - type: object properties: dimensionType: type: string const: date column: anyOf: - type: string - type: 'null' dateGranularity: type: string enum: - auto - hour - day - week - month - year required: - dimensionType - column - dateGranularity additionalProperties: false - type: object properties: dimensionType: type: string const: dynamic column: anyOf: - type: string - type: 'null' maxValues: type: number required: - dimensionType - column - maxValues additionalProperties: false - type: object properties: dimensionType: type: string const: static column: type: string values: type: array items: type: string required: - dimensionType - column - values additionalProperties: false - type: object properties: dimensionType: type: string const: slice slices: type: array items: type: object properties: name: type: string filters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false required: - name - filters additionalProperties: false required: - dimensionType - slices additionalProperties: false chartType: type: string enum: - line - area - timeseries-table - table - bar - stackedBar - horizontalBar - stackedHorizontalBar - bigNumber dateRange: type: object properties: predefined: type: string enum: - today - last7Days - last30Days - last90Days - customLookback - customDateRange lookbackValue: anyOf: - type: number - type: 'null' lookbackUnit: anyOf: - type: string enum: - hour - day - week - month - type: 'null' startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' required: - predefined additionalProperties: false showAs: type: string enum: - total - per_unit type: type: string const: data_source dataset: type: object properties: type: type: string const: data_source table: type: string path: type: string timestampColumn: type: string columnTypes: type: object propertyNames: type: string additionalProperties: type: string enum: - string - number - date - boolean - other values: type: array items: type: object properties: name: type: string rowFilters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false type: type: string const: data_source valueType: type: string enum: - unit_count - count - sum valueColumn: anyOf: - type: string - type: 'null' unit: anyOf: - type: string - type: 'null' required: - name - rowFilters - type - valueType - valueColumn - unit additionalProperties: false required: - type - table - path - timestampColumn - columnTypes - values additionalProperties: false required: - datasource - dimensions - chartType - dateRange - type - dataset additionalProperties: false required: - organization - id - uid - type - title - description - explorerAnalysisId - config additionalProperties: false required: - id - uid - organization - isDefault - isDeleted - userId - editLevel - shareLevel - enableAutoUpdates - title - dateCreated - dateUpdated - blocks additionalProperties: false CustomField: type: object properties: id: type: string dateCreated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ dateUpdated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ name: type: string description: type: string placeholder: type: string defaultValue: anyOf: - type: string - type: number - type: boolean - type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ - type: string format: date pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ - type: array items: type: string - type: array items: type: number - type: array items: type: boolean - type: array items: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ - type: array items: type: string format: date pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$ type: type: string enum: - text - textarea - markdown - enum - multiselect - url - number - boolean - date - datetime values: type: string required: type: boolean creator: type: string projects: type: array items: type: string sections: type: array items: type: string enum: - feature - experiment active: type: boolean required: - id - dateCreated - dateUpdated - name - type - required - sections additionalProperties: false MetricGroup: type: object properties: id: type: string dateCreated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ dateUpdated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ owner: description: The userId of the owner (or raw owner name/email for legacy records) type: string ownerEmail: description: >- The email address of the owner, when the owner can be resolved to a known user. type: string name: type: string description: type: string tags: type: array items: type: string projects: type: array items: type: string metrics: type: array items: type: string datasource: type: string archived: type: boolean required: - id - dateCreated - dateUpdated - owner - name - description - tags - projects - metrics - datasource - archived additionalProperties: false Team: type: object properties: id: type: string dateCreated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ dateUpdated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ name: type: string createdBy: type: string description: type: string role: type: string limitAccessByEnvironment: type: boolean environments: type: array items: type: string projectRoles: type: array items: type: object properties: role: type: string limitAccessByEnvironment: type: boolean environments: type: array items: type: string teams: type: array items: type: string project: type: string required: - role - limitAccessByEnvironment - environments - project additionalProperties: false members: readOnly: true type: array items: type: string managedByIdp: type: boolean managedBy: anyOf: - type: object properties: type: type: string const: vercel resourceId: type: string required: - type - resourceId additionalProperties: false defaultProject: type: string required: - id - dateCreated - dateUpdated - name - createdBy - description - role - limitAccessByEnvironment - environments - members - managedByIdp additionalProperties: false ExperimentTemplate: type: object properties: id: type: string dateCreated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ dateUpdated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ project: type: string owner: description: The userId of the owner (or raw owner name/email for legacy records) type: string ownerEmail: description: >- The email address of the owner, when the owner can be resolved to a known user. type: string templateMetadata: type: object properties: name: type: string description: type: string required: - name additionalProperties: false type: type: string enum: - standard hypothesis: type: string description: type: string tags: type: array items: type: string customFields: type: object propertyNames: type: string additionalProperties: type: string datasource: type: string exposureQueryId: type: string hashAttribute: type: string fallbackAttribute: type: string disableStickyBucketing: type: boolean goalMetrics: type: array items: type: string secondaryMetrics: type: array items: type: string guardrailMetrics: type: array items: type: string activationMetric: type: string statsEngine: type: string enum: - bayesian - frequentist segment: type: string skipPartialData: type: boolean targeting: type: object properties: coverage: type: number savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false condition: type: string required: - coverage - condition additionalProperties: false customMetricSlices: type: array items: type: object properties: slices: type: array items: type: object properties: column: type: string levels: type: array items: type: string required: - column - levels additionalProperties: false required: - slices additionalProperties: false required: - id - dateCreated - dateUpdated - owner - templateMetadata - type - datasource - exposureQueryId - statsEngine - targeting additionalProperties: false RampScheduleTemplate: type: object properties: id: type: string dateCreated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ dateUpdated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ name: type: string steps: type: array items: type: object properties: trigger: anyOf: - type: object properties: type: type: string const: interval seconds: type: number exclusiveMinimum: 0 required: - type - seconds additionalProperties: false - type: object properties: type: type: string const: approval required: - type additionalProperties: false - type: object properties: type: type: string const: scheduled at: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ required: - type - at additionalProperties: false actions: type: array items: type: object properties: targetType: type: string const: feature-rule targetId: type: string patch: type: object properties: ruleId: type: string coverage: anyOf: - type: number minimum: 0 maximum: 1 - type: 'null' condition: anyOf: - type: string - type: 'null' savedGroups: anyOf: - type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false - type: 'null' prerequisites: anyOf: - type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false - type: 'null' enabled: anyOf: - type: boolean - type: 'null' required: - ruleId additionalProperties: false required: - targetType - targetId - patch additionalProperties: false approvalNotes: anyOf: - type: string - type: 'null' required: - trigger - actions additionalProperties: false endPatch: type: object properties: coverage: type: number minimum: 0 maximum: 1 condition: type: string savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false additionalProperties: false official: type: boolean required: - id - dateCreated - dateUpdated - name - steps additionalProperties: false ExperimentSnapshot: type: object properties: id: type: string experiment: type: string status: type: string required: - id - experiment - status additionalProperties: false FeatureBaseRule: type: object properties: description: type: string condition: type: string id: type: string enabled: type: boolean scheduleRules: description: Simple time-based on/off schedule for this rule type: array items: $ref: '#/components/schemas/ScheduleRule' scheduleType: description: > UI hint for which scheduling mode is active: - `none` – no schedule - `schedule` – simple time-based enable/disable via `scheduleRules` - `ramp` – multi-step ramp-up controlled by an associated RampSchedule document type: string enum: - none - schedule - ramp savedGroupTargeting: type: array items: type: object properties: matchType: type: string enum: - all - any - none savedGroups: type: array items: type: string required: - matchType - savedGroups additionalProperties: false prerequisites: type: array items: type: object properties: id: description: Feature ID of the prerequisite type: string condition: type: string required: - id - condition additionalProperties: false required: - description - id - enabled additionalProperties: false $defs: ScheduleRule: id: ScheduleRule type: object properties: enabled: description: >- Whether the rule should be enabled or disabled at the specified timestamp. type: boolean timestamp: description: ISO timestamp when the rule should activate. anyOf: - format: date-time type: string - type: 'null' required: - enabled - timestamp additionalProperties: false FeatureDefinition: type: object properties: defaultValue: anyOf: - type: string - type: number - type: array items: {} - type: object propertyNames: type: string additionalProperties: {} - type: 'null' rules: type: array items: type: object properties: force: anyOf: - type: string - type: number - type: array items: {} - type: object propertyNames: type: string additionalProperties: {} - type: 'null' weights: type: array items: type: number variations: type: array items: anyOf: - type: string - type: number - type: array items: {} - type: object propertyNames: type: string additionalProperties: {} - type: 'null' hashAttribute: type: string namespace: minItems: 3 maxItems: 3 type: array items: anyOf: - type: number - type: string key: type: string coverage: type: number condition: type: object propertyNames: type: string additionalProperties: {} additionalProperties: false required: - defaultValue additionalProperties: false AnalyticsExploration: type: object properties: id: type: string dateCreated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ dateUpdated: type: string format: date-time pattern: >- ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$ datasource: type: string status: type: string enum: - running - success - error dateStart: type: string dateEnd: type: string error: anyOf: - type: string - type: 'null' result: type: object properties: rows: type: array items: type: object properties: dimensions: type: array items: anyOf: - type: string - type: 'null' values: type: array items: type: object properties: metricId: type: string numerator: anyOf: - type: number - type: 'null' denominator: anyOf: - type: number - type: 'null' required: - metricId - numerator - denominator additionalProperties: false required: - dimensions - values additionalProperties: false required: - rows additionalProperties: false config: anyOf: - type: object properties: datasource: description: ID of the datasource to query type: string dimensions: type: array items: anyOf: - type: object properties: dimensionType: type: string const: date column: anyOf: - type: string - type: 'null' dateGranularity: type: string enum: - auto - hour - day - week - month - year required: - dimensionType - column - dateGranularity additionalProperties: false - type: object properties: dimensionType: type: string const: dynamic column: anyOf: - type: string - type: 'null' maxValues: type: number required: - dimensionType - column - maxValues additionalProperties: false - type: object properties: dimensionType: type: string const: static column: type: string values: type: array items: type: string required: - dimensionType - column - values additionalProperties: false - type: object properties: dimensionType: type: string const: slice slices: type: array items: type: object properties: name: type: string filters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false required: - name - filters additionalProperties: false required: - dimensionType - slices additionalProperties: false chartType: type: string enum: - line - area - timeseries-table - table - bar - stackedBar - horizontalBar - stackedHorizontalBar - bigNumber dateRange: type: object properties: predefined: type: string enum: - today - last7Days - last30Days - last90Days - customLookback - customDateRange lookbackValue: anyOf: - type: number - type: 'null' lookbackUnit: anyOf: - type: string enum: - hour - day - week - month - type: 'null' startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' required: - predefined additionalProperties: false showAs: type: string enum: - total - per_unit type: type: string const: metric dataset: type: object properties: type: type: string const: metric values: type: array items: type: object properties: name: type: string rowFilters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false type: type: string const: metric metricId: type: string unit: anyOf: - type: string - type: 'null' denominatorUnit: anyOf: - type: string - type: 'null' required: - name - rowFilters - type - metricId - unit - denominatorUnit additionalProperties: false required: - type - values additionalProperties: false required: - datasource - dimensions - chartType - dateRange - type - dataset additionalProperties: false - type: object properties: datasource: description: ID of the datasource to query type: string dimensions: type: array items: anyOf: - type: object properties: dimensionType: type: string const: date column: anyOf: - type: string - type: 'null' dateGranularity: type: string enum: - auto - hour - day - week - month - year required: - dimensionType - column - dateGranularity additionalProperties: false - type: object properties: dimensionType: type: string const: dynamic column: anyOf: - type: string - type: 'null' maxValues: type: number required: - dimensionType - column - maxValues additionalProperties: false - type: object properties: dimensionType: type: string const: static column: type: string values: type: array items: type: string required: - dimensionType - column - values additionalProperties: false - type: object properties: dimensionType: type: string const: slice slices: type: array items: type: object properties: name: type: string filters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false required: - name - filters additionalProperties: false required: - dimensionType - slices additionalProperties: false chartType: type: string enum: - line - area - timeseries-table - table - bar - stackedBar - horizontalBar - stackedHorizontalBar - bigNumber dateRange: type: object properties: predefined: type: string enum: - today - last7Days - last30Days - last90Days - customLookback - customDateRange lookbackValue: anyOf: - type: number - type: 'null' lookbackUnit: anyOf: - type: string enum: - hour - day - week - month - type: 'null' startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' required: - predefined additionalProperties: false showAs: type: string enum: - total - per_unit type: type: string const: fact_table dataset: type: object properties: type: type: string const: fact_table factTableId: anyOf: - type: string - type: 'null' values: type: array items: type: object properties: name: type: string rowFilters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false type: type: string const: fact_table valueType: type: string enum: - unit_count - count - sum valueColumn: anyOf: - type: string - type: 'null' unit: anyOf: - type: string - type: 'null' required: - name - rowFilters - type - valueType - valueColumn - unit additionalProperties: false required: - type - factTableId - values additionalProperties: false required: - datasource - dimensions - chartType - dateRange - type - dataset additionalProperties: false - type: object properties: datasource: description: ID of the datasource to query type: string dimensions: type: array items: anyOf: - type: object properties: dimensionType: type: string const: date column: anyOf: - type: string - type: 'null' dateGranularity: type: string enum: - auto - hour - day - week - month - year required: - dimensionType - column - dateGranularity additionalProperties: false - type: object properties: dimensionType: type: string const: dynamic column: anyOf: - type: string - type: 'null' maxValues: type: number required: - dimensionType - column - maxValues additionalProperties: false - type: object properties: dimensionType: type: string const: static column: type: string values: type: array items: type: string required: - dimensionType - column - values additionalProperties: false - type: object properties: dimensionType: type: string const: slice slices: type: array items: type: object properties: name: type: string filters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false required: - name - filters additionalProperties: false required: - dimensionType - slices additionalProperties: false chartType: type: string enum: - line - area - timeseries-table - table - bar - stackedBar - horizontalBar - stackedHorizontalBar - bigNumber dateRange: type: object properties: predefined: type: string enum: - today - last7Days - last30Days - last90Days - customLookback - customDateRange lookbackValue: anyOf: - type: number - type: 'null' lookbackUnit: anyOf: - type: string enum: - hour - day - week - month - type: 'null' startDate: anyOf: - type: string - type: 'null' endDate: anyOf: - type: string - type: 'null' required: - predefined additionalProperties: false showAs: type: string enum: - total - per_unit type: type: string const: data_source dataset: type: object properties: type: type: string const: data_source table: type: string path: type: string timestampColumn: type: string columnTypes: type: object propertyNames: type: string additionalProperties: type: string enum: - string - number - date - boolean - other values: type: array items: type: object properties: name: type: string rowFilters: type: array items: type: object properties: operator: type: string enum: - '=' - '!=' - < - <= - '>' - '>=' - in - not_in - contains - not_contains - starts_with - ends_with - is_null - not_null - is_true - is_false - sql_expr - saved_filter column: type: string values: type: array items: type: string required: - operator additionalProperties: false type: type: string const: data_source valueType: type: string enum: - unit_count - count - sum valueColumn: anyOf: - type: string - type: 'null' unit: anyOf: - type: string - type: 'null' required: - name - rowFilters - type - valueType - valueColumn - unit additionalProperties: false required: - type - table - path - timestampColumn - columnTypes - values additionalProperties: false required: - datasource - dimensions - chartType - dateRange - type - dataset additionalProperties: false required: - id - dateCreated - dateUpdated - datasource - status - dateStart - dateEnd - result - config additionalProperties: false VisualChange: type: object properties: description: type: string css: type: string js: type: string variation: type: string domMutations: type: array items: type: object properties: selector: type: string action: type: string enum: - append - set - remove attribute: type: string value: type: string parentSelector: type: string insertBeforeSelector: type: string required: - selector - action - attribute additionalProperties: false required: - variation additionalProperties: false features: description: >- Map of feature ID to stale status. Only requested features that were found and readable are included. type: object propertyNames: type: string additionalProperties: type: object properties: featureId: description: The feature key type: string isStale: description: >- Whether the feature is considered stale overall (all enabled environments are stale). Always false when neverStale is true. type: boolean staleReason: description: > Reason for the feature's stale or non-stale status. `never-stale` when stale detection is disabled. Non-stale reasons: `recently-updated`, `active-draft`, `has-dependents`. Stale reasons: `no-rules`, `rules-one-sided`, `abandoned-draft`, `toggled-off`. Null when non-stale with no single cause (see staleByEnv). anyOf: - type: string enum: - never-stale - recently-updated - active-draft - has-dependents - no-rules - rules-one-sided - abandoned-draft - toggled-off - active-experiment - has-rules - type: 'null' neverStale: description: >- When true the feature is permanently excluded from stale detection. type: boolean staleByEnv: description: >- Per-environment staleness breakdown, keyed by environment ID. Present when environments exist and neverStale is false. type: object propertyNames: type: string additionalProperties: type: object properties: isStale: description: Whether this environment is stale type: boolean reason: description: Reason for the stale status in this environment anyOf: - type: string enum: - no-rules - rules-one-sided - abandoned-draft - toggled-off - active-experiment - has-rules - recently-updated - active-draft - has-dependents - type: 'null' evaluatesTo: description: > The deterministic value this feature evaluates to in this environment. Uses the same raw string encoding as `feature.defaultValue`. Only present when the value is deterministic or the environment is toggled off. type: string required: - isStale - reason additionalProperties: false required: - featureId - isStale - staleReason - neverStale additionalProperties: false conflicts: type: object properties: name: type: string key: type: string resolved: type: boolean base: type: string live: type: string revision: type: string required: - name - key - resolved - base - live - revision additionalProperties: false result: type: object properties: defaultValue: type: string rules: type: array items: anyOf: - type: object properties: description: type: string condition: type: string id: type: string allEnvironments: type: boolean environments: type: array items: type: string enabled: type: boolean scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false scheduleType: type: string enum: - none - schedule - ramp type: type: string const: force value: type: string required: - description - id - allEnvironments - type - value additionalProperties: false - type: object properties: description: type: string condition: type: string id: type: string allEnvironments: type: boolean environments: type: array items: type: string enabled: type: boolean scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false scheduleType: type: string enum: - none - schedule - ramp type: type: string const: rollout value: type: string coverage: type: number hashAttribute: type: string seed: type: string required: - description - id - allEnvironments - type - value - coverage - hashAttribute additionalProperties: false - type: object properties: description: type: string condition: type: string id: type: string allEnvironments: type: boolean environments: type: array items: type: string enabled: type: boolean scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false scheduleType: type: string enum: - none - schedule - ramp type: type: string const: experiment experimentType: type: string enum: - standard - multi-armed-bandit hypothesis: type: string trackingKey: type: string hashAttribute: type: string fallbackAttribute: type: string hashVersion: type: number disableStickyBucketing: type: boolean bucketVersion: type: number minBucketVersion: type: number namespace: anyOf: - type: object properties: enabled: type: boolean name: type: string range: type: array prefixItems: - type: number - type: number format: type: string const: legacy required: - enabled - name - range additionalProperties: false - type: object properties: enabled: type: boolean name: type: string ranges: type: array items: type: array prefixItems: - type: number - type: number hashAttribute: type: string hashVersion: type: number format: type: string const: multiRange required: - enabled - name - ranges - format additionalProperties: false coverage: type: number datasource: type: string exposureQueryId: type: string goalMetrics: type: array items: type: string secondaryMetrics: type: array items: type: string guardrailMetrics: type: array items: type: string activationMetric: type: string segment: type: string skipPartialData: type: boolean values: type: array items: type: object properties: value: type: string weight: type: number name: type: string required: - value - weight additionalProperties: false regressionAdjustmentEnabled: type: boolean sequentialTestingEnabled: type: boolean sequentialTestingTuningParameter: type: number statsEngine: type: string enum: - bayesian - frequentist banditStage: type: string enum: - explore - exploit - paused banditStageDateStarted: {} banditScheduleValue: type: number banditScheduleUnit: type: string enum: - hours - days banditBurnInValue: type: number banditBurnInUnit: type: string enum: - hours - days banditConversionWindowValue: anyOf: - type: number - type: 'null' banditConversionWindowUnit: anyOf: - type: string enum: - hours - days - type: 'null' templateId: type: string customFields: type: object propertyNames: type: string additionalProperties: {} required: - description - id - allEnvironments - type - trackingKey - hashAttribute - values additionalProperties: false - type: object properties: description: type: string condition: type: string id: type: string allEnvironments: type: boolean environments: type: array items: type: string enabled: type: boolean scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false scheduleType: type: string enum: - none - schedule - ramp type: type: string const: experiment-ref experimentId: type: string variations: type: array items: type: object properties: variationId: type: string value: type: string required: - variationId - value additionalProperties: false required: - description - id - allEnvironments - type - experimentId - variations additionalProperties: false - type: object properties: description: type: string condition: type: string id: type: string allEnvironments: type: boolean environments: type: array items: type: string enabled: type: boolean scheduleRules: type: array items: type: object properties: timestamp: anyOf: - type: string - type: 'null' enabled: type: boolean required: - timestamp - enabled additionalProperties: false savedGroups: type: array items: type: object properties: match: type: string enum: - all - none - any ids: type: array items: type: string required: - match - ids additionalProperties: false prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false scheduleType: type: string enum: - none - schedule - ramp type: type: string const: safe-rollout controlValue: type: string variationValue: type: string safeRolloutId: type: string status: default: running type: string enum: - running - rolled-back - released - stopped hashAttribute: type: string seed: type: string trackingKey: type: string required: - description - id - allEnvironments - type - controlValue - variationValue - safeRolloutId - status - hashAttribute - seed - trackingKey additionalProperties: false environmentsEnabled: type: object propertyNames: type: string additionalProperties: type: boolean prerequisites: type: array items: type: object properties: id: type: string condition: type: string required: - id - condition additionalProperties: false archived: type: boolean metadata: type: object properties: releaseType: type: string riskLevel: type: string additionalProperties: {} holdout: anyOf: - type: object properties: id: type: string value: type: string required: - id - value additionalProperties: false - type: 'null' additionalProperties: false snapshot: type: object properties: id: type: string experiment: type: string status: type: string required: - id - experiment - status additionalProperties: false screenshot: type: object properties: path: description: URL or path to the uploaded screenshot type: string description: description: Description of the screenshot type: string required: - path - description additionalProperties: false experiments: type: object properties: id: type: string name: type: string required: - id - name additionalProperties: false updatedMember: type: object properties: id: type: string role: type: string environments: type: array items: type: string limitAccessByEnvironment: type: boolean projectRoles: type: array items: type: object properties: project: type: string role: type: string limitAccessByEnvironment: type: boolean environments: type: array items: type: string required: - project - role - limitAccessByEnvironment - environments additionalProperties: false required: - id - role - environments - limitAccessByEnvironment additionalProperties: false securitySchemes: bearerAuth: type: http scheme: bearer description: > If using Bearer auth, pass the Secret Key as the token: ```bash curl https://api.growthbook.io/api/v1/features -H "Authorization: Bearer secret_abc123DEF456" ``` basicAuth: type: http scheme: basic description: > If using HTTP Basic auth, pass the Secret Key as the username and leave the password blank: ```bash curl https://api.growthbook.io/api/v1/features -u secret_abc123DEF456: # The ":" at the end stops curl from asking for a password ``` x-tagGroups: - name: Endpoints tags: - projects - environments - features-v2 - feature-revisions-v2 - features - feature-revisions - ramp-schedules - data-sources - fact-tables - fact-metrics - metrics - experiments - namespaces - snapshots - dimensions - segments - sdk-connections - visual-changesets - saved-groups - organizations - members - code-references - archetypes - queries - settings - attributes - usage - Dashboards - CustomFields - MetricGroups - Teams - ExperimentTemplates - AnalyticsExplorations - RampScheduleTemplates - name: Models tags: - AnalyticsExploration_model - Archetype_model - Attribute_model - CodeRef_model - CustomField_model - Dashboard_model - DataSource_model - Dimension_model - Environment_model - Experiment_model - ExperimentAnalysisSettings_model - ExperimentDecisionFrameworkSettings_model - ExperimentMetric_model - ExperimentMetricOverrideEntry_model - ExperimentResults_model - ExperimentSnapshot_model - ExperimentTemplate_model - ExperimentWithEnhancedStatus_model - FactMetric_model - FactTable_model - FactTableColumn_model - FactTableFilter_model - Feature_model - FeatureBaseRule_model - FeatureDefinition_model - FeatureEnvironment_model - FeatureEnvironmentV2_model - FeatureExperimentRefRule_model - FeatureExperimentRule_model - FeatureForceRule_model - FeatureRevision_model - FeatureRevisionV2_model - FeatureRolloutRule_model - FeatureRule_model - FeatureRuleV2_model - FeatureSafeRolloutRule_model - FeatureV2_model - FeatureWithRevisions_model - FeatureWithRevisionsV2_model - InformationSchema_model - InformationSchemaTable_model - LookbackOverride_model - Member_model - Metric_model - MetricAnalysis_model - MetricGroup_model - MetricUsage_model - Namespace_model - NamespaceExperimentMember_model - Organization_model - PaginationFields_model - Project_model - Query_model - RampSchedule_model - RampScheduleTemplate_model - SavedGroup_model - ScheduleRule_model - SdkConnection_model - Segment_model - Settings_model - Team_model - VisualChange_model - VisualChangeset_model