GrowthBook Data Sources API
How GrowthBook connects and queries your data, including cached database schema metadata (information schemas) for tables and columns.
How GrowthBook connects and queries your data, including cached database schema metadata (information schemas) for tables and columns.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/growthbook:growthbook-data-sources-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
version: 5.1.0
title: GrowthBook REST Data Sources 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. Feature-flag and metric v1 routes are deprecated: they are tagged **LEGACY** in the sidebar and collapsed by default. Use the matching v2 group when both exist. ## 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, or less if the token''s permissions are limited. These can be created by going to `Personal Access Tokens` under your user menu. Members with the API Keys **Manage members'' tokens** permission can disable a member''s token under `Settings -> Manage PATs`, and admins can require new tokens to expire within a maximum lifetime. - **Secret Keys**: These are sensitive and provide the level of access of the role they are given, which can be any built-in or custom role, with optional per-project role overrides and environment limits. Managing Secret Keys on behalf of an organization takes the API Keys permissions. These can be created by going to `Settings -> API Keys`, where Admins can also require new Secret Keys to expire within a maximum lifetime. 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"
```
If a key has an expiration date, every response includes it in the `X-GrowthBook-Key-Expires-At` header (ISO 8601), so scripts can warn before the key stops working. Requests made with an expired key fail with a `401` that says where to create a replacement. See Expiration for choosing a key''s expiration, the warnings before it lapses, and the organization policies. ## Naming who asked
Requests made with a Secret Key may add an `X-GrowthBook-Requested-By` header naming the organization member who asked for the change, as a user id or an email address. History, revision logs and webhooks show that member next to the key. Each key''s settings under `Settings -> API Keys`:
- **Header**: **Optional** (the default) uses the header when it''s sent, **Required** rejects requests without it, and **Rejected** rejects requests that send it, each with a 400. - **Permissions**, when a member is named:
- **Assume member''s role** (the default): the request acts as that member, with only what both the key and the member can do, so the header can narrow a key but never widen it. Drafts, owners, `mine` filters and reviews are the member''s. The member''s rights over their own drafts, comments and verdicts apply only where the key''s own role allows the same action. - **Use key''s role**: the key acts as itself, with its own permissions, and the name is only recorded in history. Drafts, verdicts and ownership are the key''s, as when no member is named.'
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: 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.
paths:
/v1/data-sources:
get:
operationId: listDataSources
summary: Get all data sources
tags:
- Data Sources
parameters:
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/projectId'
responses:
'200':
description: Successful response
content:
application/json:
schema:
allOf:
- type: object
properties:
dataSources:
type: array
items:
$ref: '#/components/schemas/DataSource'
required:
- dataSources
additionalProperties: false
- $ref: '#/components/schemas/PaginationFields'
x-codeSamples:
- lang: cURL
source: "curl -X GET 'https://api.growthbook.io/api/v1/data-sources' \\\n -H 'Authorization: Bearer YOUR_API_KEY'"
/v1/data-sources/{id}:
get:
operationId: getDataSource
summary: Get a single data source
tags:
- Data Sources
parameters:
- $ref: '#/components/parameters/id'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
dataSource:
$ref: '#/components/schemas/DataSource'
required:
- dataSource
additionalProperties: false
x-codeSamples:
- lang: cURL
source: "curl -X GET 'https://api.growthbook.io/api/v1/data-sources/{id}' \\\n -H 'Authorization: Bearer YOUR_API_KEY'"
/v1/data-sources/{dataSourceId}/information-schema:
get:
operationId: getInformationSchema
summary: Get a Data Source's Information Schema
description: Returns cached database schema metadata for a data source, including databases, schemas, and tables. The information schema is automatically created when a SQL-based data source is added. Not all data source types support information schemas.
tags:
- Data Sources
parameters:
- $ref: '#/components/parameters/dataSourceId'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
informationSchema:
$ref: '#/components/schemas/InformationSchema'
required:
- informationSchema
additionalProperties: false
x-codeSamples:
- lang: cURL
source: "curl -X GET 'https://api.growthbook.io/api/v1/data-sources/{dataSourceId}/information-schema' \\\n -H 'Authorization: Bearer YOUR_API_KEY'"
/v1/data-sources/{id}/sql/search-tables:
post:
operationId: searchWarehouseTables
summary: Search warehouse tables
tags:
- Data Sources
parameters:
- name: id
in: path
required: true
description: The id of the data source
schema:
description: The id of the data source
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
query:
description: Case-insensitive substring match on table name. Empty returns all.
type: string
limit:
description: Max results to return. Defaults to 20.
type: integer
minimum: 1
maximum: 50
additionalProperties: false
responses:
'200':
description: Resource created
content:
application/json:
schema:
type: object
properties:
tables:
type: array
items:
$ref: '#/components/schemas/tables'
total:
type: number
schemas:
type: array
items:
type: string
datasourceType:
type: string
required:
- tables
- total
- schemas
- datasourceType
additionalProperties: false
x-codeSamples:
- lang: cURL
source: "curl -X POST 'https://api.growthbook.io/api/v1/data-sources/{id}/sql/search-tables' \\\n -H 'Authorization: Bearer YOUR_API_KEY'"
/v1/data-sources/{id}/sql/table-schema:
post:
operationId: getWarehouseTableSchema
summary: Get warehouse table schemas
tags:
- Data Sources
parameters:
- name: id
in: path
required: true
description: The id of the data source
schema:
description: The id of the data source
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
tables:
minItems: 1
maxItems: 5
type: array
items:
type: object
properties:
databaseName:
type: string
tableSchema:
type: string
tableName:
type: string
required:
- databaseName
- tableSchema
- tableName
additionalProperties: false
required:
- tables
additionalProperties: false
responses:
'200':
description: Resource created
content:
application/json:
schema:
type: object
properties:
tables:
type: array
items:
type: object
properties:
database:
type: string
schema:
type: string
table:
type: string
columns:
type: array
items:
type: object
properties:
name:
type: string
type:
type: string
description:
type: string
required:
- name
- type
additionalProperties: false
required:
- database
- schema
- table
- columns
additionalProperties: false
required:
- tables
additionalProperties: false
x-codeSamples:
- lang: cURL
source: "curl -X POST 'https://api.growthbook.io/api/v1/data-sources/{id}/sql/table-schema' \\\n -H 'Authorization: Bearer YOUR_API_KEY'"
/v1/data-sources/{id}/sql/preview-values:
post:
operationId: previewWarehouseColumnValues
summary: Preview distinct column values
tags:
- Data Sources
parameters:
- name: id
in: path
required: true
description: The id of the data source
schema:
description: The id of the data source
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
databaseName:
description: Database or project name.
type: string
tableSchema:
description: Schema or dataset name.
type: string
tableName:
description: Table name (unqualified).
type: string
columns:
minItems: 1
maxItems: 3
type: array
items:
type: string
limit:
description: Max rows to return. Defaults to 20.
type: integer
minimum: 1
maximum: 20
required:
- databaseName
- tableSchema
- tableName
- columns
additionalProperties: false
responses:
'200':
description: Resource created
content:
application/json:
schema:
anyOf:
- type: object
properties:
status:
type: string
const: success
table:
type: string
columns:
type: array
items:
type: string
rows:
type: array
items:
type: object
propertyNames:
type: string
additionalProperties: {}
rowCount:
type: number
warning:
type: string
required:
- status
- table
- columns
- rows
- rowCount
additionalProperties: false
- type: object
properties:
status:
type: string
const: error
message:
type: string
required:
- status
- message
additionalProperties: false
x-codeSamples:
- lang: cURL
source: "curl -X POST 'https://api.growthbook.io/api/v1/data-sources/{id}/sql/preview-values' \\\n -H 'Authorization: Bearer YOUR_API_KEY'"
/v1/data-sources/{id}/sql/run-query:
post:
operationId: runSqlQuery
summary: Execute a read-only SQL query
tags:
- Data Sources
parameters:
- name: id
in: path
required: true
description: The id of the data source
schema:
description: The id of the data source
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
sql:
description: A read-only SELECT or WITH query.
type: string
purpose:
description: One-line description of what this query answers.
type: string
confirm:
description: Set to true to execute a query that previously returned confirmation_required.
type: boolean
tableMetadata:
description: Table metadata from earlier discovery steps. When provided, the response includes an explorationUrl for viewing results in the product analytics explorer.
type: object
properties:
table:
description: Table name, e.g. 'events'
type: string
path:
description: Fully qualified path, e.g. 'db.schema.events'
type: string
timestampColumn:
description: A date/timestamp column name
type: string
columnTypes:
description: Map of column names to types
type: object
propertyNames:
type: string
additionalProperties:
type: string
enum:
- string
- number
- date
- boolean
- other
required:
- table
- path
- timestampColumn
- columnTypes
additionalProperties: false
required:
- sql
- purpose
additionalProperties: false
responses:
'200':
description: Resource created
content:
application/json:
schema:
anyOf:
- type: object
properties:
status:
type: string
const: success
summary:
type: string
rowCount:
type: number
columns:
type: array
items:
type: object
properties:
name:
type: string
dataType:
type: string
required:
- name
additionalProperties: false
resultCsv:
type: string
truncated:
type: boolean
durationMs:
type: number
sql:
type: string
explorationUrl:
type: string
explorationId:
type: string
notice:
type: string
required:
- status
- summary
- rowCount
- columns
- resultCsv
- truncated
- durationMs
- sql
additionalProperties: false
- type: object
properties:
status:
type: string
const: confirmation_required
estimatedBytesProcessed:
type: number
estimatedCostUsd:
type: number
sql:
type: string
message:
type: string
required:
- status
- estimatedBytesProcessed
- sql
- message
additionalProperties: false
- type: object
properties:
status:
type: string
const: error
message:
type: string
required:
- status
- message
additionalProperties: false
x-codeSamples:
- lang: cURL
source: "curl -X POST 'https://api.growthbook.io/api/v1/data-sources/{id}/sql/run-query' \\\n -H 'Authorization: Bearer YOUR_API_KEY'"
/v1/information-schema-tables/{tableId}:
get:
operationId: getInformationSchemaTable
summary: Get a single Information Schema Table by id
description: Returns cached metadata for a specific table in the Data Source, including columns and their data types. Not all data source types support information schemas.
tags:
- Data Sources
parameters:
- $ref: '#/components/parameters/tableId'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
informationSchemaTable:
$ref: '#/components/schemas/InformationSchemaTable'
required:
- informationSchemaTable
additionalProperties: false
x-codeSamples:
- lang: cURL
source: "curl -X GET 'https://api.growthbook.io/api/v1/information-schema-tables/{tableId}' \\\n -H 'Authorization: Bearer YOUR_API_KEY'"
components:
schemas:
InformationSchema:
type: object
properties:
id:
type: string
datasourceId:
type: string
status:
type: string
enum:
- PENDING
- COMPLETE
error:
type: object
properties:
errorType:
type: string
enum:
- generic
- not_supported
- missing_params
message:
type: string
required:
- errorType
- message
additionalProperties: false
databases:
type: array
items:
type: object
properties:
databaseName:
type: string
path:
type: string
dateCreated:
format: date-time
type: string
dateUpdated:
format: date-time
type: string
schemas:
type: array
items:
type: object
properties:
schemaName:
type: string
path:
type: string
dateCreated:
format: date-time
type: string
dateUpdated:
format: date-time
type: string
tables:
type: array
items:
type: object
properties:
tableName:
type: string
path:
type: string
id:
type: string
numOfColumns:
type: number
dateCreated:
format: date-time
type: string
dateUpdated:
format: date-time
type: string
required:
- tableName
- id
- numOfColumns
- dateCreated
- dateUpdated
additionalProperties: false
required:
- schemaName
- dateCreated
- dateUpdated
- tables
additionalProperties: false
required:
- databaseName
- dateCreated
- dateUpdated
- schemas
additionalProperties: false
dateCreated:
format: date-time
type: string
dateUpdated:
format: date-time
type: string
required:
- id
- datasourceId
- status
- databases
- dateCreated
- dateUpdated
additionalProperties: false
PaginationFields:
type: object
properties:
limit:
type: integer
offset:
type: integer
count:
type: integer
total:
type: integer
hasMore:
type: boolean
nextOffset:
anyOf:
- type: integer
- type: 'null'
required:
- limit
- offset
- count
- total
- hasMore
- nextOffset
additionalProperties: false
DataSource:
type: object
properties:
id:
type: string
dateCreated:
format: date-time
type: string
dateUpdated:
format: date-time
type: string
type:
type: string
name:
type: string
description:
type: string
maxLength: 10000
projectIds:
type: array
items:
type: string
eventTracker:
type: string
identifierTypes:
type: array
items:
type: object
properties:
id:
type: string
description:
type: string
maxLength: 10000
required:
- id
- description
additionalProperties: false
assignmentQueries:
type: array
items:
type: object
properties:
id:
type: string
name:
type: string
description:
type: string
maxLength: 10000
identifierTypes:
type: array
items:
type: string
identifierType:
deprecated: true
type: string
sql:
type: string
includesNameColumns:
type: boolean
dimensionColumns:
type: array
items:
type: string
projects:
type: array
items:
type: string
required:
- id
- name
- description
- identifierTypes
- identifierType
- sql
- includesNameColumns
- dimensionColumns
- projects
additionalProperties: false
identifierJoinQueries:
type: array
items:
type: object
properties:
identifierTypes:
type: array
items:
type: string
sql:
type: string
required:
- identifierTypes
- sql
additionalProperties: false
mixpanelSettings:
type: object
properties:
viewedExperimentEventName:
type: string
experimentIdProperty:
type: string
variationIdProperty:
type: string
extraUserIdProperty:
type: string
required:
- viewedExperimentEventName
- experimentIdProperty
- variationIdProperty
- extraUserIdProperty
additionalProperties: false
required:
- id
- dateCreated
- dateUpdated
- type
- name
- description
- projectIds
- eventTracker
- identifierTypes
- assignmentQueries
- identifierJoinQueries
additionalProperties: false
tables:
type: object
properties:
database:
type: string
schema:
type: string
table:
type: string
columnCount:
type: number
required:
- database
- schema
- table
- columnCount
additionalProperties: false
InformationSchemaTable:
type: object
properties:
id:
type: string
datasourceId:
type: string
informationSchemaId:
type: string
tableName:
type: string
tableSchema:
type: string
databaseName:
type: string
columns:
type: array
items:
type: object
properties:
columnName:
type: string
dataType:
type: string
required:
- columnName
- dataType
additionalProperties: false
refreshMS:
type: number
dateCreated:
format: date-time
type: string
dateUpdated:
format: date-time
type: string
required:
- id
- datasourceId
- informationSchemaId
- tableName
- tableSchema
- databaseName
- columns
- refreshMS
- dateCreated
- dateUpdated
additionalProperties: false
parameters:
limit:
name: limit
in: query
description: The number of items to return
schema:
default: 10
description: The number of items to return
type: integer
minimum: 1
maximum: 100
projectId:
name: projectId
in: query
description: Filter by project id
schema:
description: Filter by project id
type: string
offset:
name: offset
in: query
description: How many items to skip (use in conjunction with limit for pagination)
schema:
default: 0
description: How many items to skip (use in conjunction with limit for pagination)
type: integer
minimum: 0
id:
name: id
in: path
required: true
description: The id of the requested resource
schema:
description: The id of the requested resource
type: string
dataSourceId:
name: dataSourceId
in: path
required: true
description: The id of the data source
schema:
description: The id of the data source
type: string
tableId:
name: tableId
in: path
required: true
description: The id of the information schema table
schema:
description: The id of the information schema table
type: string
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'If using Bearer auth, pass the Secret Key as the token:
```bash
curl https://api.growthbook.io/api/v1/features -H "Authorization: Bearer secret_abc123DEF456"
```
'
basicAuth:
type: http
scheme: basic
description: 'If using HTTP Basic auth, pass the Secret Key as the username and leave the password blank:
```bash
curl https://api.growthbook.io/api/v1/features -u secret_abc123DEF456:
# The ":" at the end stops curl from asking for a password
```
'
x-tagGroups:
- name: Endpoints
tags:
- projects
- environments
- features-v2
- feature-revisions-v2
- features
- feature-revisions
- ramp-schedules
- data-sources
- fact-tables
- fact-metrics
- metrics
- experiments
- namespaces
- snapshots
- dimensions
- segments
- reports
- sdk-connections
- visual-changesets
- saved-groups
- saved-group-revisions
- constants
- constant-revisions
- configs
- config-revisions
- releases
- custom-hooks
- organizations
- members
- code-references
- archetypes
- queries
- settings
- attributes
- usage
- meta
- ContextualBandits
- Dashboards
- ContextualBanditQueries
- CustomFields
- MetricGroups
- Teams
- ExperimentTemplates
- AnalyticsExplorations
- RampScheduleTemplates
- Learnings
- Holdouts
- AutoRuns
- Populations
- name: Models
tags:
- AggregatedFactTable_model
- AnalyticsExploration_model
# --- truncated at 32 KB (35 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/growthbook/refs/heads/main/openapi/growthbook-data-sources-api-openapi.yml