---
title: List Experiment Versions
description: List Experiment Versions
product: general
token_estimate: 11362
---
# List Experiment Versions

> For AI agents: a documentation index is available at [/llms.txt](/llms.txt). Append `.md` to any page URL for markdown, or send `Accept: text/markdown`.

## List Experiment Versions

**GET** `/console/v1/experiments/{id}/versions`

Full URL: `https://statsigapi.net/console/v1/experiments/{id}/versions`

List Experiment Versions

## Authorizations

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| STATSIG-API-KEY | string | Yes | — | apiKey (header) |

## Path parameters

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| id (path) | string | Yes | — | id |

## Query parameters

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| limit (query) | integer | No | 10 | Results per page Constraints: string, number |
| page (query) | integer | No | 1 | Page number Constraints: string, number |
| startDate (query) | string | No | 2024-01-01 | Only return versions last modified on or after this date. Expected valid date in the form of YYYY-MM-DD |
| endDate (query) | string | No | 2024-01-31 | Only return versions last modified on or before this date, inclusive. Expected valid date in the form of YYYY-MM-DD |

## Response (application/json)

**200** — List Experiment Versions Success

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| message | string | Yes | — | A simple string explaining the result of the operation. |
| data | object[] | Yes | — | — |
| data.reviewSettings | object | No | — | — |
| data.reviewSettings.requiredReview | boolean | Yes | — | — |
| data.reviewSettings.allowedReviewers | object[] | No | — | Constraints: nullable |
| data.reviewSettings.allowedReviewers.id | string | Yes | — | — |
| data.reviewSettings.allowedReviewers.name | string | Yes | — | — |
| data.reviewSettings.allowedReviewers.email | string | Yes | — | — |
| data.activeReview | object | No | — | — |
| data.activeReview.reviewID | string | Yes | — | — |
| data.activeReview.reviewStatus | string | Yes | — | — |
| data.activeReview.description | string | Yes | — | — |
| data.id | string | Yes | — | ID |
| data.name | string | No | — | The display name of the experiment Constraints: min length: 3, max length: 100, pattern: ^[a-zA-Z0-9_\- ]*$ |
| data.idType | string | Yes | — | — |
| data.description | string | Yes | — | A helpful summary of what this experiment does Constraints: max length: 1000 |
| data.lastModifierID | string | Yes | — | ID of the last modifier. Constraints: nullable |
| data.lastModifiedTime | number | Yes | — | Time of the last modification. Constraints: format: double, nullable |
| data.lastModifierEmail | string | Yes | — | Email of the last modifier. Constraints: nullable |
| data.lastModifierName | string | Yes | — | Name of the last modifier. Constraints: nullable |
| data.creatorID | string | No | — | The Statsig ID of the creator of this experiment Constraints: nullable |
| data.createdTime | number | Yes | — | Timestamp when the entity was created. Constraints: format: double |
| data.creatorName | string | Yes | — | Name of the creator. Constraints: nullable |
| data.creatorEmail | string | No | — | The email of the creator of this experiment Constraints: nullable |
| data.tags | string[] | Yes | — | — |
| data.targetApps | oneOf | No | — | Target apps assigned to this experiment Constraints: string, string[] |
| data.holdoutIDs | string[] | No | — | Holdouts applied to this configuration. |
| data.team | string | No | — | The team name associated with the experiment, Enterprise only. Constraints: nullable |
| data.teamID | string | No | — | The team ID associated with the experiment, Enterprise only. Constraints: nullable |
| data.version | number | No | — | Version number Constraints: format: double |
| data.secondaryIDType | string | No | — | The secondary ID type for the experiment used in WHN for ID resolution Constraints: nullable |
| data.identifierMappingMode | string | No | — | The identifier mapping mode for the experiment used in WHN for ID resolution Allowed values: strictOneToOne, firstTouchOneToMany, lastTouchOneToMany |
| data.identityResolutionSource | string | No | — | The identity resolution entity property source for the experiment used in WHN for ID resolution Constraints: nullable |
| data.hypothesis | string | Yes | — | A statement that will be tested by this experiment |
| data.links | object[] | No | — | Links to relevant documentation or resources |
| data.links.url | string | Yes | — | The URL of the link Constraints: format: uri |
| data.links.title | string | No | — | The title of the link |
| data.externalEvents | object[] | No | — | — |
| data.externalEvents.name | string | Yes | — | — |
| data.externalEvents.timestamp | number | Yes | — | — |
| data.groups | object[] | Yes | — | The test groups for your experiment |
| data.groups.name | string | Yes | — | — |
| data.groups.id | string | No | — | Constraints: nullable |
| data.groups.size | number | Yes | — | Constraints: min: 0, max: 100 |
| data.groups.parameterValues | object | Yes | — | A map of parameter name to the value this group serves. Sidecar (Visual Editor) experiments also return `sidecarURLFilters`, `sidecarDisableAutoRun`, `sidecarPrerunScript`, and `sidecarExperimentName` here, copied from the experiment itself on read. Sending them here does nothing; set them as experiment fields instead. |
| data.groups.disabled | boolean | No | — | — |
| data.groups.description | string | No | — | — |
| data.groups.foreignGroupID | string | No | — | — |
| data.groups.highlighted | boolean | No | — | Marks this experiment group as highlighted in analysis views. Highlighted groups are prioritized (shown first) and can be used to filter. |
| data.groups.isControl | boolean | No | — | Whether this group is the experiment's control. Derived from the experiment's `controlGroupID`, so it is always consistent with the `controlGroupID` returned alongside it. Read-only: to change the control group, set `controlGroupID` on the experiment. |
| data.groups.shipped | boolean | No | — | Whether this group is the one that was shipped. Derived from the experiment's `launchedGroupID`, so it is always consistent with the `launchedGroupID` returned alongside it. Read-only. |
| data.groups.images | string[] | No | — | Names of images attached to this group. |
| data.groups.foreignGroupIDVerified | boolean | No | — | Whether `foreignGroupID` has been verified against the external system. Read-only. Constraints: nullable |
| data.controlGroupID | string | No | — | Optional control group ID |
| data.allocation | number | Yes | — | Percent of layer allocated to this experiment Constraints: format: double, min: 0, max: 100 |
| data.userBuckets | number[] | No | — | — |
| data.primaryMetricTags | string[] | No | — | Primary metric tags for the experiment |
| data.secondaryMetricTags | string[] | No | — | Secondary metric tags for the experiment |
| data.primaryMetrics | object[] | Yes | — | — |
| data.primaryMetrics.name | string | Yes | — | The metric name. |
| data.primaryMetrics.type | string | Yes | — | The metric type. |
| data.primaryMetrics.direction | string | No | — | The expected direction for one-sided testing (a feature to only measure metric movements in a single direction) Allowed values: increase, decrease |
| data.primaryMetrics.hypothesizedValue | number | No | — | The comparison value for the one-sample testing (a feature to use a fixed baseline as the control value) |
| data.secondaryMetrics | object[] | Yes | — | — |
| data.secondaryMetrics.name | string | Yes | — | The metric name. |
| data.secondaryMetrics.type | string | Yes | — | The metric type. |
| data.secondaryMetrics.direction | string | No | — | The expected direction for one-sided testing (a feature to only measure metric movements in a single direction) Allowed values: increase, decrease |
| data.secondaryMetrics.hypothesizedValue | number | No | — | The comparison value for the one-sample testing (a feature to use a fixed baseline as the control value) |
| data.otherMetrics | object[] | No | — | Additional metrics you want to investigate or learn from. The usual corrections applied to Primary and Secondary metrics are not applied to these. |
| data.otherMetrics.name | string | Yes | — | The metric name. |
| data.otherMetrics.type | string | Yes | — | The metric type. |
| data.otherMetrics.direction | string | No | — | The expected direction for one-sided testing (a feature to only measure metric movements in a single direction) Allowed values: increase, decrease |
| data.otherMetrics.hypothesizedValue | number | No | — | The comparison value for the one-sample testing (a feature to use a fixed baseline as the control value) |
| data.duration | integer | No | — | How long the experiment is expected to last in days Constraints: format: int64, min: 1 |
| data.targetExposures | integer | No | — | Target exposures for the experiment Constraints: format: int64, min: 1 |
| data.targetingGateID | string | Yes | — | Restrict your experiment to users passing the selected feature gate Constraints: nullable |
| data.sequentialTesting | boolean | No | — | Apply sequential testing? |
| data.bonferroniCorrection | boolean | Yes | — | Is Bonferroni correction applied per variant? |
| data.bonferroniCorrectionPerMetric | boolean | No | — | Is Bonferroni correction applied per metric? |
| data.benjaminiHochbergPerVariant | boolean | No | — | Is Benjamini-Hochberg procedure applied per variant? |
| data.benjaminiHochbergPerMetric | boolean | No | — | Is Benjamini-Hochberg procedure applied per metric? |
| data.benjaminiPrimaryMetricsOnly | boolean | No | — | Is Benjamini-Hochberg procedure applied for primary metrics only? |
| data.defaultConfidenceInterval | string | Yes | — | Default error margin used for results Allowed values: 80, 90, 95, 98, 99 |
| data.defaultRollupWindow | integer | No | — | Default rollup window in days for experiment results. Use -1 for cumulative. Only -1, 1, and 7 allowed for cloud experiments. Constraints: format: int64 |
| data.defaultChanceToBeatThreshold | number | No | — | Default chance-to-beat threshold used for Bayesian results. Constraints: format: double |
| data.bayesianPriors | object[] | No | — | Bayesian prior settings by metric. |
| data.bayesianPriors.metric | object | Yes | — | — |
| data.bayesianPriors.metric.name | string | Yes | — | — |
| data.bayesianPriors.metric.type | string | Yes | — | — |
| data.bayesianPriors.priorMean | number | Yes | — | — |
| data.bayesianPriors.priorStdDev | number | Yes | — | Constraints: min: 0 |
| data.manualQualityScores | object[] | No | — | Up to 10 manually set quality scores for an experiment. The scores and weights will be added to the existing weights and scores, and then weights will be renormalized to 100. This can be set via the Statsig Console API. If targeting a default check, the weight of the check will be updated, but not the status or description. A default score can be removed by setting the weight to 0. The default score identifiers are one of: HYPOTHESIS_LENGTH, BALANCED_EXPOSURE, PRIMARY_METRICS_LENGTH, COMPARISON_CORRECTION, GUARDRAIL_METRIC_TAGS, SUFFICIENT_SAMPLE, POWER_ANALYSIS, SEQUENTIAL_TESTING |
| data.manualQualityScores.criteriaName | oneOf | Yes | — | Constraints: string, string |
| data.manualQualityScores.status | string | Yes | — | Allowed values: PASSED, FAILED, WARNING |
| data.manualQualityScores.criteriaDescription | string | Yes | — | — |
| data.manualQualityScores.score | number | Yes | — | — |
| data.manualQualityScores.weight | number | Yes | — | — |
| data.status | string | Yes | — | The current status of the experiment Allowed values: active, setup, decision_made, abandoned, archived, experiment_stopped, assignment_stopped |
| data.launchedGroupID | string | No | — | ID of the launched group, null otherwise Constraints: nullable |
| data.assignmentSourceName | string | No | — | — |
| data.assignmentSourceExperimentName | string | No | — | Name of the source experiment for assignment |
| data.isAnalysisOnly | boolean | No | — | — |
| data.allocationDuration | integer | No | — | Warehouse Native Only - Allocation duration in days Constraints: format: int64, nullable, min: 1 |
| data.cohortedAnalysisDuration | integer | No | — | Warehouse Native Only - Cohorted analysis duration in days Constraints: format: int64, min: 1 |
| data.cohortedMetricsMatureAfterEnd | boolean | No | — | Warehouse Native Only - Allow cohort metrics to mature after experiment end |
| data.cohortWaitUntilEndToInclude | boolean | No | — | Warehouse Native Only - Whether to filter to units whose experiment cohort analysis duration is complete, if cohortedAnalysisDuration exists |
| data.fixedAnalysisDuration | integer | No | — | Fixed analysis duration in days Constraints: format: int64, min: 1 |
| data.scheduledReloadHour | integer | No | — | Warehouse Native only - UTC hour at which to run scheduled pulse loads Constraints: format: int64, nullable, min: 0, max: 23 |
| data.scheduledReloadType | string | No | — | Warehouse Native only - reload type for scheduled reloads Allowed values: full, incremental |
| data.scheduledReloadDays | integer[] | No | — | Warehouse Native only - days on which to run scheduled reloads from 0 to 6, 0 meaning Sunday. Null to run reloads on all days. Constraints: nullable |
| data.turboMode | boolean | No | — | Warehouse Native only - whether to run scheduled reloads with Turbo mode. |
| data.autoLoadToplineImpact | boolean | No | — | Warehouse Native only - whether to automatically run topline and projected launch impact calculations when reloading experiments. |
| data.analysisEndTime | string | No | — | — |
| data.assignmentSourceFilters | object[] | No | — | Array of criteria for filtering assignment sources. |
| data.assignmentSourceFilters.column | string | No | — | Column to filter on. |
| data.assignmentSourceFilters.condition | string | Yes | — | Allowed values: in, not_in, =, >, <, >=, <=, is_null, non_null, contains, not_contains, sql_filter, starts_with, ends_with, after_exposure, before_exposure, is_true, is_false |
| data.assignmentSourceFilters.values | string[] | No | — | Optional array of values for the criterion to match against. |
| data.analyticsType | string | No | — | Constraints: nullable |
| data.defaultSPRTPowerParam | number | No | — | Constraints: format: double |
| data.defaultSPRTMDE | number | No | — | Constraints: format: double |
| data.sprtBaselineMode | string | No | — | Allowed values: manual, in_experiment_control |
| data.sprtMDESettings | object[] | No | — | — |
| data.sprtMDESettings.metricKey | string | Yes | — | — |
| data.sprtMDESettings.groupSettings | object[] | Yes | — | — |
| data.sprtMDESettings.groupSettings.groupKey | string | Yes | — | — |
| data.sprtMDESettings.groupSettings.mde | number | Yes | — | — |
| data.sprtMDESettings.groupSettings.mean | number | No | — | — |
| data.sprtMDESettings.groupSettings.stdDev | number | No | — | — |
| data.isSidecar | boolean | No | — | Whether this is a Statsig Sidecar experiment. `sidecarEditorURL`, `sidecarURLFilters`, `sidecarDisableAutoRun`, and `sidecarPrerunScript` are saved only when this is `true`. |
| data.sidecarEditorURL | string | No | — | Sidecar (Visual Editor) only: the URL of the page being modified. The Visual Editor cannot open without it, and it must be an `http` or `https` URL. |
| data.sidecarURLFilters | object[] | No | — | Sidecar (Visual Editor) only: filters on the current URL used to determine whether the experiment should be applied. Each entry looks like `{ "type": "contains", "value": "/pricing" }`, where `type` is `contains`, `equals`, `regex`, or `path`. Put `type` inside each filter object, not alongside the array. |
| data.sidecarURLFilters.type | string | Yes | — | Allowed values: contains, equals, regex, path |
| data.sidecarURLFilters.value | string | Yes | — | — |
| data.sidecarDisableAutoRun | boolean | No | — | Sidecar (Visual Editor) only: whether to disable auto-running the experiment on page load. By default the experiment auto runs. |
| data.sidecarPrerunScript | string | No | — | Sidecar (Visual Editor) only: a script to run before the experiment starts. Send `null` to clear it. Constraints: nullable |
| data.decisionReason | string | Yes | — | Constraints: nullable |
| data.preComputedUserDimensions | object[] | No | — | User dimensions that will be computed for every metric in WHN |
| data.preComputedUserDimensions.propertySource | string | No | — | — |
| data.preComputedUserDimensions.name | string | Yes | — | — |
| data.cureCovariates | object[] | No | — | CURE Covariates to use in this experiment |
| data.cureCovariates.name | string | Yes | — | — |
| data.cureCovariates.type | string | Yes | — | — |
| data.stratifiedSampling | object | No | — | The stratified sampling settings for the experiment Constraints: nullable |
| data.stratifiedSampling.status | string | Yes | — | Allowed values: pending, success, error |
| data.stratifiedSampling.metric | object | No | — | — |
| data.stratifiedSampling.metric.name | string | Yes | — | — |
| data.stratifiedSampling.metric.type | string | No | — | — |
| data.stratifiedSampling.metric.startDate | string | Yes | — | — |
| data.stratifiedSampling.metric.endDate | string | Yes | — | — |
| data.stratifiedSampling.entityPropertySource | object | No | — | — |
| data.stratifiedSampling.entityPropertySource.propertySourceName | string | Yes | — | — |
| data.stratifiedSampling.entityPropertySource.column | string | Yes | — | — |
| data.stratifiedSampling.csv | object | No | — | — |
| data.stratifiedSampling.csv.original | string | Yes | — | — |
| data.stratifiedSampling.csv.identifier | string | Yes | — | — |
| data.stratifiedSampling.useStratifiedSalt | boolean | No | — | Whether successful stratified sampling is currently used for experiment assignment. |
| data.stratifiedSampling.useUnits | boolean | No | — | Whether stratified sampling was configured to use allocated units directly. |
| data.stratifiedSampling.deltaReduction | number | No | — | Observed reduction in delta after running stratified sampling. Constraints: format: double |
| data.stratifiedSampling.spreadReduction | number | No | — | Observed reduction in spread after running stratified sampling. Constraints: format: double |
| data.enabledNonProdEnvironments | string[] | No | — | — |
| data.subtype | string | No | — | Allowed values: conversion, reactivation, retention |
| data.externalExperimentName | string | No | — | — |
| data.salt | string | No | — | The salt used to bucket units for this experiment. Read-only; needed to reproduce assignment outside Statsig. |
| data.scheduledStartTime | number | No | — | Epoch millis at which the experiment is scheduled to start, if a start has been scheduled via `POST /experiments/{id}/schedule_start`. Constraints: format: double |
| data.restartReason | string | No | — | Why the experiment was restarted, if it was restarted as new. Null otherwise. Constraints: nullable |
| data.originalTargetDuration | number | No | — | The originally configured target duration in days, retained when `duration` is later changed. Constraints: format: double, nullable |
| data.wasAutoDisabled | boolean | No | — | Whether the experiment was automatically disabled (e.g. by an auto-disable rule) rather than stopped by a user. |
| data.isPromptExperiment | boolean | No | — | Whether this experiment is a prompt experiment. |
| data.isTemplate | boolean | No | — | Whether this experiment is a template that other experiments can be created from. |
| data.allowOverridesInPulse | boolean | No | — | Whether units assigned by an override are included in results. Affects how results should be interpreted. |
| data.excludePausedExposuresAndEvents | boolean | No | — | Whether exposures and events recorded while the experiment was paused are excluded from analysis. |
| data.defaultImpactMultiplier | number | No | — | Multiplier applied to reported impact figures for this experiment. Constraints: format: double |
| data.bonferroniPrimaryMetricWeight | number | No | — | The share of α allocated to primary metrics for the Bonferroni-per-metric correction. Matches the `bonferroniPrimaryMetricWeight` query parameter on the pulse endpoints, which previously accepted this value without exposing the experiment’s configured one. Constraints: format: double |
| data.defaultSPRTTestDelta | number | No | — | Default SPRT test-group delta. Constraints: format: double |
| data.defaultSPRTControlDelta | number | No | — | Default SPRT control-group delta. Constraints: format: double |
| data.isImpactBankEnabled | boolean | No | — | Whether Impact Bank is enabled for this experiment. |
| data.originalTargetExposures | number | No | — | The originally configured target exposures, retained when `targetExposures` is later changed. Counterpart to `originalTargetDuration`. Constraints: format: double, nullable |
| data.reviewsRequiredLocally | boolean | No | — | Whether a review requirement is set on this experiment itself, as opposed to being inherited from project or team settings. `reviewSettings.requiredReview` reports the effective requirement. |
| data.isHistoricalCloudExperiment | boolean | No | — | Whether this is a pre-existing cloud (non-warehouse-native) experiment inside a warehouse-native project. |
| data.originalScheduledReloadHour | number | No | — | The originally configured scheduled reload hour, retained when `scheduledReloadHour` is later changed. Constraints: format: double, nullable |
| data.layerID | string | Yes | — | Constraints: nullable |
| data.startTime | number | Yes | — | Constraints: format: double, nullable |
| data.endTime | number | Yes | — | Constraints: format: double, nullable |
| data.decisionTime | number | Yes | — | Constraints: format: double, nullable |
| data.healthChecks | object[] | No | — | — |
| data.healthChecks.name | string | Yes | — | — |
| data.healthChecks.description | string | Yes | — | — |
| data.healthChecks.status | string | Yes | — | Allowed values: PASSED, FAILED, WAITING, WARNING, NOT_APPLIED |
| data.healthChecks.metadata | object | No | — | — |
| data.healthChecks.metadata.type | string | Yes | — | — |
| data.healthChecks.metadata.lastPulseLoadTime | number | No | — | — |
| data.healthChecks.metadata.crossoverPercent | number | No | — | — |
| data.healthChecks.metadata.p_value | number | No | — | — |
| data.healthChecks.metadata.assignmentSourceID | string | No | — | — |
| data.healthChecks.metadata.assignmentSourceName | string | No | — | — |
| data.healthChecks.metadata.foreignExperimentID | string | No | — | — |
| data.healthChecks.metadata.deduplication_rate | number | No | — | — |
| data.healthChecks.metadata.deduplication_rates | object[] | No | — | — |
| data.healthChecks.metadata.deduplication_rates.group_id | string | Yes | — | — |
| data.healthChecks.metadata.deduplication_rates.rate | number | Yes | — | — |
| data.healthChecks.metadata.deduplication_rates.group_name | string | Yes | — | — |
| data.healthChecks.metadata.primary_id_type | string | Yes | — | — |
| data.healthChecks.metadata.secondary_id_type | string | No | — | — |
| data.healthChecks.metadata.missingMetrics | string[] | No | — | — |
| data.healthChecks.metadata.metrics | object[] | No | — | — |
| data.healthChecks.metadata.metrics.metric_name | string | Yes | — | — |
| data.healthChecks.metadata.metrics.earliest_date | string | Yes | — | Constraints: format: date-time, nullable |
| data.healthChecks.metadata.metrics.latest_date | string | Yes | — | Constraints: format: date-time, nullable |
| data.healthChecks.metadata.lastUpdatedDs | string | No | — | — |
| data.healthChecks.metadata.groups | object[] | No | — | — |
| data.healthChecks.metadata.groups.groupID | string | Yes | — | — |
| data.healthChecks.metadata.groups.groupName | string | Yes | — | — |
| data.healthChecks.metadata.groups.status | string | Yes | — | Allowed values: PASSED, FAILED, WAITING, WARNING, NOT_APPLIED |
| data.healthChecks.metadata.groups.metrics | object[] | Yes | — | — |
| data.healthChecks.metadata.groups.metrics.metricKey | string | Yes | — | — |
| data.healthChecks.metadata.groups.metrics.metricTitle | string | Yes | — | — |
| data.healthChecks.metadata.groups.metrics.status | string | Yes | — | Allowed values: PASSED, FAILED, WAITING, WARNING, NOT_APPLIED |
| data.healthChecks.metadata.groupBucketInfo | object[] | No | — | — |
| data.healthChecks.metadata.groupBucketInfo.groupID | string | Yes | — | — |
| data.healthChecks.metadata.groupBucketInfo.averageBucketSize | number | Yes | — | — |
| data.healthChecks.type | string | No | — | Allowed values: has_checks, has_valid_unit_type, has_balanced_exposures, has_event_metrics, has_pulse_metrics, assignment_health, has_crossover, has_exposures, has_recent_exposures_for_analyze_whn, user_metrics_exist, deduplication_rate, deduplication_rate_group_level, windowed_metrics_have_outliers, exposures_data_is_behind, pre_experimental_bias_check, segments_of_interest_analysis, has_changed_parameter, metric_history_for_topline_impact, default_value_mismatch, has_data_gaps, has_correct_target_app, has_dag_failures, has_exploration_completed, autotune_has_outcomes, metric_stability, has_balanced_exposures |
| data.healthCheckStatus | string | Yes | — | Overall health check status Allowed values: PASSED, FAILED, WAITING, WARNING, NOT_APPLIED |
| data.experimentType | string | Yes | — | The type of experiment Allowed values: BASE, GEO, SWITCHBACK, PROMPT, SIDECAR, GRID_SEARCH |
| data.isStale | boolean | Yes | — | Whether the experiment is considered stale (e.g. in progress or decision-made and not modified in 30+ days). |
| data.owner | object | No | {"ownerID":"user123","ownerType":"USER","ownerName":"John Doe","ownerEmail":"owner123@test.com"} | Schema for owner data including ID, type, name. Constraints: nullable |
| data.owner.ownerID | string | No | abc123 | ID of the owner |
| data.owner.ownerType | string | No | USER | Type of the owner (e.g., SDK_KEY or USER) |
| data.owner.ownerName | string | No | John Doe | The name of the owner. This field is optional. |
| data.owner.ownerEmail | string | No | — | The email of the owner. This field is optional. |
| data.inlineTargetingRulesJSON | string | No | — | A raw JSON string of the inline targeting rules Constraints: nullable |
| data.inlineTargetingRules | object[] | No | — | A formatted array of the inline targeting rules |
| data.inlineTargetingRules.name | string | Yes | — | The name of this rule. |
| data.inlineTargetingRules.passPercentage | number | Yes | — | Of the users that meet the conditions of this rule, what percent should return true. Constraints: min: 0, max: 100 |
| data.inlineTargetingRules.conditions | object[] | Yes | — | An array of Condition objects. |
| data.inlineTargetingRules.conditions.targetValue | oneOf | No | — | Constraints: nullable, string[], number[], string, number |
| data.inlineTargetingRules.conditions.operator | string | No | — | — |
| data.inlineTargetingRules.conditions.field | string | No | — | Constraints: nullable |
| data.inlineTargetingRules.conditions.customID | string | No | — | Constraints: nullable |
| data.inlineTargetingRules.conditions.type | string | Yes | — | Allowed values: app_version, browser_name, browser_version, country, custom_field, email, environment_tier, fails_gate, fails_segment, ip_address, locale, os_name, os_version, passes_gate, passes_segment, public, time, unit_id, user_id, user_agent, url, javascript, device_model, target_app, experiment_group |
| data.inlineTargetingRules.environments | string[] | No | — | The environments this rule is enabled for. Constraints: nullable |
| data.inlineTargetingRules.id | string | No | — | The Statsig ID of this rule. |
| data.inlineTargetingRules.baseID | string | No | — | The base ID of this rule, i.e. without any added metadata. Will remain the exact same throughout |
| data.inlineTargetingRules.returnValue | object | No | — | The return value of the rule. |
| data.inlineTargetingRules.completedAutomatedRollouts | object[] | No | — | Read-only: Automated rollout phases that have already completed. |
| data.inlineTargetingRules.completedAutomatedRollouts.time | number | No | — | — |
| data.inlineTargetingRules.completedAutomatedRollouts.passPercent | number | Yes | — | — |
| data.inlineTargetingRules.pendingAutomatedRollouts | object[] | No | — | Read-only: Automated rollout phases that are scheduled but not yet complete. |
| data.inlineTargetingRules.pendingAutomatedRollouts.time | number | No | — | — |
| data.inlineTargetingRules.pendingAutomatedRollouts.passPercent | number | Yes | — | — |
| data.qualityScore | object | No | — | The experiment quality score and per-criterion breakdown. Constraints: nullable |
| data.qualityScore.score | number | Yes | — | The normalized experiment quality score. Constraints: format: double |
| data.qualityScore.breakdown | object[] | Yes | — | The per-criterion quality score breakdown. |
| data.qualityScore.breakdown.criterion | string | Yes | — | The quality score criterion name. |
| data.qualityScore.breakdown.status | string | Yes | — | The quality score status for the criterion. Constraints: nullable Allowed values: PASSED, FAILED, WAITING, WARNING, NOT_APPLIED |
| data.qualityScore.breakdown.passingDescription | string | Yes | — | The passing description for the criterion. |
| data.qualityScore.breakdown.score | number | Yes | — | The normalized score contribution for this criterion. |
| data.qualityScore.breakdown.weight | number | Yes | — | The normalized weight for this criterion. |
| data.summarySections | object[] | No | — | Constraints: nullable |
| data.summarySections.name | string | Yes | — | — |
| data.summarySections.content | string | Yes | — | Constraints: nullable |
| data.permalink | string | Yes | — | A permalink to this experiment in the Statsig Console. Constraints: format: uri |
| data.shipWithHoldout | object | No | — | Present when the experiment has been shipped with a holdback group via make_decision (i.e. the winning variant is live for most users but a control slice is held back for ongoing measurement). Absent for experiments that have not been shipped, or that were shipped fully without a holdback. |
| data.shipWithHoldout.holdoutPercent | integer | Yes | 10 | Integer percentage of users held back when the experiment was shipped with holdback. Each non-shipped group receives this percentage of traffic and the shipped group receives the remainder. Constraints: format: int64 |
| data.shipWithHoldout.shippedGroupID | string | Yes | — | ID of the group that was shipped (i.e. the winning variant). |
| data.shipWithHoldout.shippedGroupName | string | Yes | — | Name of the group that was shipped. |
| data.shipWithHoldout.shippedWithHoldoutTime | number | No | — | Unix timestamp (ms) at which the experiment was shipped with holdback. Constraints: format: double |
| data.shipWithHoldout.expectedDuration | number | No | — | Expected duration of the holdback period in days, if specified when shipping. Constraints: format: double |
| data.powerAnalyses | object[] | Yes | — | The power analyses linked to this experiment. Empty when no power analysis is linked. |
| data.powerAnalyses.id | string | Yes | — | The ID of the linked power analysis report. |
| data.powerAnalyses.name | string | Yes | — | The name of the linked power analysis report. Constraints: nullable |
| data.powerAnalyses.status | string | Yes | — | The status of the linked power analysis report. Allowed values: pending, failed, ready, expired |
| data.powerAnalyses.isPrimary | boolean | Yes | — | Whether this is the experiment's primary attached power analysis report. |
| pagination | object | Yes | — | Pagination metadata for checking if there is next page for example. |
| pagination.itemsPerPage | number | Yes | — | Constraints: format: double |
| pagination.pageNumber | number | Yes | — | Constraints: format: double |
| pagination.nextPage | string | Yes | — | Constraints: nullable |
| pagination.previousPage | string | Yes | — | Constraints: nullable |
| pagination.totalItems | number | No | — | Constraints: format: double |
| pagination.all | string | No | — | — |

