---
title: "Create Experiment Review"
method: POST
path: "/console/v1/experiments/{id}/reviews"
tags: ["Experiments"]
---

# Create Experiment Review

`POST /console/v1/experiments/{id}/reviews`

## Path parameters

- `id` string, required

## Request body

- CreateExperimentReviewRequestDto — Request body for POST /console/v1/experiments/:id/reviews
  - `type` 'start' | 'stop' | 'pause' | 'restart' | 'abandon' | 'archive' | 'delete' | 'make_decision' | 'rollout' | 'schedule_rollout' | 'reallocate' | 'change_enabled_groups' | 'unarchive' | 'update_owners' | 'update_team' | 'update_settings' | 'update_overrides' | 'update_target_applications' | 'update_allowed_reviewers' | 'update_default_impact_multiplier' | 'scheduled_start' | 'scheduled_start_edit' | 'disable_reviews_locally', required — The kind of experiment change the review proposes.
  - `description` string — Human-readable description of the proposed change. Optional; recorded empty when omitted (e.g. `update_owners`, mirroring the console owner-edit flow, which collects no description).
  - `reviewer_ids` string[] — User IDs to request review from.
  - `reviewer_group_ids` string[] — Reviewer group IDs to request review from.
  - `reason` string — Optional reason recorded with the change, applied when committed (e.g. stop / pause / abandon / decision reason).
  - `winning_group_id` string — For `make_decision`: the group to ship. Required.
  - `remove_targeting` boolean — For `make_decision`: drop targeting on ship (default false).
  - `remove_overrides` boolean — For `make_decision`: drop overrides on ship (default false).
  - `start_date` string — For `start`: optional scheduled start date.
  - `group_id` string — For `rollout` / `schedule_rollout`: the group to roll out. Required.
  - `rollout_percentage` number, double — For `rollout`: the pass percentage to roll the group out to. Required.
  - `clear_phases` boolean — For `rollout`: clear any scheduled rollout phases (default false).
  - `rollout_phases` object[] — For `schedule_rollout`: the ordered rollout phases to schedule. Required.
    - `percentage` number, required — Pass percentage for this phase (0–100).
    - `time` number — Absolute start time of the phase (epoch ms).
    - `time_string` string — Human-readable start time of the phase.
    - `is_complete` boolean — Whether this phase is already complete (default false).
    - `phase_duration_ms` number — Duration of the phase, used for progressive rollouts.
  - `enabled_group_names` string[] — For `change_enabled_groups`: group names to enable.
  - `disabled_group_names` string[] — For `change_enabled_groups`: group names to disable.
  - `owners` object[] — For `update_owners`: the replacement owner set. Required.
    - `owner_id` string, required — ID of the owner (user ID or SDK key ID).
    - `owner_type` 'user' | 'sdk_key' — Kind of owner. Defaults to `user`.
  - `team_id` string, nullable — For `update_team`: the team to assign, or `null` to clear it.
  - `default_impact_multiplier` number, double — For `update_default_impact_multiplier`: the new multiplier. Required.
  - `target_app_ids` string[] — For `update_target_applications`: the full set of target application IDs. Required.
  - `allowed_reviewer_user_ids` string[] — For `update_allowed_reviewers`: the full set of allowed reviewer user IDs.
  - `allowed_reviewer_group_ids` string[] — For `update_allowed_reviewers`: the full set of allowed reviewer group IDs.
  - `start_time` integer — For `scheduled_start`: epoch-ms time to schedule the start. Required.
  - `new_time` integer — For `scheduled_start_edit`: epoch-ms time to reschedule the start to. Required.
  - `overrides` object[] — For `update_overrides`: the full set of gate/segment overrides. Omit to preserve the experiment’s current overrides; send `[]` to clear them.
    - `type` 'gate' | 'segment', required
    - `group_id` string, required
    - `name` string, required
    - `environment` string, nullable
  - `id_overrides` object[] — For `update_overrides`: the full set of ID overrides. Omit to preserve the experiment’s current ID overrides; send `[]` to clear them.
    - `ids` string[], required
    - `group_id` string, required
    - `environment` string, nullable
    - `unit_type` string, nullable
  - `allow_overrides_in_pulse` boolean — For `update_overrides`: whether overridden units are included in Pulse. Omit to preserve the current setting.
  - `settings` object — For `update_settings`: the full experiment settings payload, matching the `PATCH /console/v1/experiments/:id` body. Required for `update_settings`. Fields omitted from the payload fall back to the experiment’s current values.
    - `name` string — The display name of the experiment
    - `description` string, required — A helpful summary of what this experiment does
    - `idType` string, required — The type of ID which the experiment is based on
    - `secondaryIDType` string, nullable — The secondary ID type for the experiment used in WHN for ID resolution
    - `identifierMappingMode` 'strictOneToOne' | 'firstTouchOneToMany' | 'lastTouchOneToMany' — The identifier mapping mode for the experiment used in WHN for ID resolution
    - `identityResolutionSource` string, nullable — The identity resolution entity property source for the experiment used in WHN for ID resolution
    - `hypothesis` string, required — A statement that will be tested by this experiment
    - `links` object[] — Links to relevant documentation or resources
      - `url` string, uri, required — The URL of the link
      - `title` string — The title of the link
    - `externalEvents` object[]
      - `name` string, required
      - `timestamp` number, required
    - `groups` object[], required — The test groups for your experiment
      - `name` string, required
      - `id` string, nullable
      - `size` number, required
      - `parameterValues` object, required — 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.
      - `disabled` boolean
      - `description` string
      - `foreignGroupID` string
      - `highlighted` boolean — Marks this experiment group as highlighted in analysis views. Highlighted groups are prioritized (shown first) and can be used to filter.
    - `controlGroupID` string — Optional control group ID
    - `allocation` number, double, required — Percent of layer allocated to this experiment
    - `userBuckets` number[]
    - `primaryMetricTags` string[] — Primary metric tags for the experiment
    - `secondaryMetricTags` string[] — Secondary metric tags for the experiment
    - `primaryMetrics` object[] — Main metrics needed to evaluate your hypothesis
      - `name` string, required — The metric name.
      - `type` string, required — The metric type.
      - `direction` 'increase' | 'decrease' — The expected direction for one-sided testing (a feature to only measure metric movements in a single direction)
      - `hypothesizedValue` number — The comparison value for the one-sample testing (a feature to use a fixed baseline as the control value)
    - `secondaryMetrics` object[] — Additional metrics to monitor that might impact the analysis or final decision of the experiment
      - `name` string, required — The metric name.
      - `type` string, required — The metric type.
      - `direction` 'increase' | 'decrease' — The expected direction for one-sided testing (a feature to only measure metric movements in a single direction)
      - `hypothesizedValue` number — The comparison value for the one-sample testing (a feature to use a fixed baseline as the control value)
    - `otherMetrics` object[] — Additional metrics you want to investigate or learn from. The usual corrections applied to Primary and Secondary metrics are not applied to these.
      - `name` string, required — The metric name.
      - `type` string, required — The metric type.
      - `direction` 'increase' | 'decrease' — The expected direction for one-sided testing (a feature to only measure metric movements in a single direction)
      - `hypothesizedValue` number — The comparison value for the one-sample testing (a feature to use a fixed baseline as the control value)
    - `targetApps` union — Target apps assigned to this experiment
      - string
      - string[]
    - `tags` string[] — Tags associated with the experiment
    - `duration` integer — How long the experiment is expected to last in days
    - `targetExposures` integer — Target exposures for the experiment
    - `targetingGateID` string, nullable, required — Restrict your experiment to users passing the selected feature gate
    - `sequentialTesting` boolean — Apply sequential testing?
    - `bonferroniCorrection` boolean, required — Is Bonferroni correction applied per variant?
    - `bonferroniCorrectionPerMetric` boolean — Is Bonferroni correction applied per metric?
    - `benjaminiHochbergPerVariant` boolean — Is Benjamini-Hochberg procedure applied per variant?
    - `benjaminiHochbergPerMetric` boolean — Is Benjamini-Hochberg procedure applied per metric?
    - `benjaminiPrimaryMetricsOnly` boolean — Is Benjamini-Hochberg procedure applied for primary metrics only?
    - `defaultConfidenceInterval` '80' | '90' | '95' | '98' | '99', required — Default error margin used for results
    - `defaultRollupWindow` integer — Default rollup window in days for experiment results. Use -1 for cumulative. Only -1, 1, and 7 allowed for cloud experiments.
    - `defaultChanceToBeatThreshold` number, double — Default chance-to-beat threshold used for Bayesian results.
    - `bayesianPriors` object[] — Bayesian prior settings by metric.
      - `metric` object, required
        - `name` string, required
        - `type` string, required
      - `priorMean` number, required
      - `priorStdDev` number, required
    - `manualQualityScores` object[] — 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
      - `criteriaName` union, required
        - 'HYPOTHESIS_LENGTH' | 'BALANCED_EXPOSURE' | 'PRIMARY_METRICS_LENGTH' | 'SECONDARY_METRICS_LENGTH' | 'COMPARISON_CORRECTION' | 'GUARDRAIL_METRIC_TAGS' | 'SUFFICIENT_SAMPLE' | 'POWER_ANALYSIS' | 'SEQUENTIAL_TESTING'
        - string
      - `status` 'PASSED' | 'FAILED' | 'WARNING', required
      - `criteriaDescription` string, required
      - `score` number, required
      - `weight` number, required
    - `status` 'active' | 'setup' | 'decision_made' | 'abandoned' | 'archived' | 'experiment_stopped' | 'assignment_stopped', required — The current status of the experiment
    - `launchedGroupID` string, nullable — ID of the launched group, null otherwise
    - `assignmentSourceName` string — Source name of the assignment
    - `assignmentSourceExperimentName` string — Name of the source experiment for assignment
    - `creatorID` string, nullable — The Statsig ID of the creator of this experiment
    - `creatorEmail` string, nullable — The email of the creator of this experiment
    - `isAnalysisOnly` boolean, nullable — For Warehouse Native
    - `team` string, nullable — The team name associated with the experiment, Enterprise only.
    - `teamID` string, nullable — The team ID associated with the experiment, Enterprise only.
    - `allocationDuration` integer, nullable — Warehouse Native Only - Allocation duration in days
    - `cohortedAnalysisDuration` integer — Warehouse Native Only - Cohorted analysis duration in days
    - `cohortedMetricsMatureAfterEnd` boolean — Warehouse Native Only - Allow cohort metrics to mature after experiment end
    - `cohortWaitUntilEndToInclude` boolean — Warehouse Native Only - Whether to filter to units whose experiment cohort analysis duration is complete, if cohortedAnalysisDuration exists
    - `fixedAnalysisDuration` integer — Fixed analysis duration in days
    - `scheduledReloadHour` integer, nullable — Warehouse Native only - UTC hour at which to run scheduled pulse loads
    - `scheduledReloadType` 'full' | 'incremental' — Warehouse Native only - reload type for scheduled reloads
    - `scheduledReloadDays` integer[], nullable — Warehouse Native only - days on which to run scheduled reloads from 0 to 6, 0 meaning Sunday. Null to run reloads on all days.
    - `turboMode` boolean — Warehouse Native only - whether to run scheduled reloads with Turbo mode.
    - `autoLoadToplineImpact` boolean — Warehouse Native only - whether to automatically run topline and projected launch impact calculations when reloading experiments.
    - `analysisEndTime` string — Warehouse Native only - end time for analysis only experiments
    - `assignmentSourceFilters` object[] — Array of criteria for filtering assignment sources.
      - `column` string — Column to filter on.
      - `condition` 'in' | 'not_in' | '=' | '>' | '<' | '>=' | '<=' | 'is_null' | 'non_null' | 'contains' | 'not_contains' | 'sql_filter' | 'starts_with' | 'ends_with' | 'after_exposure' | 'before_exposure' | 'is_true' | 'is_false', required
      - `values` string[] — Optional array of values for the criterion to match against.
    - `analyticsType` 'frequentist' | 'bayesian' | 'sprt' — The mode of analysis for the experiment, e.g frequentist, bayesian, sprt
    - `defaultSPRTPowerParam` number, double — SPRT power parameter percentage used as the default for experiment analysis.
    - `defaultSPRTMDE` number, double — Default MDE value for every metric if one isn't provided. Only used in manual mode.
    - `sprtBaselineMode` 'manual' | 'in_experiment_control' — In manual mode, mde/mean/stdDev must be provided for every metric in the experiment. In in_experiment_control, only the mde is needed for every metric, or the defaultSPRTMDE field must be passed.
    - `sprtMDESettings` object[] — The SPRT values for use in the experiment.
      - `metricKey` string, required
      - `groupSettings` object[], required
        - `groupKey` string, required
        - `mde` number, required
        - `mean` number
        - `stdDev` number
    - `isSidecar` boolean — Whether this is a Statsig Sidecar experiment. `sidecarEditorURL`, `sidecarURLFilters`, `sidecarDisableAutoRun`, and `sidecarPrerunScript` are saved only when this is `true`.
    - `sidecarEditorURL` string — 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.
    - `sidecarURLFilters` object[] — 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.
      - `type` 'contains' | 'equals' | 'regex' | 'path', required
      - `value` string, required
    - `sidecarDisableAutoRun` boolean — Sidecar (Visual Editor) only: whether to disable auto-running the experiment on page load. By default the experiment auto runs.
    - `sidecarPrerunScript` string, nullable — Sidecar (Visual Editor) only: a script to run before the experiment starts. Send `null` to clear it.
    - `decisionReason` string — Experiment notes reported after experiment completes
    - `preComputedUserDimensions` object[] — User dimensions that will be computed for every metric in WHN
      - `propertySource` string
      - `name` string, required
    - `cureCovariates` object[] — CURE Covariates to use in this experiment
      - `name` string, required
      - `type` string, required
    - `stratifiedSampling` object, nullable — The stratified sampling settings for the experiment
      - `status` 'pending' | 'success' | 'error', required
      - `metric` object
        - `name` string, required
        - `type` string
        - `startDate` string, required
        - `endDate` string, required
      - `entityPropertySource` object
        - `propertySourceName` string, required
        - `column` string, required
      - `csv` object
        - `original` string, required
        - `identifier` string, required
      - `useStratifiedSalt` boolean — Whether successful stratified sampling is currently used for experiment assignment.
      - `useUnits` boolean — Whether stratified sampling was configured to use allocated units directly.
      - `deltaReduction` number, double — Observed reduction in delta after running stratified sampling.
      - `spreadReduction` number, double — Observed reduction in spread after running stratified sampling.
    - `enabledNonProdEnvironments` string[]

