Experiment Management API Flag Endpoints
| Name | Description |
|---|---|
| List | List of flags including their configuration details. |
| Get details | Get the configuration details of a flag. |
| List versions | List all versions for a flag. |
| Get version details | Get a specific version for a flag. |
| List variants | List all variants for a flag. |
| Get variant details | Get a specific variant for a flag. |
| Get variant inclusions | Get all inclusions (users) for a variant. |
| Get variant cohort inclusions | Get all cohort inclusions for a variant. |
| Create variant | Create a new variant for a flag. |
| Edit variant | Edit a variant for a flag. |
| Remove variant | Remove a variant from a flag. |
| Add users to variant | Add users to flag's variant. |
| Add cohorts to variant | Add cohorts to flag's variant. |
| Remove users from variant | Remove users from flag's variant. |
| Remove all users from variant | Remove all users from flag's variant. |
| Bulk remove users from variant | Bulk remove users from experiment's variant. |
| Bulk remove cohorts from variant | Bulk remove cohorts from flag's variant. |
| List deployments | List all deployments for a flag. |
| Create deployment | Add a deployment for a flag. |
| Remove deployment | Remove a deployment from a flag. |
| Edit | Edit flag. |
| Create | Create a new flag. |
EU data residency
The examples on this page use the default base URLhttps://experiment.amplitude.com. If your project uses Amplitude's EU data center, use https://experiment.eu.amplitude.com instead. For more information, refer to Regions.List
GET https://experiment.amplitude.com/api/1/flags
Fetch a list of flags including their configuration details. Results are ordered with the most recently created items first.
Query parameters
| Name | Description |
|---|---|
key | Filter flags whose flag key matches this value. |
projectId | Filter flags that belong to this project. |
limit | The maximum number of flags to return. Capped at 1000. |
cursor | The offset to start the page of results from. |
includeArchived | Filter to include archived flags. Default is false. |
Response
A successful request returns a 200 OK response and a JSON-encoded list of flags in the response body. createdAt and lastModifiedAt are in UTC in ISO 8601 format.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/flags?limit=1000' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Get details
GET https://experiment.amplitude.com/api/1/flags/<id>
Fetch the configuration details of a flag.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
Response
A successful request returns a 200 OK response and a JSON object with the flag's details.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/flags/<id>' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
List versions
GET https://experiment.amplitude.com/api/1/flags/{id}/versions
Fetch a list of all versions for a flag.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
Response
A successful request returns a 200 OK response and the flag's versions as an array of JSON objects in the response body. Versions are sorted in descending order.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/versions' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Get version details
GET https://experiment.amplitude.com/api/1/flags/{id}/versions/{versionId}
Fetch details of a specific version of a flag.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
versionId | Required. Type: string. The version's ID. |
Response
A successful request returns a 200 OK response and a JSON object with details of the version.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/versions/<versionId>' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
List variants
GET https://experiment.amplitude.com/api/1/flags/{id}/variants
Fetch a list of all variants for a flag.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
Response
A successful request returns a 200 OK response and the variants as an array of JSON objects in the response body.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/variants' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Get variant details
GET https://experiment.amplitude.com/api/1/flags/{id}/variants/{variantKey}
Fetch details of a specific variant of a flag.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
Response
A successful request returns a 200 OK response and a JSON object with details of a flag variant.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/variants/<variantKey>' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Get variant inclusions
GET https://experiment.amplitude.com/api/1/flags/{id}/variants/{variantKey}/users
Fetch a list of inclusions for a specific variant of a flag.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
Response
A successful request returns a 200 OK response and the variant's inclusions as an array of JSON objects.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/variants/<variantKey>/users' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Get variant cohort inclusions
GET https://experiment.amplitude.com/api/1/flags/{id}/variants/{variantKey}/cohorts
Fetch a list of cohort inclusions for a specific variant of a flag.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
Response
A successful request returns a 200 OK response and the variant's cohort inclusions as an array of cohort IDs.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/variants/<variantKey>/cohorts' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Create variant
POST https://experiment.amplitude.com/api/1/flags/{id}/variants
Create a new variant for a flag
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
Request body
| Name | Description |
|---|---|
key | Required. Type: string. The variant key. Can only contain letters, numbers, underscores (_), and hyphens (-). |
description | Optional. Type: string. Description for the variant. |
name | Optional. Type: string. Name for the variant. |
payload | Optional. Type: JSON. Optional payload. Value must be a valid JSON element, such as an object, string, or number. |
rolloutWeight | Optional. Type: number. Rollout weight for non-targeted users. |
Example request
{
"key": "new-variant-key",
"description": "optional description for variant",
"name": "optional name for variant",
"payload": { "variant-payload": "example payload" },
"rolloutWeight": 0
}
Response
A successful request returns a 200 OK response and OK text.
Request
curl --request POST \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/variants' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>' \
--data '{"key":"<key>","name":"<name>","description":"<description>","payload":"<payload>","rolloutWeight":<rolloutWeight>}'
Edit variant
POST https://experiment.amplitude.com/api/1/flags/<id>/variants/<variantKey>
Edit a variant for a flag.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
Example request
{
"key": "updated-variant-key",
"description": "updated optional description for variant",
"name": "optional name for variant",
"payload": { "variant-payload": "example payload" },
"rolloutWeight": 0
}
Request body
| Name | Description |
|---|---|
key | Optional. Type: string. The variant key. Can only contain letters, numbers, underscores (_), and hyphens (-). |
description | Optional. Type: string. Description for the variant. |
name | Optional. Type: string. Name for the variant. |
payload | Optional. Type: JSON. Optional payload. Value must be a valid JSON element, such as an object, string, or number. This value replaces the existing value for the variant payload. |
rolloutWeight | Optional. Type: number. Rollout weight for non-targeted users. |
Response
A successful request returns a 200 OK response and OK text.
Request
curl --request PATCH \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/variants/<variantKey>' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>' \
--data '{"key":"<key>","name":"<name>","description":"<description>","payload":"<payload>","rolloutWeight":<rolloutWeight>}'
Remove variant
DELETE https://experiment.amplitude.com/api/1/flags/{id}/variants/{variantKey}
Remove a variant from a flag.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
Response
A successful request returns a 200 OK response and OK text.
Request
curl --request DELETE \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/variants/<variantKey>' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Add users to variant
POST https://experiment.amplitude.com/api/1/flags/{id}/variants/{variantKey}/users
You can have up to 2,000 inclusions per variant. If you exceed this limit, Amplitude returns a 400 error.
Add inclusions (users or devices) to a flag's variant.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
Request body
| Name | Description |
|---|---|
inclusions | Required. Type: object. Contains a string array of user or device IDs. |
Example request
{
"inclusions": [
"<user1>@<your-company-email>, <user2>@<your-company-email>, <userId>"
]
}
Response
A successful request returns a 200 OK response and OK text.
Request
curl --request POST \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/variants/<variantKey>/users' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>' \
--data '{"inclusions":<["id1", "id2", "id3"]>}'
Add cohorts to variant
POST https://experiment.amplitude.com/api/1/flags/{id}/variants/{variantKey}/cohorts
Add cohort inclusions to a flag's variant.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
Request body
| Name | Description |
|---|---|
inclusions | Required. Type: array. An array of cohort IDs to add. |
Example request
{
"inclusions": ["cohort-id-1", "cohort-id-2"]
}
Response
A successful request returns a 200 OK response and OK text.
Request
curl --request POST \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/variants/<variantKey>/cohorts' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>' \
--data '{"inclusions":["cohort-id-1", "cohort-id-2"]}'
Remove users from variant
DELETE https://experiment.amplitude.com/api/1/flags/{id}/variants/{variantKey}/users/{userIndex}
Remove inclusions (users or devices) from a flag's variant.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
userIndex | Required. Type: string. The user's index. Zero-indexed. Get an index-based array of users from Get variant inclusions |
Response
A successful request returns a 200 OK response and OK text.
Request
curl --request DELETE \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/variants/<variantKey>/users/<userIndex>' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Remove all users from variant
DELETE https://experiment.amplitude.com/api/1/flags/{id}/variants/{variantKey}/users
Remove all inclusions (users or devices) from a flag's variant.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
Response
A successful request returns a 200 OK response and OK text.
Request
curl --request DELETE \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/variants/<variantKey>/users' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Bulk remove users from variant
DELETE https://experiment.amplitude.com/api/1/flags/{id}/variants/{variantKey}/bulk-delete-users
Bulk remove users or devices from a flag's variant. Limited to 100 for each request.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
Request body
| Name | Description |
|---|---|
users | Required. Type: object. Contains an string array of user or device ids. |
Response
A successful request returns a 200 OK response and OK text.
Request
curl --request DELETE \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/variants/<variantKey>/bulk-delete-users' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>' \
--data '{"users":<["id1", "id2", "id3"]>}'
Bulk remove cohorts from variant
DELETE https://experiment.amplitude.com/api/1/flags/{id}/variants/{variantKey}/bulk-delete-cohorts
Bulk remove cohorts from a flag's variant. Limited to 100 for each request.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
Request body
| Name | Description |
|---|---|
users | Required. Type: array. An array of cohort IDs to remove. |
Response
A successful request returns a 200 OK response and OK text.
Request
curl --request DELETE \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/variants/<variantKey>/bulk-delete-cohorts' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>' \
--data '{"users":["cohort-id-1", "cohort-id-2"]}'
List deployments
GET https://experiment.amplitude.com/api/1/flags/{id}/deployments
List all deployments for a flag.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
Response
A successful request returns a 200 OK response and an array of JSON objects with the flag's deployment details.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/deployments' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Create deployment
POST https://experiment.amplitude.com/api/1/flags/{id}/deployments
Add a deployment for a flag.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The object's ID. |
Request body
| Name | Description |
|---|---|
deployments | Required. Type: string array. Contains a string array of deployment IDs. |
Example request
{
"deployments": [<deploymentId>]
}
Response
A successful request returns a 200 OK response and OK text.
Request
curl --request POST \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/deployments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
--data '{"deployments":[<deploymentId>]}'
Remove deployment
DELETE https://experiment.amplitude.com/api/1/flags/{id}/deployments/{deploymentId}
Remove a deployment from a flag.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
deploymentID | Required. Type: string. The deployment's ID. |
Response
A successful request returns a 200 OK response and OK text.
Request
curl --request DELETE \
--url 'https://experiment.amplitude.com/api/1/flags/<id>/deployments/<deploymentId>' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Edit
PATCH https://experiment.amplitude.com/api/1/flags/{id}
Edit a flag.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The flag's ID. Find the ID in the URL of the flag in the Amplitude app. |
Request body
| Name | Description |
|---|---|
name | Optional. Type: string. Name. |
description | Optional. Type: string. Description. |
bucketingKey | Optional. Type: string. The user property to bucket the user by. |
bucketingSalt | Optional. Type: string. Bucketing salt. |
bucketingUnit | Optional. Type: string. Bucketing unit represented by a group type from the accounts add-on. Used for group level bucketing and analysis. |
evaluationMode | Optional. Type: string. Evaluation mode for the flag, either local or remote. |
rolloutPercentage | Optional. Type: number. Rollout percentage for non-targeted users. Range 0 - 100. |
targetSegments | Optional. Type: object array. Refer to the targetSegments table for more information. When you provide the targetSegments object array, it replaces existing target segments. This option doesn't support cohorts. |
enabled | Optional. Type: boolean. Property to activate or deactivate the flag. |
archive | Optional. Type: boolean. Property to archive or unarchive the flag. |
tags | Optional. Type: string array. A list of tags for the flag. Tags are added and deleted by the same operation. To add new tags to existing ones, fetch a list of all flag tags first. |
Example request
{
"name": "updated name",
"description": "updated description",
"bucketingKey": "amplitude_id",
"bucketingSalt": "<bucketingSalt>",
"bucketingUnit": "org id",
"evaluationMode": "remote",
"rolloutPercentage": 0,
"enabled": false,
"tags": ["prod", "staging"]
}
Response
A successful request returns a 200 OK response.
response
curl --request PATCH \
--url 'https://experiment.amplitude.com/api/1/flags/<id>' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>' \
--data '{"enabled":<enabled>,"rolloutPercentage":<rolloutPercentage>}'
Create
POST https://experiment.amplitude.com/api/1/flags
Create a new flag.
Request body
| Name | Description |
|---|---|
projectId | Required. Type: string. The project's ID. |
key | Required. Type: string. The flag key. |
name | Optional. Type: string. The flag name. |
description | Optional. Type: string. Description for the flag. |
variants | Optional. Type: object array. Array of variants. |
bucketingKey | Optional. Type: string. The user property to bucket the user by. |
rolloutWeights | Optional. Type: object. Rollout weights for non-targeted users. The object should be a mapping from variant key to rollout weight as an integer. For example: { "control": 1, "treatment": 1 }. |
targetSegments | Optional. Type: object array. Refer to the targetSegments table for more information. |
deployments | Optional. Type: string array. Array of deployments that the flag should be assigned to. |
evaluationMode | Optional. Type: string. Experiment evaluation mode; options include remote or local. |
variants
The variants field contains these objects.
| Name | Description |
|---|---|
key | Required. Type: string. The key (also called value) of the variant. Can only contain letters, numbers, underscores (_), and hyphens (-). |
payload | Optional. Type: JSON. Optional payload. Value must be a valid JSON element, such as an object, string, or number. |
name | Optional. Type: string. The variant name. |
description | Optional. Type: string. The variant description. |
targetSegments
The targetSegments field contains these objects.
| Name | Description |
|---|---|
name | Required. Type: string. The segment name. |
conditions | Required. Type: object array. Array of conditions. |
percentage | Required. Type: number. The allocation percentage for users who match a condition. |
rolloutWeights | Required. Type: object. A map from variant key to rollout weight. For example: { "control": 1, "treatment": 1 }. |
conditions
The conditions field contains these objects.
| Name | Description |
|---|---|
type | Required. Type: string. Must have value: property |
prop | Required. Type: string. The property to use in the condition. Prefix custom and free-form properties with gp: |
op | Required. Type: string. The operation to use in this condition. |
values | Required. Type: string array. The values to use in the operation. |
op
A string value representing operations on a property value. Possible values are:
isis notcontainsdoes not containlessless or equalgreatergreater or equalset isset is notset containsset does not containglob matchglob does not matchversion less thanversion less than or equal toversion greater thanversion greater than or equal to
Example request
{
"projectId": "<projectId>",
"name": "Analyze button clicks",
"key": "analyze-button-clicks",
"description": "analyze button clicks on the main page",
"variants": [
{
"key": "on"
}
],
"rolloutWeights": { "on": 1 },
"targetSegments": [
{
"name": "Segment 1",
"conditions": [
{
"prop": "country",
"op": "is",
"type": "property",
"values": ["United States"]
}
],
"percentage": 0,
"bucketingKey": "amplitude_id",
"rolloutWeights": {
"on": 1
}
}
],
"deployments": ["<deploymentId>"],
"evaluationMode": "remote"
}
Response
A successful request returns a 200 OK response and a JSON object with the flag's ID and URL.
curl --request POST \
--url 'https://experiment.amplitude.com/api/1/flags' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>' \
--data '{"projectId":"<projectId>","key":"<key>"}'
Was this helpful?