> ## Documentation Index
> Fetch the complete documentation index at: https://docs.growthbook.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a single fact metric



## OpenAPI

````yaml openapi.yaml POST /v1/fact-metrics
openapi: 3.1.0
info:
  version: 5.1.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

    - **422** - Unprocessable Entity - The request is valid, but a warning,
    validation rule, approval requirement, or another publishing gate blocked
    it. Do not assume that `ignoreWarnings` clears every 422 response.

    - **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


    ### Publishing gates


    Publish responses include a `gates` array that explains every blocker:


    - `type`, `severity`, and `messages` identify the problem.

    - `override` names the request-body field that can bypass it. This is
    `ignoreWarnings` for warnings, `skipSchemaValidation` for schema and
    invariant failures, or `skipHooks` for Custom Hook rejections. A value of
    `null` means there is no request-body override.

    - `requiresPermission` identifies any additional permission needed to use
    the override.

    - `resolution` provides an API action, method, and path when the blocker
    must be resolved another way.


    For example, an approval gate is cleared by approving the revision or by
    using a caller with **Bypass draft approvals** access. A Config lock is
    cleared through the unlock route in `resolution`.


    When a successful publish bypasses a gate, the response includes
    `bypassedGates`. Each entry reports the gate `type` and how it was bypassed
    in `via`, which is one of `ignoreWarnings`, `skipSchemaValidation`,
    `skipHooks`, `bypassApprovalPermission`, `restApiBypassesReviews`, or
    `revertsBypassApproval` (reverts only). This field is omitted when no gates
    were bypassed.
servers:
  - url: https://api.growthbook.io/api
    description: GrowthBook Cloud
  - url: https://{domain}/api
    description: Self-hosted GrowthBook
    variables:
      domain:
        default: localhost:3100
        description: Your self-hosted GrowthBook host (and port)