## Response `201`

The created experiment review.

- object
  - `message` string, required — A simple string explaining the result of the operation.
  - `data` object, required — A single result.
    - `review_id` string, required — Unique ID of the review.
    - `status` 'pending' | 'accepted' | 'rejected' | 'committed' | 'changes_requested' | 'pending_webhook_validation' | 'failed_webhook_validation' | 'approved_webhook_validation', required — Lifecycle status of the review.
    - `type` 'start' | 'stop' | 'pause' | 'restart' | 'abandon' | 'archive' | 'delete' | 'make_decision' | 'update_settings' | 'update_overrides' | 'update_target_applications' | 'update_allowed_reviewers' | 'update_default_impact_multiplier' | 'scheduled_start' | 'scheduled_start_edit' | 'disable_reviews_locally' | 'rollout' | 'schedule_rollout' | 'reallocate' | 'change_enabled_groups' | 'unarchive' | 'update_owners' | 'update_team', required — Kind of change the review proposes.
    - `author` object, required — The user who created the review.
      - `id` string, required
      - `email` string, nullable, required
    - `reviewers` object[], required — Requested reviewers (users and groups).
      - `id` string, required
      - `kind` 'user' | 'group', required
    - `description` string, required — Human-readable description of the proposed change.
    - `created_at` string, required — ISO-8601 timestamp of when the review was created.

---

[API](https://skmtc.net/statsig/apis/console-api.md) · [All operations](https://skmtc.net/statsig/apis/console-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/statsig/console-api/versions/3189f450c93b/schema)