```json
{
  "message": "string",
  "data": [
    {
      "reviewSettings": {
        "requiredReview": true,
        "allowedReviewers": [
          {
            "id": "string",
            "name": "string",
            "email": "string"
          }
        ]
      },
      "activeReview": {
        "reviewID": "string",
        "reviewStatus": "string",
        "description": "string"
      },
      "id": "string",
      "name": "string",
      "idType": "string",
      "description": "string",
      "lastModifierID": "string",
      "lastModifiedTime": 0,
      "lastModifierEmail": "string",
      "lastModifierName": "string",
      "creatorID": "string",
      "createdTime": 0,
      "creatorName": "string",
      "creatorEmail": "string",
      "tags": [
        "string"
      ],
      "targetApps": {},
      "holdoutIDs": [
        "string"
      ],
      "team": "string",
      "teamID": "string",
      "version": 0,
      "secondaryIDType": "string",
      "identifierMappingMode": "strictOneToOne",
      "identityResolutionSource": "string",
      "hypothesis": "string",
      "links": [
        {
          "url": "https://example.com",
          "title": "string"
        }
      ],
      "externalEvents": [
        {
          "name": "string",
          "timestamp": 0
        }
      ],
      "groups": [
        {
          "name": "string",
          "id": "string",
          "size": 0,
          "parameterValues": {},
          "disabled": true,
          "description": "string",
          "foreignGroupID": "string",
          "highlighted": true,
          "isControl": true,
          "shipped": true,
          "images": [
            "string"
          ],
          "foreignGroupIDVerified": true
        }
      ],
      "controlGroupID": "string",
      "allocation": 0,
      "userBuckets": [
        0
      ],
      "primaryMetricTags": [
        "string"
      ],
      "secondaryMetricTags": [
        "string"
      ],
      "primaryMetrics": [
        {
          "name": "string",
          "type": "string",
          "direction": "increase",
          "hypothesizedValue": 0
        }
      ],
      "secondaryMetrics": [
        {
          "name": "string",
          "type": "string",
          "direction": "increase",
          "hypothesizedValue": 0
        }
      ],
      "otherMetrics": [
        {
          "name": "string",
          "type": "string",
          "direction": "increase",
          "hypothesizedValue": 0
        }
      ],
      "duration": 1,
      "targetExposures": 1,
      "targetingGateID": "string",
      "sequentialTesting": true,
      "bonferroniCorrection": true,
      "bonferroniCorrectionPerMetric": true,
      "benjaminiHochbergPerVariant": true,
      "benjaminiHochbergPerMetric": true,
      "benjaminiPrimaryMetricsOnly": true,
      "defaultConfidenceInterval": "80",
      "defaultRollupWindow": 0,
      "defaultChanceToBeatThreshold": 0,
      "bayesianPriors": [
        {
          "metric": {
            "name": "string",
            "type": "string"
          },
          "priorMean": 0,
          "priorStdDev": 0
        }
      ],
      "manualQualityScores": [
        {
          "criteriaName": {},
          "status": "PASSED",
          "criteriaDescription": "string",
          "score": 0,
          "weight": 0
        }
      ],
      "status": "active",
      "launchedGroupID": "string",
      "assignmentSourceName": "string",
      "assignmentSourceExperimentName": "string",
      "isAnalysisOnly": true,
      "allocationDuration": 1,
      "cohortedAnalysisDuration": 1,
      "cohortedMetricsMatureAfterEnd": true,
      "cohortWaitUntilEndToInclude": true,
      "fixedAnalysisDuration": 1,
      "scheduledReloadHour": 0,
      "scheduledReloadType": "full",
      "scheduledReloadDays": [
        0
      ],
      "turboMode": true,
      "autoLoadToplineImpact": true,
      "analysisEndTime": "string",
      "assignmentSourceFilters": [
        {
          "column": "string",
          "condition": "in",
          "values": [
            "string"
          ]
        }
      ],
      "analyticsType": "string",
      "defaultSPRTPowerParam": 0,
      "defaultSPRTMDE": 0,
      "sprtBaselineMode": "manual",
      "sprtMDESettings": [
        {
          "metricKey": "string",
          "groupSettings": [
            {
              "groupKey": "string",
              "mde": 0,
              "mean": 0,
              "stdDev": 0
            }
          ]
        }
      ],
      "isSidecar": true,
      "sidecarEditorURL": "string",
      "sidecarURLFilters": [
        {
          "type": "contains",
          "value": "string"
        }
      ],
      "sidecarDisableAutoRun": true,
      "sidecarPrerunScript": "string",
      "decisionReason": "string",
      "preComputedUserDimensions": [
        {
          "propertySource": "string",
          "name": "string"
        }
      ],
      "cureCovariates": [
        {
          "name": "string",
          "type": "string"
        }
      ],
      "stratifiedSampling": {
        "status": "pending",
        "metric": {
          "name": "string",
          "type": "string",
          "startDate": "string",
          "endDate": "string"
        },
        "entityPropertySource": {
          "propertySourceName": "string",
          "column": "string"
        },
        "csv": {
          "original": "string",
          "identifier": "string"
        },
        "useStratifiedSalt": true,
        "useUnits": true,
        "deltaReduction": 0,
        "spreadReduction": 0
      },
      "enabledNonProdEnvironments": [
        "string"
      ],
      "subtype": "conversion",
      "externalExperimentName": "string",
      "salt": "string",
      "scheduledStartTime": 0,
      "restartReason": "string",
      "originalTargetDuration": 0,
      "wasAutoDisabled": true,
      "isPromptExperiment": true,
      "isTemplate": true,
      "allowOverridesInPulse": true,
      "excludePausedExposuresAndEvents": true,
      "defaultImpactMultiplier": 0,
      "bonferroniPrimaryMetricWeight": 0,
      "defaultSPRTTestDelta": 0,
      "defaultSPRTControlDelta": 0,
      "isImpactBankEnabled": true,
      "originalTargetExposures": 0,
      "reviewsRequiredLocally": true,
      "isHistoricalCloudExperiment": true,
      "originalScheduledReloadHour": 0,
      "layerID": "string",
      "startTime": 0,
      "endTime": 0,
      "decisionTime": 0,
      "healthChecks": [
        {
          "name": "string",
          "description": "string",
          "status": "PASSED",
          "metadata": {
            "type": "string",
            "lastPulseLoadTime": 0,
            "crossoverPercent": 0,
            "p_value": 0,
            "assignmentSourceID": "string",
            "assignmentSourceName": "string",
            "foreignExperimentID": "string",
            "deduplication_rate": 0,
            "deduplication_rates": [
              {
                "group_id": "string",
                "rate": 0,
                "group_name": "string"
              }
            ],
            "primary_id_type": "string",
            "secondary_id_type": "string",
            "missingMetrics": [
              "string"
            ],
            "metrics": [
              {
                "metric_name": "string",
                "earliest_date": "2024-01-01T00:00:00Z",
                "latest_date": "2024-01-01T00:00:00Z"
              }
            ],
            "lastUpdatedDs": "string",
            "groups": [
              {
                "groupID": "string",
                "groupName": "string",
                "status": "PASSED",
                "metrics": [
                  null
                ]
              }
            ],
            "groupBucketInfo": [
              {
                "groupID": "string",
                "averageBucketSize": 0
              }
            ]
          },
          "type": "has_checks"
        }
      ],
      "healthCheckStatus": "PASSED",
      "experimentType": "BASE",
      "isStale": true,
      "owner": {
        "ownerID": "user123",
        "ownerType": "USER",
        "ownerName": "John Doe",
        "ownerEmail": "owner123@test.com"
      },
      "inlineTargetingRulesJSON": "string",
      "inlineTargetingRules": [
        {
          "name": "string",
          "passPercentage": 0,
          "conditions": [
            {
              "targetValue": {},
              "operator": "string",
              "field": "string",
              "customID": "string",
              "type": "app_version"
            }
          ],
          "environments": [
            "string"
          ],
          "id": "string",
          "baseID": "string",
          "returnValue": {},
          "completedAutomatedRollouts": [
            {
              "time": 0,
              "passPercent": 0
            }
          ],
          "pendingAutomatedRollouts": [
            {
              "time": 0,
              "passPercent": 0
            }
          ]
        }
      ],
      "qualityScore": {
        "score": 0,
        "breakdown": [
          {
            "criterion": "string",
            "status": "PASSED",
            "passingDescription": "string",
            "score": 0,
            "weight": 0
          }
        ]
      },
      "summarySections": [
        {
          "name": "string",
          "content": "string"
        }
      ],
      "permalink": "https://example.com",
      "shipWithHoldout": {
        "holdoutPercent": 10,
        "shippedGroupID": "string",
        "shippedGroupName": "string",
        "shippedWithHoldoutTime": 0,
        "expectedDuration": 0
      },
      "powerAnalyses": [
        {
          "id": "string",
          "name": "string",
          "status": "pending",
          "isPrimary": true
        }
      ]
    }
  ],
  "pagination": {
    "itemsPerPage": 0,
    "pageNumber": 0,
    "nextPage": "string",
    "previousPage": "string",
    "totalItems": 0,
    "all": "string"
  }
}
```