security:
  - bearerAuth: []
  - basicAuth: []
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 programmatically.


      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 programmatically.


      **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 increase feature rule traffic
      over time, with optional real-time monitoring. Each step supports interval
      timers, approval gates, and hold conditions. Monitored steps are backed by
      a live analysis experiment that can automatically hold, roll back, or
      advance the ramp based on guardrail and signal metric health.
  - 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: reports
    x-displayName: Experiment Reports
    description: >-
      Custom analysis reports built on top of experiment snapshots. Reports let
      you re-run analysis with different metrics, date ranges, stats engines,
      and other settings without modifying the underlying experiment.
  - 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: saved-group-revisions
    x-displayName: Saved Group Revisions
    description: >-
      Draft revisions for saved groups, including pending changes, approvals,
      and lifecycle (publish, discard, revert).


      Most callers can interact with these endpoints via shorthand actions
      (`/items/add`, `/items/remove`, single-field PUTs) instead of authoring
      JSON Patch ops directly. Pass `version: "new"` on edit endpoints to
      auto-create a draft.
  - name: constants
    x-displayName: Constants
    description: >-
      **Beta** — these endpoints are new and may change in
      backwards-incompatible ways.


      Reusable named values referenced from feature flag values as `@const:key`
      and resolved into the SDK payload at build time. String constants are
      interpolated via `{{ @const:key }}`; JSON (object) constants are composed
      via an `$extends` array. A constant's own keys **replace** what its
      `$extends` bases provide, wholesale — constants are atomic building
      blocks. (Config and feature values compose as deep, targeted patches
      instead.)
  - name: constant-revisions
    x-displayName: Constant Revisions
    description: >-
      **Beta** — these endpoints are new and may change in
      backwards-incompatible ways.


      Draft revisions for constants, including pending changes, approvals, and
      lifecycle (publish, discard, revert). Pass `version: "new"` on edit
      endpoints to auto-create a draft.
  - name: configs
    x-displayName: Configs
    description: >-
      **Beta** — these endpoints are new and may change in
      backwards-incompatible ways.


      Reusable, typed, inheritable JSON objects referenced from feature flag
      values as `@config:key`. A config carries a field `schema` (with
      TypeScript/JSON Schema import-export) and a lineage `parent`. Inheritance
      is expressed via `parent`, never an in-value `@config:` entry. Values
      layer as a **deep, targeted patch**: a child (or a config-backed feature
      value) restates only the leaves it changes and inherits the rest — unlike
      a constant's `$extends`, whose own keys replace wholesale. Schema fields
      colliding with a published ancestor's key follow 'base wins': identical
      re-declarations are stripped with a warning, differing ones are rejected.
  - name: config-revisions
    x-displayName: Config Revisions
    description: >-
      **Beta** — these endpoints are new and may change in
      backwards-incompatible ways.


      Draft revisions for configs, including value and schema edits, schema
      import (JSON Schema / TypeScript / inferred), approvals, and lifecycle
      (publish, discard, revert). Publishing a schema change cascades the "base
      wins" normalization to descendant configs; a publish that removes or
      retypes fields descendants still use soft-blocks with a 422 unless the
      request body sets `ignoreWarnings: true`. Pass `version: "new"` on edit
      endpoints to auto-create a draft.
  - name: releases
    x-displayName: Releases
    description: >-
      **Beta** — these endpoints are new and may change in
      backwards-incompatible ways.


      Coordinated multi-entity publishing: publish a set of revisions across
      Feature Flags, Saved Groups, configs, and constants as one all-or-nothing
      operation, validated against the combined end-state instead of each
      in-between state. Requires the `releases` commercial feature.
  - name: custom-hooks
    x-displayName: Custom Hooks
    description: >-
      Sandboxed JavaScript validation hooks that run when features, configs, or
      their revisions are saved or published. Throwing an Error blocks the save;
      `addWarning(msg)` raises a soft warning. Hooks are scoped by projects, or
      pinned to a single feature/config via `entityType`/`entityId`; a
      config-scoped hook also runs for every config inheriting from it (its
      whole descendant lineage). Scope can be retargeted on update (or cleared
      with nulls). Requires an enterprise plan; not available on GrowthBook
      Cloud.
  - 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: meta
    x-displayName: Meta
    description: >-
      Server metadata, including the running build's version and commit for
      version-skew checks.
  - name: ContextualBandits
    x-displayName: Contextual Bandits
    description: ''
  - name: Dashboards
    x-displayName: Dashboards
    description: ''
  - name: ContextualBanditQueries
    x-displayName: Contextual Bandit Queries
    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: Learnings
    x-displayName: Learnings
    description: >-
      Saved learnings captured across experiments, including AI-discovered
      patterns.
  - name: Holdouts
    x-displayName: Holdouts
    description: >-
      Hold a share of traffic out of all experiments to measure their combined
      effect.
  - name: AutoRuns
    x-displayName: Auto Runs
    description: ''
  - name: AggregatedFactTable_model
    x-displayName: Aggregated Fact Table
    description: <SchemaDefinition schemaRef="#/components/schemas/AggregatedFactTable" />
  - name: AnalyticsExploration_model
    x-displayName: Analytics Exploration
    description: <SchemaDefinition schemaRef="#/components/schemas/AnalyticsExploration" />
  - name: Archetype_model
    x-displayName: Archetype
    description: <SchemaDefinition schemaRef="#/components/schemas/Archetype" />
  - name: Attribute_model
    x-displayName: Attribute
    description: <SchemaDefinition schemaRef="#/components/schemas/Attribute" />
  - name: AutoRun_model
    x-displayName: Auto Run
    description: <SchemaDefinition schemaRef="#/components/schemas/AutoRun" />
  - name: CodeRef_model
    x-displayName: Code Ref
    description: <SchemaDefinition schemaRef="#/components/schemas/CodeRef" />
  - name: Config_model
    x-displayName: Config
    description: <SchemaDefinition schemaRef="#/components/schemas/Config" />
  - name: ConfigKeyUsage_model
    x-displayName: Config Key Usage
    description: <SchemaDefinition schemaRef="#/components/schemas/ConfigKeyUsage" />
  - name: ConfigLineage_model
    x-displayName: Config Lineage
    description: <SchemaDefinition schemaRef="#/components/schemas/ConfigLineage" />
  - name: ConfigReferences_model
    x-displayName: Config References
    description: <SchemaDefinition schemaRef="#/components/schemas/ConfigReferences" />
  - name: ConfigRevision_model
    x-displayName: Config Revision
    description: <SchemaDefinition schemaRef="#/components/schemas/ConfigRevision" />
  - name: ConfigRevisionActivityLogEntry_model
    x-displayName: Config Revision Activity Log Entry
    description: >-
      <SchemaDefinition
      schemaRef="#/components/schemas/ConfigRevisionActivityLogEntry" />
  - name: ConfigRevisionRef_model
    x-displayName: Config Revision Ref
    description: <SchemaDefinition schemaRef="#/components/schemas/ConfigRevisionRef" />
  - name: ConfigRevisionReview_model
    x-displayName: Config Revision Review
    description: <SchemaDefinition schemaRef="#/components/schemas/ConfigRevisionReview" />
  - name: ConfigSchemaExport_model
    x-displayName: Config Schema Export
    description: <SchemaDefinition schemaRef="#/components/schemas/ConfigSchemaExport" />
  - name: ConfigSchemaSource_model
    x-displayName: Config Schema Source
    description: <SchemaDefinition schemaRef="#/components/schemas/ConfigSchemaSource" />
  - name: ConfigSchemaVerify_model
    x-displayName: Config Schema Verify
    description: <SchemaDefinition schemaRef="#/components/schemas/ConfigSchemaVerify" />
  - name: ConfigSchemaWarning_model
    x-displayName: Config Schema Warning
    description: <SchemaDefinition schemaRef="#/components/schemas/ConfigSchemaWarning" />
  - name: Constant_model
    x-displayName: Constant
    description: <SchemaDefinition schemaRef="#/components/schemas/Constant" />
  - name: ConstantReferences_model
    x-displayName: Constant References
    description: <SchemaDefinition schemaRef="#/components/schemas/ConstantReferences" />
  - name: ConstantRevision_model
    x-displayName: Constant Revision
    description: <SchemaDefinition schemaRef="#/components/schemas/ConstantRevision" />
  - name: ConstantRevisionActivityLogEntry_model
    x-displayName: Constant Revision Activity Log Entry
    description: >-
      <SchemaDefinition
      schemaRef="#/components/schemas/ConstantRevisionActivityLogEntry" />
  - name: ConstantRevisionRef_model
    x-displayName: Constant Revision Ref
    description: <SchemaDefinition schemaRef="#/components/schemas/ConstantRevisionRef" />
  - name: ConstantRevisionReview_model
    x-displayName: Constant Revision Review
    description: >-
      <SchemaDefinition schemaRef="#/components/schemas/ConstantRevisionReview"
      />
  - name: ContextualBandit_model
    x-displayName: Contextual Bandit
    description: <SchemaDefinition schemaRef="#/components/schemas/ContextualBandit" />
  - name: ContextualBanditQuery_model
    x-displayName: Contextual Bandit Query
    description: >-
      <SchemaDefinition schemaRef="#/components/schemas/ContextualBanditQuery"
      />
  - name: CustomField_model
    x-displayName: Custom Field
    description: <SchemaDefinition schemaRef="#/components/schemas/CustomField" />
  - name: CustomHook_model
    x-displayName: Custom Hook
    description: <SchemaDefinition schemaRef="#/components/schemas/CustomHook" />
  - name: Dashboard_model
    x-displayName: Dashboard
    description: <SchemaDefinition schemaRef="#/components/schemas/Dashboard" />
  - name: DataSource_model
    x-displayName: Data Source
    description: <SchemaDefinition schemaRef="#/components/schemas/DataSource" />
  - name: Dimension_model
    x-displayName: Dimension
    description: <SchemaDefinition schemaRef="#/components/schemas/Dimension" />
  - name: Environment_model
    x-displayName: Environment
    description: <SchemaDefinition schemaRef="#/components/schemas/Environment" />
  - name: EventUser_model
    x-displayName: Event User
    description: <SchemaDefinition schemaRef="#/components/schemas/EventUser" />
  - name: Experiment_model
    x-displayName: Experiment
    description: <SchemaDefinition schemaRef="#/components/schemas/Experiment" />
  - name: Experiment Rule_model
    x-displayName: Experiment Rule
    description: <SchemaDefinition schemaRef="#/components/schemas/Experiment Rule" />
  - name: ExperimentAnalysisSettings_model
    x-displayName: Experiment Analysis Settings
    description: >-
      <SchemaDefinition
      schemaRef="#/components/schemas/ExperimentAnalysisSettings" />
  - name: ExperimentDecisionFrameworkSettings_model
    x-displayName: Experiment Decision Framework Settings
    description: >-
      <SchemaDefinition
      schemaRef="#/components/schemas/ExperimentDecisionFrameworkSettings" />
  - name: ExperimentMetric_model
    x-displayName: Experiment Metric
    description: <SchemaDefinition schemaRef="#/components/schemas/ExperimentMetric" />
  - name: ExperimentMetricOverrideEntry_model
    x-displayName: Experiment Metric Override Entry
    description: >-
      <SchemaDefinition
      schemaRef="#/components/schemas/ExperimentMetricOverrideEntry" />
  - name: ExperimentResults_model
    x-displayName: Experiment Results
    description: <SchemaDefinition schemaRef="#/components/schemas/ExperimentResults" />
  - name: ExperimentSnapshot_model
    x-displayName: Experiment Snapshot
    description: <SchemaDefinition schemaRef="#/components/schemas/ExperimentSnapshot" />
  - name: ExperimentTemplate_model
    x-displayName: Experiment Template
    description: <SchemaDefinition schemaRef="#/components/schemas/ExperimentTemplate" />
  - name: ExperimentWithEnhancedStatus_model
    x-displayName: Experiment With Enhanced Status
    description: >-
      <SchemaDefinition
      schemaRef="#/components/schemas/ExperimentWithEnhancedStatus" />
  - name: FactMetric_model
    x-displayName: Fact Metric
    description: <SchemaDefinition schemaRef="#/components/schemas/FactMetric" />
  - name: FactTable_model
    x-displayName: Fact Table
    description: <SchemaDefinition schemaRef="#/components/schemas/FactTable" />
  - name: FactTableColumn_model
    x-displayName: Fact Table Column
    description: <SchemaDefinition schemaRef="#/components/schemas/FactTableColumn" />
  - name: FactTableFilter_model
    x-displayName: Fact Table Filter
    description: <SchemaDefinition schemaRef="#/components/schemas/FactTableFilter" />
  - name: FeatureBaseRule_model
    x-displayName: Feature Base Rule
    description: <SchemaDefinition schemaRef="#/components/schemas/FeatureBaseRule" />
  - name: FeatureContextualBanditRefRule_model
    x-displayName: Feature Contextual Bandit Ref Rule
    description: >-
      <SchemaDefinition
      schemaRef="#/components/schemas/FeatureContextualBanditRefRule" />
  - name: FeatureDefinition_model
    x-displayName: Feature Definition
    description: <SchemaDefinition schemaRef="#/components/schemas/FeatureDefinition" />
  - name: FeatureEnvironmentV1_model
    x-displayName: Feature Environment V1
    description: <SchemaDefinition schemaRef="#/components/schemas/FeatureEnvironmentV1" />
  - name: FeatureEnvironmentV2_model
    x-displayName: Feature Environment V2
    description: <SchemaDefinition schemaRef="#/components/schemas/FeatureEnvironmentV2" />
  - name: FeatureExperimentRefRule_model
    x-displayName: Feature Experiment Ref Rule
    description: >-
      <SchemaDefinition
      schemaRef="#/components/schemas/FeatureExperimentRefRule" />
  - name: FeatureExperimentRule_model
    x-displayName: Feature Experiment Rule
    description: >-
      <SchemaDefinition schemaRef="#/components/schemas/FeatureExperimentRule"
      />
  - name: FeatureForceRule_model
    x-displayName: Feature Force Rule
    description: <SchemaDefinition schemaRef="#/components/schemas/FeatureForceRule" />
  - name: FeatureRevisionRef_model
    x-displayName: Feature Revision Ref
    description: <SchemaDefinition schemaRef="#/components/schemas/FeatureRevisionRef" />
  - name: FeatureRevisionSummary_model
    x-displayName: Feature Revision Summary
    description: >-
      <SchemaDefinition schemaRef="#/components/schemas/FeatureRevisionSummary"
      />
  - name: FeatureRevisionV1_model
    x-displayName: Feature Revision V1
    description: <SchemaDefinition schemaRef="#/components/schemas/FeatureRevisionV1" />
  - name: FeatureRevisionV2_model
    x-displayName: Feature Revision V2
    description: <SchemaDefinition schemaRef="#/components/schemas/FeatureRevisionV2" />
  - name: FeatureRolloutRule_model
    x-displayName: Feature Rollout Rule
    description: <SchemaDefinition schemaRef="#/components/schemas/FeatureRolloutRule" />
  - name: FeatureRuleV1_model
    x-displayName: Feature Rule V1
    description: <SchemaDefinition schemaRef="#/components/schemas/FeatureRuleV1" />
  - name: FeatureRuleV2_model
    x-displayName: Feature Rule V2
    description: <SchemaDefinition schemaRef="#/components/schemas/FeatureRuleV2" />
  - name: FeatureSafeRolloutRule_model
    x-displayName: Feature Safe Rollout Rule
    description: >-
      <SchemaDefinition schemaRef="#/components/schemas/FeatureSafeRolloutRule"
      />
  - name: FeatureV1_model
    x-displayName: Feature V1
    description: <SchemaDefinition schemaRef="#/components/schemas/FeatureV1" />
  - name: FeatureV2_model
    x-displayName: Feature V2
    description: <SchemaDefinition schemaRef="#/components/schemas/FeatureV2" />
  - name: FeatureWithRevisionsV1_model
    x-displayName: Feature With Revisions V1
    description: >-
      <SchemaDefinition schemaRef="#/components/schemas/FeatureWithRevisionsV1"
      />
  - name: FeatureWithRevisionsV2_model
    x-displayName: Feature With Revisions V2
    description: >-
      <SchemaDefinition schemaRef="#/components/schemas/FeatureWithRevisionsV2"
      />
  - name: Holdout_model
    x-displayName: Holdout
    description: <SchemaDefinition schemaRef="#/components/schemas/Holdout" />
  - name: InformationSchema_model
    x-displayName: Information Schema
    description: <SchemaDefinition schemaRef="#/components/schemas/InformationSchema" />
  - name: InformationSchemaTable_model
    x-displayName: Information Schema Table
    description: >-
      <SchemaDefinition schemaRef="#/components/schemas/InformationSchemaTable"
      />
  - name: Learning_model
    x-displayName: Learning
    description: <SchemaDefinition schemaRef="#/components/schemas/Learning" />
  - name: LookbackOverride_model
    x-displayName: Lookback Override
    description: <SchemaDefinition schemaRef="#/components/schemas/LookbackOverride" />
  - name: Member_model
    x-displayName: Member
    description: <SchemaDefinition schemaRef="#/components/schemas/Member" />
  - name: Metric_model
    x-displayName: Metric
    description: <SchemaDefinition schemaRef="#/components/schemas/Metric" />
  - name: MetricAnalysis_model
    x-displayName: Metric Analysis
    description: <SchemaDefinition schemaRef="#/components/schemas/MetricAnalysis" />
  - name: MetricGroup_model
    x-displayName: Metric Group
    description: <SchemaDefinition schemaRef="#/components/schemas/MetricGroup" />
  - name: MetricUsage_model
    x-displayName: Metric Usage
    description: <SchemaDefinition schemaRef="#/components/schemas/MetricUsage" />
  - name: Namespace_model
    x-displayName: Namespace
    description: <SchemaDefinition schemaRef="#/components/schemas/Namespace" />
  - name: NamespaceExperimentMember_model
    x-displayName: Namespace Experiment Member
    description: >-
      <SchemaDefinition
      schemaRef="#/components/schemas/NamespaceExperimentMember" />
  - name: Organization_model
    x-displayName: Organization
    description: <SchemaDefinition schemaRef="#/components/schemas/Organization" />
  - name: PaginationFields_model
    x-displayName: Pagination Fields
    description: <SchemaDefinition schemaRef="#/components/schemas/PaginationFields" />
  - name: Project_model
    x-displayName: Project
    description: <SchemaDefinition schemaRef="#/components/schemas/Project" />
  - name: Query_model
    x-displayName: Query
    description: <SchemaDefinition schemaRef="#/components/schemas/Query" />
  - name: RampSchedule_model
    x-displayName: Ramp Schedule
    description: <SchemaDefinition schemaRef="#/components/schemas/RampSchedule" />
  - name: RampScheduleTemplate_model
    x-displayName: Ramp Schedule Template
    description: <SchemaDefinition schemaRef="#/components/schemas/RampScheduleTemplate" />
  - name: Report_model
    x-displayName: Report
    description: <SchemaDefinition schemaRef="#/components/schemas/Report" />
  - name: RequireReviewRule_model
    x-displayName: Require Review Rule
    description: <SchemaDefinition schemaRef="#/components/schemas/RequireReviewRule" />
  - name: RequireReviewRuleInput_model
    x-displayName: Require Review Rule Input
    description: >-
      <SchemaDefinition schemaRef="#/components/schemas/RequireReviewRuleInput"
      />
  - name: RevisionIdRef_model
    x-displayName: Revision Id Ref
    description: <SchemaDefinition schemaRef="#/components/schemas/RevisionIdRef" />
  - name: Safe Rollout Rule_model
    x-displayName: Safe Rollout Rule
    description: <SchemaDefinition schemaRef="#/components/schemas/Safe Rollout Rule" />
  - name: SavedGroup_model
    x-displayName: Saved Group
    description: <SchemaDefinition schemaRef="#/components/schemas/SavedGroup" />
  - name: SavedGroupApprovalRule_model
    x-displayName: Saved Group Approval Rule
    description: >-
      <SchemaDefinition schemaRef="#/components/schemas/SavedGroupApprovalRule"
      />
  - name: SavedGroupReferenceResource_model
    x-displayName: Saved Group Reference Resource
    description: >-
      <SchemaDefinition
      schemaRef="#/components/schemas/SavedGroupReferenceResource" />
  - name: SavedGroupReferences_model
    x-displayName: Saved Group References
    description: <SchemaDefinition schemaRef="#/components/schemas/SavedGroupReferences" />
  - name: SavedGroupRevision_model
    x-displayName: Saved Group Revision
    description: <SchemaDefinition schemaRef="#/components/schemas/SavedGroupRevision" />
  - name: SavedGroupRevisionActivityLogEntry_model
    x-displayName: Saved Group Revision Activity Log Entry
    description: >-
      <SchemaDefinition
      schemaRef="#/components/schemas/SavedGroupRevisionActivityLogEntry" />
  - name: SavedGroupRevisionRef_model
    x-displayName: Saved Group Revision Ref
    description: >-
      <SchemaDefinition schemaRef="#/components/schemas/SavedGroupRevisionRef"
      />
  - name: SavedGroupRevisionReview_model
    x-displayName: Saved Group Revision Review
    description: >-
      <SchemaDefinition
      schemaRef="#/components/schemas/SavedGroupRevisionReview" />
  - name: ScheduleRule_model
    x-displayName: Schedule Rule
    description: <SchemaDefinition schemaRef="#/components/schemas/ScheduleRule" />
  - name: ScheduledStopPlan_model
    x-displayName: Scheduled Stop Plan
    description: <SchemaDefinition schemaRef="#/components/schemas/ScheduledStopPlan" />
  - name: SdkConnection_model
    x-displayName: Sdk Connection
    description: <SchemaDefinition schemaRef="#/components/schemas/SdkConnection" />
  - name: Segment_model
    x-displayName: Segment
    description: <SchemaDefinition schemaRef="#/components/schemas/Segment" />
  - name: Settings_model
    x-displayName: Settings
    description: <SchemaDefinition schemaRef="#/components/schemas/Settings" />
  - name: Targeting Rule_model
    x-displayName: Targeting Rule
    description: <SchemaDefinition schemaRef="#/components/schemas/Targeting Rule" />
  - name: TargetingReviewRule_model
    x-displayName: Targeting Review Rule
    description: <SchemaDefinition schemaRef="#/components/schemas/TargetingReviewRule" />
  - name: Team_model
    x-displayName: Team
    description: <SchemaDefinition schemaRef="#/components/schemas/Team" />
  - name: VisualChange_model
    x-displayName: Visual Change
    description: <SchemaDefinition schemaRef="#/components/schemas/VisualChange" />
  - name: VisualChangeset_model
    x-displayName: Visual Changeset
    description: <SchemaDefinition schemaRef="#/components/schemas/VisualChangeset" />
