Experiment Management API Experiment Endpoints
| Name | Description |
|---|---|
| List | List of experiments including their configuration details. |
| Get details | Get the configuration details of an experiment. |
| List versions | List all versions for an experiment. |
| Get version details | Get a specific version for an experiment. |
| List variants | List all variants for an experiment. |
| Get variant details | Get a specific variant for an experiment. |
| 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 an experiment. |
| Edit variant | Edit a variant for an experiment. |
| Remove variant | Remove a variant from an experiment. |
| Add users to variant | Add users to experiment's variant. |
| Add cohorts to variant | Add cohorts to experiment's variant. |
| Remove users from variant | Remove users from experiment's variant. |
| Remove all users from variant | Remove all users from experiment's variant. |
| Bulk remove users from variant | Bulk remove users from experiment's variant. |
| Bulk remove cohorts from variant | Bulk remove cohorts from experiment's variant. |
| List deployments | List all deployments for an experiment. |
| Add deployment | Add a deployment to an experiment. |
| Remove deployment | Remove a deployment from an experiment. |
| Edit | Edit experiment. |
| Create | Create a new experiment. |
EU data residency
The examples on this page use the default base URL https://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/experiments
Fetch a list of experiments and their configuration details. Results are ordered with the most recently created items first.
Query parameters
| Name | Description |
|---|---|
key | Filter experiments whose experiment key matches this value. |
projectId | Filter experiments that belong to this project. |
limit | The maximum number of experiments to return. Capped at 1000. |
cursor | The offset to start the "page" of results from. |
includeArchived | Optional. Boolean. Default is false. When false, return only active experiments. When true, return active and archived experiments. |
Response
A successful request returns a 200 OK response and a list of experiments encoded as JSON in the response body. createdAt and lastModifiedAt are in UTC in ISO 8601 format.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/experiments?limit=1000' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Get details
GET https://experiment.amplitude.com/api/1/experiments/<id>
Fetch the configuration details of an experiment.
Path variables
| Name | Description |
|---|---|
id | Required. String. The experiment's ID. Find the ID in the URL of the experiment in the Amplitude app. |
Response
A successful request returns a 200 OK response and a JSON object with the experiment's details.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/experiments/<id>' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
List versions
GET https://experiment.amplitude.com/api/1/experiments/{id}/versions
Fetch a list of all versions for an experiment.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment in the Amplitude app. |
Response
A successful request returns a 200 OK response and a list of the experiment's versions encoded 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/experiments/<id>/versions' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Get version details
GET https://experiment.amplitude.com/api/1/experiments/{id}/versions/{versionId}
Fetch details of a specific version of an experiment.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment 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/experiments/<id>/versions/<versionId>' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
List variants
GET https://experiment.amplitude.com/api/1/experiments/{id}/variants
Fetch a list of all variants for an experiment.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment in the Amplitude app. |
Response
A successful request returns a 200 OK response and a list of variants encoded as an array of JSON objects in the response body.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/experiments/<id>/variants' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Get variant details
GET https://experiment.amplitude.com/api/1/experiments/{id}/variants/{variantKey}
Fetch details of a specific variant of an experiment.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment 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 the experiment variant.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/experiments/<id>/variants/<variantKey>' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Get variant inclusions
GET https://experiment.amplitude.com/api/1/experiments/{id}/variants/{variantKey}/users
Fetch a list of inclusions for a specific variant of an experiment.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
Response
A successful request returns a 200 OK response and a list of inclusions for the experiment's variant as an array of JSON objects.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/experiments/<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/experiments/{id}/variants/{variantKey}/cohorts
Fetch a list of cohort inclusions for a specific variant of an experiment.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
Response
A successful request returns a 200 OK response and a list of cohort inclusions for the experiment's variant as an array of cohort IDs.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/experiments/<id>/variants/<variantKey>/cohorts' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Create variant
POST https://experiment.amplitude.com/api/1/experiments/{id}/variants
Create a new variant for an experiment.
Path variables
| Name | Description |
|---|---|
id | Required. String. The experiment's ID. Find the ID in the URL of the experiment 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. |
rolloutWeight | Optional. Type: number. Rollout weight for non-targeted users. |
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.
Example request
curl --request POST \
--url 'https://experiment.amplitude.com/api/1/experiments/<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
PATCH https://experiment.amplitude.com/api/1/experiments/<id>/variants/<variantKey>
Edit a variant for an experiment.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
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. This value replaces the existing value for the variant payload. |
rolloutWeight | Optional. Type: number. Rollout weight for non-targeted users. |
Example request
{
"key": "updated-variant-key",
"description": "updated-optional description for variant",
"name": "optional name for variant",
"payload": { "variant-payload": "example payload" },
"rolloutWeight": 10
}
Response
A successful request returns a 200 OK response and OK text.
Request
curl --request PATCH \
--url 'https://experiment.amplitude.com/api/1/experiments/<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/experiments/{id}/variants/{variantKey}
Remove a variant from an experiment.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment 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/experiments/<id>/variants/<variantKey>' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Add users to variant
POST https://experiment.amplitude.com/api/1/experiments/{id}/variants/{variantKey}/users
Add inclusions (users or devices) to the experiment's variant.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
Example request
{
"inclusions": [<user1>@<your-company-email>, <user2>@<your-company-email>, <userId>]
}
Request body
| Name | Description |
|---|---|
inclusions | Required. Type: object. Contains a string array of user or device IDs. |
Response
A successful request returns a 200 OK response and OK text.
Request
curl --request POST \
--url 'https://experiment.amplitude.com/api/1/experiments/<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/experiments/{id}/variants/{variantKey}/cohorts
Add cohort inclusions to the experiment's variant.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment 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/experiments/<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/experiments/{id}/variants/{variantKey}/users/{userIndex}
Remove inclusions (users or devices) from the experiment's variant.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment 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/experiments/<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/experiments/{id}/variants/{variantKey}/users
Remove all inclusions (users or devices) from the experiment's variant.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment 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/experiments/<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/experiments/{id}/variants/{variantKey}/bulk-delete-users
Bulk remove users or devices from the experiment's variant. Limited to 100 per request.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment in the Amplitude app. |
variantKey | Required. Type: string. The variant's key. |
Request body
| Name | Description |
|---|---|
users | Required. Type: object. Contains a 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/experiments/<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/experiments/{id}/variants/{variantKey}/bulk-delete-cohorts
Bulk remove cohorts from the experiment's variant. Limited to 100 per request.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment 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/experiments/<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/experiments/{id}/deployments
List all deployments for an experiment.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment in the Amplitude app. |
Response
A successful request returns a 200 OK response and an array of JSON objects with the experiment's deployment details.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/experiments/<id>/deployments' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Add deployment
POST https://experiment.amplitude.com/api/1/experiments/{id}/deployments
Add a deployment to an experiment.
Path variables
| Name | Description |
|---|---|
id | Required. String. The experiment's ID. Find the ID in the URL of the experiment in the Amplitude app. |
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/experiments/<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/experiments/{id}/deployments/{deploymentId}
Remove a deployment from an experiment.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment 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/experiments/<id>/deployments/<deploymentId>' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
Edit
Neither Web Experimentation nor Guides and Surveys support editing experiments. Attempts to edit a Web Experimentation or a Guides and Surveys experiment return a 405 error.
PATCH https://experiment.amplitude.com/api/1/experiments/{id}
Edit an experiment.
Path variables
| Name | Description |
|---|---|
id | Required. Type: string. The experiment's ID. Find the ID in the URL of the experiment 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 experiment, 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. The targetSegments object array replaces existing target segments. This option doesn't support cohorts. |
enabled | Optional. Type: boolean. Property to activate or deactivate the experiment. |
archive | Optional. Type: boolean. Property to archive or unarchive the experiment. |
experimentType | Optional. Type: string. Experiment type. Options include a-b-test or multi-arm-bandit. |
stickyBucketing | Optional. Type: boolean. If true, the experiment uses sticky bucketing. |
startDate | Optional. Type: string. Start date of the experiment in ISO 8601 format. |
endDate | Optional. Type: string. End date of the experiment in ISO 8601 format. End date can be null. |
exposureEvent | Optional. Type: object. Refer to the exposureEvent table for more information. If set to null, Amplitude uses the Amplitude Exposure Event. |
tags | Optional. Type: string array. A list of tags for the experiment. Tags are added and deleted by the same operation. To add new tags to the existing ones, fetch a list of all experiment tags first. |
decision | Optional. Type: string. Options include rollout, rollback, continue-running. |
decisionReason | Optional. Type: string. The reason for the decision. |
rolledOutVariant | Optional. Type: string. The variant key or name that you rolled out. |
exposureEvent
| Name | Description |
|---|---|
event_type | Required. Type: string. Event type. |
filters | Required. Type: object array. A list of property filters. Refer to the filters table for more information. |
filters
| Name | Description |
|---|---|
group_type | Optional. Type: string. Group type of the filter; can be null. Can be User value or one of the group values, like org_id, org name |
subprop_key | Required. Type: string. Filter's key; can be null. |
subprop_op | Required. Type: string. The operation to use in this filter. |
subprop_type | Required. Type: string. Either event, user or group indicating that the property is either an event, user or group property, respectively. |
subprop_value | Required. Type: string array. A list of values to filter the event property by. |
subprop_op
isis notcontainsdoes not containlessless or equalgreatergreater or equalglob matchglob does not match
Example request
{
"name": "updated name",
"description": "updated description",
"bucketingKey": "amplitude_id",
"bucketingSalt": "<bucketingSalt>",
"evaluationMode": "remote",
"rolloutPercentage": 0,
"enabled": true,
"experimentType": "a-b-test",
"stickyBucketing": false,
"startDate": "2023-07-31T10:26:00.996Z",
"endDate": "2023-09-23T10:26:00.996Z",
"tags": ["prod", "staging"],
"exposureEvent": {
"event_type": "_active",
"filters": [
{
"group_type": "User",
"subprop_key": "amplitude_day_of_week",
"subprop_op": "is",
"subprop_type": "day_time_prop",
"subprop_value": ["Tuesday"]
}
]
}
}
Response
A successful request returns a 200 OK response.
Request
curl --request PATCH \
--url 'https://experiment.amplitude.com/api/1/experiments/<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/experiments
Create a new feature experiment.
Request body
| Name | Description |
|---|---|
projectId | Required. Type: string. The project's ID. |
key | Required. Type: string. The flag key. |
name | Optional. Type: string. The experiment name. |
description | Optional. Type: string. Description for the experiment. |
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 deployment IDs to assign the experiment to. |
evaluationMode | Optional. Type: string. Experiment evaluation mode. Options include remote or local. |
experimentType | Optional. Type: string. Experiment type. Options include a-b-test or multi-arm-bandit. |
variants
The variants field contains these objects.
| Name | Description |
|---|---|
key | Required. Type: string. The key (a.k.a 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. |
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 match
Example request
{
"projectId": "<projectId>",
"name": "Analyze button clicks experiment",
"key": "analyze-button-clicks-experiment",
"description": "analyze button clicks on the main page",
"variants": [
{
"key": "control"
},
{
"key": "treatment"
}
],
"rolloutWeights": { "control": 1, "treatment": 1 },
"targetSegments": [
{
"name": "Segment 1",
"conditions": [
{
"prop": "country",
"op": "is",
"type": "property",
"values": ["United States"]
}
],
"percentage": 0,
"bucketingKey": "amplitude_id",
"rolloutWeights": {
"control": 1,
"treatment": 1
}
}
],
"deployments": ["<deploymentId>"],
"evaluationMode": "remote",
"experimentType": "a-b-test"
}
Response
A successful request returns a 200 OK response and a JSON object with the experiment's id and url.
curl --request POST \
--url 'https://experiment.amplitude.com/api/1/experiments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>' \
--data '{"projectId":"<projectId>","key":"<key>"}'
Was this helpful?