**404** — Not Found. The requested resource could not be found.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| status | integer | Yes | — | Allowed values: 404 |
| message | string | Yes | — | — |

```json
{
  "status": 404,
  "message": "Not Found. The requested resource could not be found."
}
```

## Code samples

### cURL

```bash
curl -X GET "https://statsigapi.net/console/v1/experiments/{id}/versions?limit=10&page=1&startDate=2024-01-01&endDate=2024-01-31" \
  -H "Content-Type: application/json" \
  -H "STATSIG-API-KEY: YOUR_API_KEY"
```

### Python

```python
import requests

response = requests.get(
    "https://statsigapi.net/console/v1/experiments/{id}/versions?limit=10&page=1&startDate=2024-01-01&endDate=2024-01-31",
    headers={
        "Content-Type": "application/json",
        "STATSIG-API-KEY": "YOUR_API_KEY"
    }
)
data = response.json()
```

### JavaScript

```javascript
const response = await fetch("https://statsigapi.net/console/v1/experiments/{id}/versions?limit=10&page=1&startDate=2024-01-01&endDate=2024-01-31", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "STATSIG-API-KEY": "YOUR_API_KEY"
  }
});
const data = await response.json();
```

### PHP

```php
<?php
$ch = curl_init("https://statsigapi.net/console/v1/experiments/{id}/versions?limit=10&page=1&startDate=2024-01-01&endDate=2024-01-31");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
    "STATSIG-API-KEY: YOUR_API_KEY"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
```