paths:
  /v1/fact-metrics:
    post:
      tags:
        - fact-metrics
      summary: Create a single fact metric
      operationId: postFactMetric
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                description:
                  type: string
                  maxLength: 10000
                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
                    - funnel
                numerator:
                  anyOf:
                    - 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:
                                  - '='
                                  - '!='
                                  - '>'
                                  - <
                                  - '>='
                                  - <=
                                  - between
                                  - not_between
                                  - in
                                  - not_in
                                  - is_null
                                  - not_null
                                  - is_true
                                  - is_false
                                  - contains
                                  - not_contains
                                  - matches_pattern
                                  - not_matches_pattern
                                  - starts_with
                                  - ends_with
                                  - sql_expr
                                  - saved_filter
                              values:
                                description: >-
                                  Not required for is_null, not_null, is_true,
                                  is_false operators. The between and
                                  not_between operators take at most two values,
                                  a lower and an upper bound in that order;
                                  leave a bound as an empty string for an
                                  open-ended range.
                                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
                    - type: 'null'
                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:
                              - '='
                              - '!='
                              - '>'
                              - <
                              - '>='
                              - <=
                              - between
                              - not_between
                              - in
                              - not_in
                              - is_null
                              - not_null
                              - is_true
                              - is_false
                              - contains
                              - not_contains
                              - matches_pattern
                              - not_matches_pattern
                              - starts_with
                              - ends_with
                              - sql_expr
                              - saved_filter
                          values:
                            description: >-
                              Not required for is_null, not_null, is_true,
                              is_false operators. The between and not_between
                              operators take at most two values, a lower and an
                              upper bound in that order; leave a bound as an
                              empty string for an open-ended range.
                            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
                        '<numerator.column>_n_events'. Only valid for
                        event-quantile metrics with a 'kll merge' numerator.
                      type: string
                  required:
                    - type
                    - ignoreZeros
                    - quantile
                  additionalProperties: false
                funnelSettings:
                  description: >-
                    Funnel metric settings (required when metricType is
                    "funnel")
                  type: object
                  properties:
                    steps:
                      description: Ordered list of funnel steps. Minimum 2 steps required.
                      minItems: 2
                      maxItems: 20
                      type: array
                      items:
                        type: object
                        properties:
                          name:
                            description: Display name for the funnel step
                            type: string
                          factTableId:
                            description: The fact table this step draws events from
                            type: string
                          rowFilters:
                            description: >-
                              Filters that decide whether an event row counts as
                              this step
                            type: array
                            items:
                              type: object
                              properties:
                                operator:
                                  type: string
                                  enum:
                                    - '='
                                    - '!='
                                    - '>'
                                    - <
                                    - '>='
                                    - <=
                                    - between
                                    - not_between
                                    - in
                                    - not_in
                                    - is_null
                                    - not_null
                                    - is_true
                                    - is_false
                                    - contains
                                    - not_contains
                                    - matches_pattern
                                    - not_matches_pattern
                                    - starts_with
                                    - ends_with
                                    - sql_expr
                                    - saved_filter
                                values:
                                  description: >-
                                    Not required for is_null, not_null, is_true,
                                    is_false operators. The between and
                                    not_between operators take at most two
                                    values, a lower and an upper bound in that
                                    order; leave a bound as an empty string for
                                    an open-ended range.
                                  type: array
                                  items:
                                    type: string
                                column:
                                  description: >-
                                    Required for all operators except sql_expr
                                    and saved_filter.
                                  type: string
                              required:
                                - operator
                              additionalProperties: false
                          optional:
                            description: >-
                              When true, this step still counts for its own
                              conversion but does not anchor later steps. Later
                              steps window off the nearest prior required step
                              (or exposure, for experiment funnel metrics, when
                              every prior step is optional).
                            type: boolean
                          conversionWindow:
                            anyOf:
                              - description: >-
                                  Bounds how long after the nearest prior
                                  required step (or exposure, for the first step
                                  / after only-optional priors of an experiment
                                  funnel metric) this step's event can occur.
                                type: object
                                properties:
                                  unit:
                                    type: string
                                    enum:
                                      - weeks
                                      - days
                                      - hours
                                      - minutes
                                  value:
                                    type: number
                                    exclusiveMinimum: 0
                                required:
                                  - unit
                                  - value
                                additionalProperties: false
                              - type: 'null'
                        required:
                          - name
                          - factTableId
                          - rowFilters
                          - optional
                        additionalProperties: false
                    ordering:
                      description: >-
                        Step ordering mode. Only 'sequential' is supported in
                        v1.
                      type: string
                      enum:
                        - sequential
                    concurrencyWindowSeconds:
                      description: >-
                        Out-of-order tolerance between adjacent steps in
                        seconds. Defaults to 0.
                      type: integer
                      minimum: 0
                  required:
                    - steps
                  additionalProperties: false
                cappingSettings:
                  description: >-
                    Upper cap. Omit on update to preserve it. Use type: none to
                    disable it explicitly. Invalid values are rejected.
                  type: object
                  properties:
                    type:
                      type: string
                      enum:
                        - none
                        - absolute
                        - percentile
                    value:
                      description: >-
                        When type is absolute, this must be a finite number
                        greater than zero. When type is percentile, this must be
                        strictly between 0 and 1. Required when enabling capping
                        or changing type; omitted values are preserved only for
                        same-type updates.
                      type: number
                    ignoreZeros:
                      description: >-
                        If true and capping is `percentile`, zeros will be
                        ignored when calculating the percentile.
                      type: boolean
                  required:
                    - type
                  additionalProperties: false
                lowerCappingSettings:
                  description: >-
                    Independent lower cap. Omit on update to preserve it. Use
                    null or type: none to disable it explicitly. Invalid values
                    are rejected. For mixed cap types, the absolute bound takes
                    precedence if thresholds cross.
                  anyOf:
                    - description: >-
                        Independent lower-tail capping settings. Configured
                        separately from the upper tail, so the type can differ.
                      type: object
                      properties:
                        type:
                          type: string
                          enum:
                            - none
                            - absolute
                            - percentile
                        value:
                          description: >-
                            When type is absolute, this is a finite lower bound,
                            including zero or negative values. When type is
                            percentile, this must be strictly between 0 and 1.
                            Required when enabling capping or changing type;
                            omitted values are preserved only for same-type
                            updates.
                          type: number
                        ignoreZeros:
                          description: >-
                            If true and capping is `percentile`, zeros will be
                            ignored when calculating the percentile.
                          type: boolean
                      required:
                        - type
                      additionalProperties: false
                    - type: 'null'
                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%). <br/>
                    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%). <br/>
                    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
                replaces:
                  description: >-
                    Ids of older metrics (legacy or fact) that this metric
                    supersedes, for example the legacy metric it was migrated
                    from. Cannot include this metric's own id. Informational
                    only - GrowthBook uses it to link the old and new
                    definitions in the UI and to keep showing results from a
                    snapshot that was created before an experiment switched to
                    this metric. This field can only be set through the API.
                  type: array
                  items:
                    type: string
              required:
                - name
                - metricType
              additionalProperties: false
      responses:
        '200':
          description: Resource created
          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}}'
