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

# Bulk import fact tables, filters, and metrics

> Creates or updates Fact Tables, Fact Table filters, and Fact Metrics. Resources upsert by `id`. Pass `dryRun: true` to validate with zero writes. Not transactional: a live mid-loop failure returns HTTP 400 (403 for a permission failure) with write counts and `errors`.



## OpenAPI

````yaml openapi.yaml POST /v1/bulk-import/facts
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/bulk-import/facts:
    post:
      tags:
        - fact-tables
      summary: Bulk import fact tables, filters, and metrics
      description: >-
        Creates or updates Fact Tables, Fact Table filters, and Fact Metrics.
        Resources upsert by `id`. Pass `dryRun: true` to validate with zero
        writes. Not transactional: a live mid-loop failure returns HTTP 400 (403
        for a permission failure) with write counts and `errors`.
      operationId: postBulkImportFacts
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                defaultManagedBy:
                  description: >-
                    Fallback `managedBy` for Fact Tables and Fact Metrics that
                    omit the field. Defaults to `"api"`. Filters inherit `"api"`
                    only when the parent Fact Table is api-managed.
                  type: string
                  enum:
                    - ''
                    - api
                    - admin
                dryRun:
                  description: Validate with zero writes.
                  type: boolean
                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
                            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:
                            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
                          userIdColumns:
                            description: >-
                              Maps an identifier type to the column holding it,
                              for SQL that does not alias its columns to the
                              identifier type names, e.g. `{"user_id":
                              "userId"}`. May also be a single-level field path
                              into a JSON column (`properties.userId`). Unmapped
                              types use the identifier type name as the column
                              name.
                            type: object
                            propertyNames:
                              type: string
                            additionalProperties:
                              type: string
                          aggregatedFactTableSettings:
                            description: >-
                              Settings for maintaining shared daily aggregated
                              tables (a subset of userIdTypes plus the daily
                              update time and restate lookback window) used to
                              speed up CUPED. Requires the data pipeline
                              (pipeline-mode) feature.
                            type: object
                            properties:
                              idTypes:
                                type: array
                                items:
                                  type: string
                              updateTime:
                                type: object
                                properties:
                                  time:
                                    type: string
                                  timezone:
                                    type: string
                                required:
                                  - time
                                  - timezone
                                additionalProperties: false
                              lookbackWindow:
                                type: integer
                                exclusiveMinimum: 0
                              restateChunkDays:
                                type: integer
                                minimum: 1
                                maximum: 7
                            required:
                              - idTypes
                              - updateTime
                              - lookbackWindow
                            additionalProperties: false
                          sql:
                            description: The SQL query for this fact table
                            type: string
                          timestampColumn:
                            description: >-
                              The column holding the event timestamp. Must be a
                              date column on this fact table. Defaults to
                              "timestamp" when unset.
                            type: string
                          eventName:
                            description: The event name used in SQL template variables
                            type: string
                          columns:
                            description: >-
                              Optional array of column definitions for this fact
                              table. On create, columns are stored as-is. On
                              update, columns upsert by `column`: existing
                              columns are patched, new columns are created, and
                              columns not included are left unchanged. Omit
                              `datatype` to leave an existing column's type
                              untouched; send "" to reset it for auto-detection;
                              new columns are auto-detected when `datatype` is
                              omitted or "". Datatype-dependent properties (e.g.
                              `alwaysInlineFilter`) are validated once the
                              datatype is known. Slice-related properties
                              require an enterprise license.
                            type: array
                            items:
                              $ref: '#/components/schemas/FactTableColumnInput'
                          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
                            maxLength: 10000
                          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
                            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
                          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
                        required:
                          - name
                          - metricType
                        additionalProperties: false
                    required:
                      - id
                      - data
                    additionalProperties: false
              additionalProperties: false
      responses:
        '200':
          description: Resource created
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  dryRun:
                    type: boolean
                  factTablesAdded:
                    type: integer
                  factTablesUpdated:
                    type: integer
                  factTableFiltersAdded:
                    type: integer
                  factTableFiltersUpdated:
                    type: integer
                  factMetricsAdded:
                    type: integer
                  factMetricsUpdated:
                    type: integer
                  errors:
                    type: array
                    items:
                      $ref: '#/components/schemas/BulkImportError'
                required:
                  - success
                  - dryRun
                  - factTablesAdded
                  - factTablesUpdated
                  - factTableFiltersAdded
                  - factTableFiltersUpdated
                  - factMetricsAdded
                  - factMetricsUpdated
                  - errors
                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":[]}'
components:
  schemas:
    FactTableColumnInput:
      type: object
      properties:
        column:
          description: The actual column name in the database/SQL query
          type: string
        datatype:
          description: >-
            The column's data type. Omit (or send "") to have it auto-detected
            from the SQL.
          type: string
          enum:
            - number
            - string
            - date
            - boolean
            - json
            - binary
            - other
            - ''
        numberFormat:
          type: string
          enum:
            - ''
            - currency
            - time:seconds
            - time:milliseconds
            - 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
          maxLength: 10000
        alwaysInlineFilter:
          default: false
          description: >-
            Whether this column should always be included as an inline filter in
            queries
          type: boolean
        conditionalInlineFilters:
          description: >-
            Value -> additional column to prompt for when a metric filters this
            column to that value, e.g. {"Page View": "path", "Modal Open":
            "properties.modalType"}. Requires alwaysInlineFilter.
          type: object
          propertyNames:
            type: string
          additionalProperties:
            type: string
        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
        isVirtual:
          default: false
          description: >-
            Whether this is a virtual (computed) column defined by a SQL
            expression rather than detected from the fact table SQL. Can be set
            when creating a column, but a column's origin cannot be changed
            afterwards — sending a value that contradicts an existing column is
            rejected.
          type: boolean
        sql:
          description: >-
            For virtual columns, the SQL expression that computes the column
            value. Only valid on a virtual column; when omitted from an update,
            the existing expression is preserved.
          type: string
      required:
        - column
      additionalProperties: false
    BulkImportError:
      type: object
      properties:
        resourceType:
          type: string
          enum:
            - factTable
            - factTableFilter
            - factMetric
        id:
          type: string
        message:
          type: string
      required:
        - resourceType
        - id
        - message
      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

        ```

````