### Go

```go
package main

import (
  "bytes"
  "net/http"
)

func main() {
req, _ := http.NewRequest("GET", "https://statsigapi.net/console/v1/experiments/{id}/versions?limit=10&page=1&startDate=2024-01-01&endDate=2024-01-31", nil)
req.Header.Set("Content-Type", "application/json")
req.Header.Set("STATSIG-API-KEY", "YOUR_API_KEY")
  client := &http.Client{}
  resp, _ := client.Do(req)
  defer resp.Body.Close()
}
```

### Java

```java
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("https://statsigapi.net/console/v1/experiments/{id}/versions?limit=10&page=1&startDate=2024-01-01&endDate=2024-01-31"))
      .method("GET", HttpRequest.BodyPublishers.noBody())
.header("Content-Type", "application/json")
      .header("STATSIG-API-KEY", "YOUR_API_KEY")
      .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
```

### Ruby

```ruby
require "net/http"
require "json"

uri = URI("https://statsigapi.net/console/v1/experiments/{id}/versions?limit=10&page=1&startDate=2024-01-01&endDate=2024-01-31")
request = Net::HTTP::Get.new(uri)
request["Content-Type"] = "application/json"
request["STATSIG-API-KEY"] = "YOUR_API_KEY"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
  http.request(request)
end
```

