| Name | Description |
|---|---|
| List | List of holdout groups including their configuration details. |
| Edit | Edit holdout group. |
| Create | Create a new holdout. |
GET https://experiment.amplitude.com/api/1/holdouts
Fetch a list of holdout groups including their configuration details.
| Name | Description |
|---|---|
limit |
The max number of holdout groups to return. Capped at 1000. |
cursor |
The offset to start the "page" of results from. |
A successful request returns a 200 OK response and a list of holdout groups encoded as JSON in the response body.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/holdout?limit=1000' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
{
"holdouts": [
{
"id": <holdoutId>,
"projectId": <projectId>,
"name": "Example Holdout",
"key": "holdout-abcdefgh",
"description": "Example holdout",
"holdoutPercentage": 5,
"evaluationMode": "remote",
"bucketingKey": "amplitude_id",
"bucketingSalt": "ABCDEFGH",
"variantName": "on",
"experiments": [123],
"individualInclusion": ["x@amplitude.com"],
"individualExclusion": ["y@amplitude.com"],
"deleted": false,
"createdBy": <createdBy>,
"lastModifiedBy": <lastModifiedBy>,
"createdAt": "2025-01-01T00:00:00.000Z",
"lastModifiedAt": "2025-01-01T00:00:00.000Z"
}
],
"nextCursor": <cursorId>
}
GET https://experiment.amplitude.com/api/1/holdouts/<id>
Fetch the configuration details of a holdout group.
| Name | Description |
|---|---|
id |
Required. String. Holdout group's ID. |
A successful request returns a 200 OK response and a JSON object with the holdout group's details.
curl --request GET \
--url 'https://experiment.amplitude.com/api/1/holdouts/<id>' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>'
{
"id": <holdoutId>,
"projectId": <projectId>,
"name": "Example Holdout",
"key": "holdout-abcdefgh",
"description": "Example holdout",
"holdoutPercentage": 5,
"evaluationMode": "remote",
"bucketingKey": "amplitude_id",
"bucketingSalt": "ABCDEFGH",
"variantName": "on",
"experiments": [123],
"individualInclusion": ["x@amplitude.com"],
"individualExclusion": ["y@amplitude.com"],
"deleted": false,
"createdBy": <createdBy>,
"lastModifiedBy": <lastModifiedBy>,
"createdAt": "2025-01-01T00:00:00.000Z",
"lastModifiedAt": "2025-01-01T00:00:00.000Z"
}
PATCH https://experiment.amplitude.com/api/1/holdouts/{id}
Edit a holdout group.
| Name | Description |
|---|---|
id |
Required. String. Holdout group's ID. |
| Name | Description |
|---|---|
name |
Optional. Type: string. The holdout group name. |
description |
Optional. Type: string. The holdout group description. |
experiments |
Optional. Type: number array. List of experiment ids to include in this holdout group. Experiment evaluation mode must be compatible with holdout group's evaluation mode. |
individualInclusion |
Optional. Type: string array. List of user ids or device ids to include in this holdout group (never experience the experiments). |
individualExclusion |
Optional |
archive |
Optional |
{
"name": "updated name",
"description": "updated description",
"experiments": [123],
"individualInclusion": ["x@amplitude.com"]
}
A successful request returns a 200 OK response.
curl --request PATCH \
--url 'https://experiment.amplitude.com/api/1/holdouts/<id>' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>' \
--data '{"name": "updated name"}'
POST https://experiment.amplitude.com/api/1/holdouts
Create a new holdout group.
| Name | Description |
|---|---|
projectId |
Required. Type: number. Project id of the holdout group. |
name |
Required. Type: string. The holdout group name. |
key |
Optional. Type: string. The holdout group key. Must be unique. If not specified, it generates a random key. |
description |
Optional. Type: string. The holdout group description. |
holdoutPercentage |
Required |
evaluationMode |
Optional |
bucketingKey |
Optional |
experiments |
Optional |
individualInclusion |
Optional |
individualExclusion |
Optional |
{
"projectId": <projectId>,
"name": "Example Holdout",
"key": "example-holdout",
"holdoutPercentage": 5,
"evaluationMode": "local",
"bucketingKey": "device_id",
"experiments": [21197],
"individualInclusion": ["x@amplitude.com"],
"individualExclusion": ["y@amplitude.com"],
}
A successful request returns a 200 OK response and a JSON object with the holdout group's id and URL.
curl --request POST \
--url 'https://experiment.amplitude.com/api/1/holdouts' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <management-api-key>' \
--data '{"projectId":"<projectId>","name":"Example Holdout","holdoutPercentage":5}'
{
"id": "<id>",
"url": "http://experiment.amplitude.com/amplitude/experiments/grouped-experiments"
}
January 7th, 2025
Need help? Contact Support
Visit Amplitude.com
Have a look at the Amplitude Blog
Learn more at Amplitude Academy
© 2026 Amplitude, Inc. All rights reserved. Amplitude is a registered trademark of Amplitude, Inc.