Fetch experiments associated with a holdout
1 min
GET
https://api.optimizely.com/flags/v1//projects/{project_id}/holdouts/{holdout_id}/experiments
Path Parameters
- project_idintegerrequiredExampleDescription
- holdout_idintegerrequiredExampleDescription
Responses
200
- HoldoutExperimentsExamplesHistorical experiments with complete data:
[ { "deployed_variation_id": 6666666666, "experiment_end_time": "2024-07-31T23:59:59.000Z", "experiment_id": 5555555555, "experiment_start_time": "2024-07-01T10:00:00.000Z" }, { "deployed_variation_id": 8888888888, "experiment_end_time": "2024-06-30T23:59:59.000Z", "experiment_id": 7777777777, "experiment_start_time": "2024-06-15T14:00:00.000Z" } ]Holdout with multiple connected experiments:[ { "deployed_variation_id": 9876543210, "deployed_variation_key": "control", "deployed_variation_name": "Control Variation", "experiment_end_time": "2024-09-30T23:59:59.000Z", "experiment_id": 1234567890, "experiment_start_time": "2024-09-01T10:00:00.000Z" }, { "deployed_variation_id": 8765432109, "deployed_variation_key": "treatment", "deployed_variation_name": "Treatment Variation", "experiment_end_time": null, "experiment_id": 2345678901, "experiment_start_time": "2024-09-15T14:30:00.000Z" }, { "deployed_variation_id": null, "experiment_end_time": "2024-08-31T23:59:59.000Z", "experiment_id": 3456789012, "experiment_start_time": "2024-08-01T09:00:00.000Z" } ]Holdout with no connected experiments:Active experiments without end times:[ { "deployed_variation_id": 2222222222, "deployed_variation_key": "variation_a", "deployed_variation_name": "Variation A", "experiment_end_time": null, "experiment_id": 1111111111, "experiment_start_time": "2024-09-10T12:00:00.000Z" }, { "deployed_variation_id": null, "experiment_end_time": null, "experiment_id": 3333333333, "experiment_start_time": "2024-09-16T08:00:00.000Z" } ]Description- deployed_variation_idinteger<int64>ExampleDescriptionFormatint64
- deployed_variation_keystringExampleDescription
- deployed_variation_namestringExampleDescription
- experiment_end_timestring<date-time>ExampleDescriptionFormatdate-time
- experiment_idinteger<int64>requiredExampleDescriptionFormatint64
- experiment_start_timestring<date-time>ExampleDescriptionFormatdate-time
400
- ProblemDetailExample
{ "detail": "Holdout ID must be a positive integer", "status": 400, "title": "Invalid holdout ID", "type": "about:blank" }Description- detailstringrequiredDescription
- statusintegerrequiredDescription
- titlestringrequiredDescription
- typestringrequiredDescription
- uuidstringDescription
401
403
- ProblemDetailExamplesHoldouts feature disabled:
{ "detail": "Holdouts feature is not enabled for this project", "status": 403, "title": "Feature not enabled", "type": "about:blank" }Insufficient permissions:{ "detail": "Permission denied - insufficient privileges to view holdout experiments", "status": 403, "title": "Forbidden", "type": "about:blank" }Description- detailstringrequiredDescription
- statusintegerrequiredDescription
- titlestringrequiredDescription
- typestringrequiredDescription
- uuidstringDescription
404
- ProblemDetailExamplesHoldout does not exist:
{ "detail": "Holdout not found with id '987'", "status": 404, "title": "Holdout not found", "type": "about:blank" }Project does not exist:{ "detail": "Project not found with id '12345'", "status": 404, "title": "Project not found", "type": "about:blank" }Description- detailstringrequiredDescription
- statusintegerrequiredDescription
- titlestringrequiredDescription
- typestringrequiredDescription
- uuidstringDescription
curl
curl --request GET \
--url https://api.optimizely.com/flags/v1//projects/{project_id}/holdouts/{holdout_id}/experiments \
--header 'accept: application/json'javascript
var myHeaders = new Headers();
myHeaders.append("accept", "application/json");
myHeaders.append("content-type", "application/json");
var requestOptions = {
method: 'GET',
headers: myHeaders,
redirect: 'follow'
};
fetch("https://api.optimizely.com/flags/v1//projects/{project_id}/holdouts/{holdout_id}/experiments", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));ruby
require "uri"
require "json"
require "net/http"
url = URI("https://api.optimizely.com/flags/v1//projects/{project_id}/holdouts/{holdout_id}/experiments")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Get.new(url)
request["accept"] = "application/json"
request["content-type"] = "application/json"
response = https.request(request)
puts response.read_body
python
import requests
import json
url = "https://api.optimizely.com/flags/v1//projects/{project_id}/holdouts/{holdout_id}/experiments"
payload = {}
headers = {
'accept': 'application/json',
'content-type': 'application/json'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
200
// Successfully retrieved the list of experiments associated with the holdout.
Response structure:
Returns an array of experiment objects
Each experiment contains identification, timing, and variation data
Empty or null values are automatically filtered out
Results are ordered by the database query (typically by experiment_id)
Data interpretation:
experiment_id: References the layer_experiment_id from rules connected to this holdout
Timing fields: Reflect actual experiment run periods from reports
deployed_variation_id: Present only when experiments have specific variation deployments
Missing end_time: Indicates ongoing or perpetually running experiments
Missing deployed_variation_id: Experiments without specific variation targeting
Empty response scenarios:
Holdout exists but has no connected experiments (valid scenario)
No rules in the project match the holdout's configuration
All connected experiments have been archived or removed
Use this data for:
Understanding experiment overlap with holdout traffic
Planning holdout changes with awareness of affected experiments
Building experiment impact reports and analytics
Coordinating experiment timelines and traffic allocation
[
{
"deployed_variation_id": 9876543210,
"deployed_variation_key": "control",
"deployed_variation_name": "Control Variation",
"experiment_end_time": "2024-03-15T23:59:59.000Z",
"experiment_id": 1234567890,
"experiment_start_time": "2024-01-15T10:00:00.000Z"
}
]GENERATED
// Successfully retrieved the list of experiments associated with the holdout.
Response structure:
Returns an array of experiment objects
Each experiment contains identification, timing, and variation data
Empty or null values are automatically filtered out
Results are ordered by the database query (typically by experiment_id)
Data interpretation:
experiment_id: References the layer_experiment_id from rules connected to this holdout
Timing fields: Reflect actual experiment run periods from reports
deployed_variation_id: Present only when experiments have specific variation deployments
Missing end_time: Indicates ongoing or perpetually running experiments
Missing deployed_variation_id: Experiments without specific variation targeting
Empty response scenarios:
Holdout exists but has no connected experiments (valid scenario)
No rules in the project match the holdout's configuration
All connected experiments have been archived or removed
Use this data for:
Understanding experiment overlap with holdout traffic
Planning holdout changes with awareness of affected experiments
Building experiment impact reports and analytics
Coordinating experiment timelines and traffic allocation
[
{
"deployed_variation_id": 9876543210,
"deployed_variation_key": "control",
"deployed_variation_name": "Control Variation",
"experiment_end_time": "2024-03-15T23:59:59.000Z",
"experiment_id": 1234567890,
"experiment_start_time": "2024-01-15T10:00:00.000Z"
}
]concluded_experiments
// Historical experiments with complete data
[
{
"deployed_variation_id": 6666666666,
"experiment_end_time": "2024-07-31T23:59:59.000Z",
"experiment_id": 5555555555,
"experiment_start_time": "2024-07-01T10:00:00.000Z"
},
{
"deployed_variation_id": 8888888888,
"experiment_end_time": "2024-06-30T23:59:59.000Z",
"experiment_id": 7777777777,
"experiment_start_time": "2024-06-15T14:00:00.000Z"
}
]multiple_experiments
// Holdout with multiple connected experiments
[
{
"deployed_variation_id": 9876543210,
"deployed_variation_key": "control",
"deployed_variation_name": "Control Variation",
"experiment_end_time": "2024-09-30T23:59:59.000Z",
"experiment_id": 1234567890,
"experiment_start_time": "2024-09-01T10:00:00.000Z"
},
{
"deployed_variation_id": 8765432109,
"deployed_variation_key": "treatment",
"deployed_variation_name": "Treatment Variation",
"experiment_end_time": null,
"experiment_id": 2345678901,
"experiment_start_time": "2024-09-15T14:30:00.000Z"
},
{
"deployed_variation_id": null,
"experiment_end_time": "2024-08-31T23:59:59.000Z",
"experiment_id": 3456789012,
"experiment_start_time": "2024-08-01T09:00:00.000Z"
}
]no_experiments
// Holdout with no connected experiments
[]ongoing_experiments
// Active experiments without end times
[
{
"deployed_variation_id": 2222222222,
"deployed_variation_key": "variation_a",
"deployed_variation_name": "Variation A",
"experiment_end_time": null,
"experiment_id": 1111111111,
"experiment_start_time": "2024-09-10T12:00:00.000Z"
},
{
"deployed_variation_id": null,
"experiment_end_time": null,
"experiment_id": 3333333333,
"experiment_start_time": "2024-09-16T08:00:00.000Z"
}
]400
// Bad Request - Invalid request parameters or malformed IDs.
Common causes:
Invalid holdout_id format (must be a positive integer)
Invalid project_id format (must be a positive integer)
Malformed request structure or unsupported query parameters
{
"detail": "",
"status": 0,
"title": "",
"type": "",
"uuid": ""
}401
// Invalid credentials
403
// Forbidden - You don't have permission to view holdout experiments in this project.
Permission requirements:
Must have project-level read access
Must have permissions to view holdouts and their associated data
Must have experiment data access permissions
Holdouts feature must be enabled for this project
Common causes:
Insufficient user permissions for holdout data access
Project-level permissions don't include experiment data viewing
Organization-level policies restrict holdout information access
Holdouts feature flag is disabled for this project
{
"detail": "",
"status": 0,
"title": "",
"type": "",
"uuid": ""
}GENERATED
// Forbidden - You don't have permission to view holdout experiments in this project.
Permission requirements:
Must have project-level read access
Must have permissions to view holdouts and their associated data
Must have experiment data access permissions
Holdouts feature must be enabled for this project
Common causes:
Insufficient user permissions for holdout data access
Project-level permissions don't include experiment data viewing
Organization-level policies restrict holdout information access
Holdouts feature flag is disabled for this project
{
"detail": "",
"status": 0,
"title": "",
"type": "",
"uuid": ""
}feature_disabled
// Holdouts feature disabled
{
"detail": "Holdouts feature is not enabled for this project",
"status": 403,
"title": "Feature not enabled",
"type": "about:blank"
}insufficient_permissions
// Insufficient permissions
{
"detail": "Permission denied - insufficient privileges to view holdout experiments",
"status": 403,
"title": "Forbidden",
"type": "about:blank"
}404
// Not Found - The specified holdout does not exist or you don't have access to it.
Possible reasons:
Holdout ID does not exist in the specified project
Project ID does not exist or you don't have access to it
Holdout was permanently deleted
Insufficient permissions to view this holdout or its experiments
Note: Returns 404 even if holdout exists but you lack permissions, for security reasons.
{
"detail": "",
"status": 0,
"title": "",
"type": "",
"uuid": ""
}GENERATED
// Not Found - The specified holdout does not exist or you don't have access to it.
Possible reasons:
Holdout ID does not exist in the specified project
Project ID does not exist or you don't have access to it
Holdout was permanently deleted
Insufficient permissions to view this holdout or its experiments
Note: Returns 404 even if holdout exists but you lack permissions, for security reasons.
{
"detail": "",
"status": 0,
"title": "",
"type": "",
"uuid": ""
}holdout_not_found
// Holdout does not exist
{
"detail": "Holdout not found with id '987'",
"status": 404,
"title": "Holdout not found",
"type": "about:blank"
}project_not_found
// Project does not exist
{
"detail": "Project not found with id '12345'",
"status": 404,
"title": "Project not found",
"type": "about:blank"
}