components:
  schemas:
    FactMetric:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type: string
          maxLength: 10000
        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
            - funnel
        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:
                      - '='
                      - '!='
                      - '>'
                      - <
                      - '>='
                      - <=
                      - between
                      - not_between
                      - in
                      - not_in
                      - is_null
                      - not_null
                      - is_true
                      - is_false
                      - contains
                      - not_contains
                      - matches_pattern
                      - not_matches_pattern
                      - starts_with
                      - ends_with
                      - sql_expr
                      - saved_filter
                  values:
                    description: >-
                      Not required for is_null, not_null, is_true, is_false
                      operators. The between and not_between operators take at
                      most two values, a lower and an upper bound in that order;
                      leave a bound as an empty string for an open-ended range.
                    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:
                      - '='
                      - '!='
                      - '>'
                      - <
                      - '>='
                      - <=
                      - between
                      - not_between
                      - in
                      - not_in
                      - is_null
                      - not_null
                      - is_true
                      - is_false
                      - contains
                      - not_contains
                      - matches_pattern
                      - not_matches_pattern
                      - starts_with
                      - ends_with
                      - sql_expr
                      - saved_filter
                  values:
                    description: >-
                      Not required for is_null, not_null, is_true, is_false
                      operators. The between and not_between operators take at
                      most two values, a lower and an upper bound in that order;
                      leave a bound as an empty string for an open-ended range.
                    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 '<numerator.column>_n_events'. Only valid for
                event-quantile metrics with a 'kll merge' numerator.
              type: string
          required:
            - type
            - ignoreZeros
            - quantile
          additionalProperties: false
        funnelSettings:
          description: Funnel metric settings (required when metricType is "funnel")
          type: object
          properties:
            steps:
              description: Ordered list of funnel steps. Minimum 2 steps required.
              minItems: 2
              maxItems: 20
              type: array
              items:
                type: object
                properties:
                  name:
                    description: Display name for the funnel step
                    type: string
                  factTableId:
                    description: The fact table this step draws events from
                    type: string
                  rowFilters:
                    description: >-
                      Filters that decide whether an event row counts as this
                      step
                    type: array
                    items:
                      type: object
                      properties:
                        operator:
                          type: string
                          enum:
                            - '='
                            - '!='
                            - '>'
                            - <
                            - '>='
                            - <=
                            - between
                            - not_between
                            - in
                            - not_in
                            - is_null
                            - not_null
                            - is_true
                            - is_false
                            - contains
                            - not_contains
                            - matches_pattern
                            - not_matches_pattern
                            - starts_with
                            - ends_with
                            - sql_expr
                            - saved_filter
                        values:
                          description: >-
                            Not required for is_null, not_null, is_true,
                            is_false operators. The between and not_between
                            operators take at most two values, a lower and an
                            upper bound in that order; leave a bound as an empty
                            string for an open-ended range.
                          type: array
                          items:
                            type: string
                        column:
                          description: >-
                            Required for all operators except sql_expr and
                            saved_filter.
                          type: string
                      required:
                        - operator
                      additionalProperties: false
                  optional:
                    description: >-
                      When true, this step still counts for its own conversion
                      but does not anchor later steps. Later steps window off
                      the nearest prior required step (or exposure, for
                      experiment funnel metrics, when every prior step is
                      optional).
                    type: boolean
                  conversionWindow:
                    anyOf:
                      - description: >-
                          Bounds how long after the nearest prior required step
                          (or exposure, for the first step / after only-optional
                          priors of an experiment funnel metric) this step's
                          event can occur.
                        type: object
                        properties:
                          unit:
                            type: string
                            enum:
                              - weeks
                              - days
                              - hours
                              - minutes
                          value:
                            type: number
                            exclusiveMinimum: 0
                        required:
                          - unit
                          - value
                        additionalProperties: false
                      - type: 'null'
                required:
                  - name
                  - factTableId
                  - rowFilters
                  - optional
                additionalProperties: false
            ordering:
              description: Step ordering mode. Only 'sequential' is supported in v1.
              type: string
              enum:
                - sequential
                - strict
                - unordered
            concurrencyWindowSeconds:
              description: >-
                Out-of-order tolerance between adjacent steps in seconds.
                Defaults to 0.
              type: integer
              minimum: 0
          required:
            - steps
          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
        lowerCappingSettings:
          anyOf:
            - description: >-
                Independent lower-tail capping settings. Configured separately
                from the upper tail, so the type can differ.
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - none
                    - absolute
                    - percentile
                value:
                  description: >-
                    When type is absolute, this is the lower bound. When type is
                    percentile, this is the lower percentile (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
            - type: 'null'
        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 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:
          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
        replaces:
          description: >-
            Ids of older metrics (legacy or fact) that this metric supersedes,
            for example the legacy metric it was migrated from. Informational
            only - GrowthBook uses it to link the old and new definitions in the
            UI and to keep showing results from a snapshot that was created
            before an experiment switched to this metric.
          type: array
          items:
            type: string
      required:
        - id
        - name
        - description
        - owner
        - projects
        - tags
        - datasource
        - metricType
        - inverse
        - cappingSettings
        - windowSettings
        - priorSettings
        - regressionAdjustmentSettings
        - riskThresholdSuccess
        - riskThresholdDanger
        - minPercentChange
        - maxPercentChange
        - minSampleSize
        - targetMDE
        - managedBy
        - dateCreated
        - dateUpdated
      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

        ```

````