openapi: 3.1.0 info: version: 1.0.0 title: GrowthBook REST AnalyticsExplorations namespaces API description: "GrowthBook offers a full REST API for interacting with the application.\n\nRequest data can use either JSON or Form data encoding (with proper `Content-Type` headers). All response bodies are JSON-encoded.\n\nThe 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.\n\n## Versioning\n\nEndpoints are versioned by path prefix:\n\n- `/v1/...` — stable, widely-supported endpoints\n- `/v2/...` — updated endpoints with improved shapes (e.g. unified per-rule environment scope for feature flags)\n\nNew integrations should prefer v2 where available.\n\n## Authentication\n\nWe support both the HTTP Basic and Bearer authentication schemes for convenience.\n\nYou first need to generate a new API Key in GrowthBook. Different keys have different permissions:\n\n- **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.\n- **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`\n\nIf 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)\n\n```bash\ncurl https://api.growthbook.io/api/v1/features \\\n -u secret_abc123DEF456:\n```\n\nIf using Bearer auth, pass the Secret Key as the token:\n\n```bash\ncurl https://api.growthbook.io/api/v1/features \\\n-H \"Authorization: Bearer secret_abc123DEF456\"\n```\n\n## Errors\n\nThe API may return the following error status codes:\n\n- **400** - Bad Request - Often due to a missing required parameter\n- **401** - Unauthorized - No valid API key provided\n- **402** - Request Failed - The parameters are valid, but the request failed\n- **403** - Forbidden - Provided API key does not have the required access\n- **404** - Not Found - Unknown API route or requested resource\n- **429** - Too Many Requests - You exceeded the rate limit of 60 requests per minute. Try again later.\n- **5XX** - Server Error - Something went wrong on GrowthBook's end (these are rare)\n\nThe response body will be a JSON object with the following properties:\n\n- **message** - Information about the error\n" servers: - url: https://api.growthbook.io/api description: GrowthBook Cloud - url: https://{domain}/api description: Self-hosted GrowthBook security: - bearerAuth: [] - basicAuth: [] tags: - 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. paths: /v1/namespaces: get: operationId: listNamespaces summary: Get all namespaces tags: - namespaces parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': content: application/json: schema: allOf: - type: object properties: namespaces: type: array items: $ref: '#/components/schemas/Namespace' required: - namespaces additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: "curl -X GET 'https://api.growthbook.io/api/v1/namespaces' \\\n -H 'Authorization: Bearer YOUR_API_KEY'" post: operationId: postNamespace summary: Create a namespace tags: - namespaces requestBody: required: true content: application/json: schema: type: object properties: displayName: description: Human-readable display name. Must be unique within the organization. type: string description: type: string status: type: string enum: - active - inactive format: description: Namespace format. Defaults to 'multiRange', which supports multiple ranges per experiment and a configurable hash attribute. type: string enum: - legacy - multiRange hashAttribute: description: Required when format is 'multiRange'. The user attribute (e.g. 'id', 'device_id') used to assign users to namespace buckets. type: string required: - displayName additionalProperties: false responses: '200': content: application/json: schema: type: object properties: namespace: $ref: '#/components/schemas/Namespace' required: - namespace additionalProperties: false x-codeSamples: - lang: cURL source: "curl -X POST 'https://api.growthbook.io/api/v1/namespaces' \\\n -H 'Authorization: Bearer YOUR_API_KEY' \\\n -H 'Content-Type: application/json' \\\n -d '{\"displayName\":\"Checkout Flow\",\"description\":\"Experiments on the checkout funnel\",\"format\":\"multiRange\",\"hashAttribute\":\"id\"}'" /v1/namespaces/{id}: get: operationId: getNamespace summary: Get a single namespace tags: - namespaces parameters: - name: id in: path required: true description: The unique id of the namespace schema: description: The unique id of the namespace type: string responses: '200': content: application/json: schema: type: object properties: namespace: $ref: '#/components/schemas/Namespace' required: - namespace additionalProperties: false x-codeSamples: - lang: cURL source: "curl -X GET 'https://api.growthbook.io/api/v1/namespaces/ns-abc123' \\\n -H 'Authorization: Bearer YOUR_API_KEY'" put: operationId: putNamespace summary: Update a namespace tags: - namespaces parameters: - name: id in: path required: true description: The unique id of the namespace schema: description: The unique id of the namespace type: string requestBody: required: true content: application/json: schema: type: object properties: displayName: description: Human-readable display name. type: string description: description: Namespace description. type: string status: description: Set to 'inactive' to disable the namespace. type: string enum: - active - inactive hashAttribute: description: Only applies to multiRange namespaces. Changes which user attribute is used for bucket hashing going forward. type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: namespace: $ref: '#/components/schemas/Namespace' required: - namespace additionalProperties: false x-codeSamples: - lang: cURL source: "curl -X PUT 'https://api.growthbook.io/api/v1/namespaces/ns-abc123' \\\n -H 'Authorization: Bearer YOUR_API_KEY' \\\n -H 'Content-Type: application/json' \\\n -d '{\"displayName\":\"Checkout v2\",\"status\":\"inactive\"}'" delete: operationId: deleteNamespace summary: Delete a namespace description: Permanently removes a namespace from the organization. Returns a 409 error if any active experiments currently reference this namespace — disable or remove those references first. tags: - namespaces parameters: - name: id in: path required: true description: The unique id of the namespace schema: description: The unique id of the namespace type: string responses: '200': content: application/json: schema: type: object properties: deletedId: description: The ID of the deleted namespace. example: ns-abc123 type: string required: - deletedId additionalProperties: false x-codeSamples: - lang: cURL source: "curl -X DELETE 'https://api.growthbook.io/api/v1/namespaces/ns-abc123' \\\n -H 'Authorization: Bearer YOUR_API_KEY'" /v1/namespaces/{id}/memberships: get: operationId: getNamespaceMemberships summary: Get namespace membership tags: - namespaces parameters: - name: id in: path required: true description: The unique id of the namespace schema: description: The unique id of the namespace type: string - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' responses: '200': content: application/json: schema: allOf: - type: object properties: experiments: type: array items: $ref: '#/components/schemas/NamespaceExperimentMember' required: - experiments additionalProperties: false - $ref: '#/components/schemas/PaginationFields' x-codeSamples: - lang: cURL source: "curl -X GET 'https://api.growthbook.io/api/v1/namespaces/ns-abc123/memberships' \\\n -H 'Authorization: Bearer YOUR_API_KEY'" /v1/namespaces/{id}/rotateSeed: post: operationId: postNamespaceRotateSeed summary: Rotate namespace seed description: '⚠️ Dangerous: sets a new seed for a multiRange namespace. Every user''s bucket position within the namespace is re-computed immediately, which re-randomizes traffic eligibility for **all** experiments currently using this namespace. Only do this if you intentionally want to reshuffle all allocations across experiments. This could be useful when re-using a namespace for a new set of experiments.' tags: - namespaces parameters: - name: id in: path required: true description: The unique id of the namespace schema: description: The unique id of the namespace type: string requestBody: required: true content: application/json: schema: type: object properties: seed: description: A specific value to use as the new seed. If omitted, a random value is generated. type: string additionalProperties: false responses: '200': content: application/json: schema: type: object properties: namespace: $ref: '#/components/schemas/Namespace' required: - namespace additionalProperties: false x-codeSamples: - lang: cURL source: "curl -X POST 'https://api.growthbook.io/api/v1/namespaces/ns-abc123/rotateSeed' \\\n -H 'Authorization: Bearer YOUR_API_KEY'" components: parameters: 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 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 schemas: NamespaceExperimentMember: type: object properties: id: description: The internal experiment ID. type: string name: description: Display name of the experiment. type: string trackingKey: description: The experiment tracking key used by the SDK. type: string status: description: The current status of the experiment. type: string enum: - draft - running - stopped ranges: description: The ranges claimed within this namespace, as [start, end] pairs between 0 and 1. type: array items: type: array prefixItems: - type: number - type: number required: - id - name - trackingKey - status - ranges additionalProperties: false 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 Namespace: type: object properties: id: description: The unique internal identifier for the namespace (e.g. 'ns-abc123'). type: string displayName: description: Human-readable display name. type: string description: type: string status: type: string enum: - active - inactive format: description: Namespace format. 'multiRange' supports multiple ranges per experiment and a configurable hash attribute. type: string enum: - legacy - multiRange hashAttribute: description: The user attribute used to assign bucket membership. Only present on multiRange namespaces. type: string seed: description: The seed used for bucket hashing. Changing this re-randomizes which traffic is eligible for which experiment. Use the rotateSeed endpoint to change it. type: string required: - id - displayName - description - status - format additionalProperties: false securitySchemes: bearerAuth: type: http scheme: bearer description: 'If using Bearer auth, pass the Secret Key as the token: ```bash curl https://api.growthbook.io/api/v1/features -H "Authorization: Bearer secret_abc123DEF456" ``` ' basicAuth: type: http scheme: basic description: 'If using HTTP Basic auth, pass the Secret Key as the username and leave the password blank: ```bash curl https://api.growthbook.io/api/v1/features -u secret_abc123DEF456: # The ":" at the end stops curl from asking for a password ``` ' x-tagGroups: - name: Endpoints tags: - projects - environments - features-v2 - feature-revisions-v2 - features - feature-revisions - ramp-schedules - data-sources - fact-tables - fact-metrics - metrics - experiments - namespaces - snapshots - dimensions - segments - sdk-connections - visual-changesets - saved-groups - organizations - members - code-references - archetypes - queries - settings - attributes - usage - Dashboards - CustomFields - MetricGroups - Teams - ExperimentTemplates - AnalyticsExplorations - RampScheduleTemplates - name: Models tags: - AnalyticsExploration_model - Archetype_model - Attribute_model - CodeRef_model - CustomField_model - Dashboard_model - DataSource_model - Dimension_model - Environment_model - Experiment_model - ExperimentAnalysisSettings_model - ExperimentDecisionFrameworkSettings_model - ExperimentMetric_model - ExperimentMetricOverrideEntry_model - ExperimentResults_model - ExperimentSnapshot_model - ExperimentTemplate_model - ExperimentWithEnhancedStatus_model - FactMetric_model - FactTable_model - FactTableColumn_model - FactTableFilter_model - Feature_model - FeatureBaseRule_model - FeatureDefinition_model - FeatureEnvironment_model - FeatureEnvironmentV2_model - FeatureExperimentRefRule_model - FeatureExperimentRule_model - FeatureForceRule_model - FeatureRevision_model - FeatureRevisionV2_model - FeatureRolloutRule_model - FeatureRule_model - FeatureRuleV2_model - FeatureSafeRolloutRule_model - FeatureV2_model - FeatureWithRevisions_model - FeatureWithRevisionsV2_model - InformationSchema_model - InformationSchemaTable_model - LookbackOverride_model - Member_model - Metric_model - MetricAnalysis_model - MetricGroup_model - MetricUsage_model - Namespace_model - NamespaceExperimentMember_model - Organization_model - PaginationFields_model - Project_model - Query_model - RampSchedule_model - RampScheduleTemplate_model - SavedGroup_model - ScheduleRule_model - SdkConnection_model - Segment_model - Settings_model - Team_model - VisualChange_model - VisualChangeset_model