Create Experiment Review
Create Experiment Review
https://statsigapi.net/console/v1/experiments/{id}/reviewsAuthorizations
STATSIG-API-KEYstringrequiredapiKey (header)
Path parameters
idstringrequiredBody
application/jsontypestringrequiredThe kind of experiment change the review proposes.
startstoppauserestartabandonarchivedeletemake_decisionrolloutschedule_rolloutreallocatechange_enabled_groupsunarchiveupdate_ownersupdate_teamupdate_settingsupdate_overridesupdate_target_applicationsupdate_allowed_reviewersupdate_default_impact_multiplierscheduled_startscheduled_start_editdisable_reviews_locallydescriptionstringHuman-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).
max length: 2000reviewer_idsstring[]User IDs to request review from.
[]reviewer_group_idsstring[]Reviewer group IDs to request review from.
[]reasonstringOptional reason recorded with the change, applied when committed (e.g. stop / pause / abandon / decision reason).
max length: 2000winning_group_idstringFor make_decision: the group to ship. Required.
remove_targetingbooleanFor make_decision: drop targeting on ship (default false).
remove_overridesbooleanFor make_decision: drop overrides on ship (default false).
start_datestringFor start: optional scheduled start date.
group_idstringFor rollout / schedule_rollout: the group to roll out. Required.
rollout_percentagenumberFor rollout: the pass percentage to roll the group out to. Required.
format: doublemin: 0max: 100clear_phasesbooleanFor rollout: clear any scheduled rollout phases (default false).
rollout_phasesobject[]For schedule_rollout: the ordered rollout phases to schedule. Required.
Show child attributes
percentagenumberrequiredPass percentage for this phase (0–100).
min: 0max: 100timenumberAbsolute start time of the phase (epoch ms).
time_stringstringHuman-readable start time of the phase.
is_completebooleanWhether this phase is already complete (default false).
phase_duration_msnumberDuration of the phase, used for progressive rollouts.
enabled_group_namesstring[]For change_enabled_groups: group names to enable.
disabled_group_namesstring[]For change_enabled_groups: group names to disable.
ownersobject[]For update_owners: the replacement owner set. Required.
Show child attributes
owner_idstringrequiredID of the owner (user ID or SDK key ID).
min length: 1owner_typestringKind of owner. Defaults to user.
usersdk_keyteam_idstringFor update_team: the team to assign, or null to clear it.
nullablemin length: 1default_impact_multipliernumberFor update_default_impact_multiplier: the new multiplier. Required.
format: doubletarget_app_idsstring[]For update_target_applications: the full set of target application IDs. Required.
allowed_reviewer_user_idsstring[]For update_allowed_reviewers: the full set of allowed reviewer user IDs.
allowed_reviewer_group_idsstring[]For update_allowed_reviewers: the full set of allowed reviewer group IDs.
start_timeintegerFor scheduled_start: epoch-ms time to schedule the start. Required.
format: int64new_timeintegerFor scheduled_start_edit: epoch-ms time to reschedule the start to. Required.
format: int64overridesobject[]For update_overrides: the full set of gate/segment overrides. Omit to preserve the experiment’s current overrides; send [] to clear them.
Show child attributes
typestringrequiredgatesegmentgroup_idstringrequirednamestringrequiredenvironmentstringnullableid_overridesobject[]For update_overrides: the full set of ID overrides. Omit to preserve the experiment’s current ID overrides; send [] to clear them.
Show child attributes
idsstring[]requiredgroup_idstringrequiredenvironmentstringnullableunit_typestringnullableallow_overrides_in_pulsebooleanFor update_overrides: whether overridden units are included in Pulse. Omit to preserve the current setting.
settingsobjectFor 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.
Show child attributes
namestringThe display name of the experiment
min length: 3max length: 100pattern: ^[a-zA-Z0-9_\- ]*$descriptionstringrequiredA helpful summary of what this experiment does
max length: 1000idTypestringrequiredThe type of ID which the experiment is based on
secondaryIDTypestringThe secondary ID type for the experiment used in WHN for ID resolution
nullableidentifierMappingModestringThe identifier mapping mode for the experiment used in WHN for ID resolution
strictOneToOnefirstTouchOneToManylastTouchOneToManyidentityResolutionSourcestringThe identity resolution entity property source for the experiment used in WHN for ID resolution
nullablehypothesisstringrequiredA statement that will be tested by this experiment
linksobject[]Links to relevant documentation or resources
urlstringrequiredThe URL of the link
format: urititlestringThe title of the link
externalEventsobject[]namestringrequiredtimestampnumberrequiredgroupsobject[]requiredThe test groups for your experiment
namestringrequiredidstringnullablesizenumberrequiredmin: 0max: 100parameterValuesobjectrequiredA 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.
disabledbooleandescriptionstringforeignGroupIDstringhighlightedbooleanMarks this experiment group as highlighted in analysis views. Highlighted groups are prioritized (shown first) and can be used to filter.
controlGroupIDstringOptional control group ID
allocationnumberrequiredPercent of layer allocated to this experiment
format: doublemin: 0max: 100userBucketsnumber[]primaryMetricTagsstring[]Primary metric tags for the experiment
secondaryMetricTagsstring[]Secondary metric tags for the experiment
primaryMetricsobject[]Main metrics needed to evaluate your hypothesis
namestringrequiredThe metric name.
typestringrequiredThe metric type.
directionstringThe expected direction for one-sided testing (a feature to only measure metric movements in a single direction)
increasedecreasehypothesizedValuenumberThe comparison value for the one-sample testing (a feature to use a fixed baseline as the control value)
secondaryMetricsobject[]Additional metrics to monitor that might impact the analysis or final decision of the experiment
namestringrequiredThe metric name.
typestringrequiredThe metric type.
directionstringThe expected direction for one-sided testing (a feature to only measure metric movements in a single direction)
increasedecreasehypothesizedValuenumberThe comparison value for the one-sample testing (a feature to use a fixed baseline as the control value)
otherMetricsobject[]Additional metrics you want to investigate or learn from. The usual corrections applied to Primary and Secondary metrics are not applied to these.
namestringrequiredThe metric name.
typestringrequiredThe metric type.
directionstringThe expected direction for one-sided testing (a feature to only measure metric movements in a single direction)
increasedecreasehypothesizedValuenumberThe comparison value for the one-sample testing (a feature to use a fixed baseline as the control value)
targetAppsoneOfTarget apps assigned to this experiment
stringstring[]tagsstring[]Tags associated with the experiment
durationintegerHow long the experiment is expected to last in days
format: int64min: 1targetExposuresintegerTarget exposures for the experiment
format: int64min: 1targetingGateIDstringrequiredRestrict your experiment to users passing the selected feature gate
nullablesequentialTestingbooleanApply sequential testing?
bonferroniCorrectionbooleanrequiredIs Bonferroni correction applied per variant?
bonferroniCorrectionPerMetricbooleanIs Bonferroni correction applied per metric?
benjaminiHochbergPerVariantbooleanIs Benjamini-Hochberg procedure applied per variant?
benjaminiHochbergPerMetricbooleanIs Benjamini-Hochberg procedure applied per metric?
benjaminiPrimaryMetricsOnlybooleanIs Benjamini-Hochberg procedure applied for primary metrics only?
defaultConfidenceIntervalstringrequiredDefault error margin used for results
8090959899defaultRollupWindowintegerDefault rollup window in days for experiment results. Use -1 for cumulative. Only -1, 1, and 7 allowed for cloud experiments.
format: int64defaultChanceToBeatThresholdnumberDefault chance-to-beat threshold used for Bayesian results.
format: doublebayesianPriorsobject[]Bayesian prior settings by metric.
metricobjectrequirednamestringrequiredtypestringrequiredpriorMeannumberrequiredpriorStdDevnumberrequiredmin: 0manualQualityScoresobject[]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
criteriaNameoneOfrequiredstringstringstatusstringrequiredPASSEDFAILEDWARNINGcriteriaDescriptionstringrequiredscorenumberrequiredweightnumberrequiredstatusstringrequiredThe current status of the experiment
activesetupdecision_madeabandonedarchivedexperiment_stoppedassignment_stoppedlaunchedGroupIDstringID of the launched group, null otherwise
nullableassignmentSourceNamestringSource name of the assignment
assignmentSourceExperimentNamestringName of the source experiment for assignment
creatorIDstringThe Statsig ID of the creator of this experiment
nullablecreatorEmailstringThe email of the creator of this experiment
nullableisAnalysisOnlybooleanFor Warehouse Native
nullableteamstringThe team name associated with the experiment, Enterprise only.
nullableteamIDstringThe team ID associated with the experiment, Enterprise only.
nullableallocationDurationintegerWarehouse Native Only - Allocation duration in days
format: int64nullablemin: 1cohortedAnalysisDurationintegerWarehouse Native Only - Cohorted analysis duration in days
format: int64min: 1cohortedMetricsMatureAfterEndbooleanWarehouse Native Only - Allow cohort metrics to mature after experiment end
cohortWaitUntilEndToIncludebooleanWarehouse Native Only - Whether to filter to units whose experiment cohort analysis duration is complete, if cohortedAnalysisDuration exists
fixedAnalysisDurationintegerFixed analysis duration in days
format: int64min: 1scheduledReloadHourintegerWarehouse Native only - UTC hour at which to run scheduled pulse loads
format: int64nullablemin: 0max: 23scheduledReloadTypestringWarehouse Native only - reload type for scheduled reloads
fullincrementalscheduledReloadDaysinteger[]Warehouse Native only - days on which to run scheduled reloads from 0 to 6, 0 meaning Sunday. Null to run reloads on all days.
nullableturboModebooleanWarehouse Native only - whether to run scheduled reloads with Turbo mode.
autoLoadToplineImpactbooleanWarehouse Native only - whether to automatically run topline and projected launch impact calculations when reloading experiments.
analysisEndTimestringWarehouse Native only - end time for analysis only experiments
assignmentSourceFiltersobject[]Array of criteria for filtering assignment sources.
columnstringColumn to filter on.
conditionstringrequiredinnot_in=><>=<=is_nullnon_nullcontainsnot_containssql_filterstarts_withends_withafter_exposurebefore_exposureis_trueis_falsevaluesstring[]Optional array of values for the criterion to match against.
analyticsTypestringThe mode of analysis for the experiment, e.g frequentist, bayesian, sprt
frequentistbayesiansprtdefaultSPRTPowerParamnumberSPRT power parameter percentage used as the default for experiment analysis.
format: doubledefaultSPRTMDEnumberDefault MDE value for every metric if one isn't provided. Only used in manual mode.
format: doublesprtBaselineModestringIn 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.
manualin_experiment_controlsprtMDESettingsobject[]The SPRT values for use in the experiment.
metricKeystringrequiredgroupSettingsobject[]requiredgroupKeystringrequiredmdenumberrequiredmeannumberstdDevnumberisSidecarbooleanWhether this is a Statsig Sidecar experiment. sidecarEditorURL, sidecarURLFilters, sidecarDisableAutoRun, and sidecarPrerunScript are saved only when this is true.
sidecarEditorURLstringSidecar (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.
sidecarURLFiltersobject[]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.
typestringrequiredcontainsequalsregexpathvaluestringrequiredsidecarDisableAutoRunbooleanSidecar (Visual Editor) only: whether to disable auto-running the experiment on page load. By default the experiment auto runs.
sidecarPrerunScriptstringSidecar (Visual Editor) only: a script to run before the experiment starts. Send null to clear it.
nullabledecisionReasonstringExperiment notes reported after experiment completes
preComputedUserDimensionsobject[]User dimensions that will be computed for every metric in WHN
propertySourcestringnamestringrequiredcureCovariatesobject[]CURE Covariates to use in this experiment
namestringrequiredtypestringrequiredstratifiedSamplingobjectThe stratified sampling settings for the experiment
nullablestatusstringrequiredpendingsuccesserrormetricobjectnamestringrequiredtypestringstartDatestringrequiredendDatestringrequiredentityPropertySourceobjectpropertySourceNamestringrequiredcolumnstringrequiredcsvobjectoriginalstringrequiredidentifierstringrequireduseStratifiedSaltbooleanWhether successful stratified sampling is currently used for experiment assignment.
useUnitsbooleanWhether stratified sampling was configured to use allocated units directly.
deltaReductionnumberObserved reduction in delta after running stratified sampling.
format: doublespreadReductionnumberObserved reduction in spread after running stratified sampling.
format: doubleenabledNonProdEnvironmentsstring[]Response
application/jsonmessagestringrequiredA simple string explaining the result of the operation.
dataobjectrequiredShow child attributes
review_idstringrequiredUnique ID of the review.
statusstringrequiredLifecycle status of the review.
pendingacceptedrejectedcommittedchanges_requestedpending_webhook_validationfailed_webhook_validationapproved_webhook_validationtypestringrequiredKind of change the review proposes.
startstoppauserestartabandonarchivedeletemake_decisionupdate_settingsupdate_overridesupdate_target_applicationsupdate_allowed_reviewersupdate_default_impact_multiplierscheduled_startscheduled_start_editdisable_reviews_locallyrolloutschedule_rolloutreallocatechange_enabled_groupsunarchiveupdate_ownersupdate_teamauthorobjectrequiredThe user who created the review.
idstringrequiredemailstringrequirednullablereviewersobject[]requiredRequested reviewers (users and groups).
idstringrequiredkindstringrequiredusergroupdescriptionstringrequiredHuman-readable description of the proposed change.
created_atstringrequiredISO-8601 timestamp of when the review was created.
contentobjectThe proposed change this review would apply, as { current, proposed } over exactly the fields committing the review would write. current is the live value read at request time; where commit treats an unset argument as "leave unchanged", proposed repeats the live value rather than a default. Populated on single-review responses only — list responses omit it so a page of reviews does not pay an extra read per row. When the review does propose something but it could not be read back, content is PRESENT with unavailable_reason set and both value objects empty, never null — so "this type proposes nothing" stays distinguishable from "we cannot tell you what this would do". This surface's reasons are review_data_unavailable (the stored change data is missing or does not match the type the review declares; expected on legacy rows) and content_unreadable (the data is present but the before/after could not be assembled; a logged server-side fault). null when the review type is a bare action with no recoverable proposed value: stop, pause, restart, reallocate, delete, disable_reviews_locally (always), start (unless the review carries a backdated start date that commit will actually write — analysis-only experiments on warehouse-native projects), scheduled_start_edit when new_time is ignore (commit is a no-op), and update_settings on an autotune (the stored settings have no experiment-contract shape). Every other type carries content, including archive, unarchive, update_owners, update_team, change_enabled_groups and update_allowed_reviewers, for which the Console currently shows no before/after. Keys by type: archive/unarchive -> archived, allocation (archiving a layer-bound experiment zeroes its allocation); abandon -> decision_note_title, decision_reason; start -> start_time; scheduled_start/scheduled_start_edit -> start_time; rollout -> group_id, rollout_percentage, rollout_phases, has_upcoming_automated_rollout; schedule_rollout -> group_id, rollout_phases; make_decision -> winning_group_id, decision_note_title, decision_reason, and on experiments overrides, id_overrides, inline_targeting_rules_json, targeting_gate_id; update_overrides -> overrides, id_overrides, allow_overrides_in_pulse; update_target_applications -> target_app_ids; update_default_impact_multiplier -> default_impact_multiplier; update_owners -> owners; update_team -> team_id, allowed_reviewer_user_ids, allowed_reviewer_group_ids (moving to a team whose approval mode is admin_only/team_only widens who may approve future reviews); update_allowed_reviewers -> allowed_reviewer_user_ids, allowed_reviewer_group_ids; change_enabled_groups -> groups (the full list, with the delta applied); update_settings -> a single settings object holding the full resolved settings set, including overrides, idOverrides, allowOverridesInPulse and customScorecardSections.
nullabletypestringrequiredSame value as the envelope type, repeated for self-containment.
startstoppauserestartabandonarchivedeletemake_decisionupdate_settingsupdate_overridesupdate_target_applicationsupdate_allowed_reviewersupdate_default_impact_multiplierscheduled_startscheduled_start_editdisable_reviews_locallyrolloutschedule_rolloutreallocatechange_enabled_groupsunarchiveupdate_ownersupdate_teamcurrentobjectrequiredThe entity's live value at read time, for each field this review type updates. Matches the Console's "Original Version (Before)" column for pending reviews. This is NOT status-dependent: for a committed or rejected review it is still the live entity as it stands now, which for a committed review normally equals proposed.
proposedobjectrequiredThe value this review proposes — what commit will apply. Carries exactly the same keys as current. Array-valued fields carry the full array on both sides, never only the changed elements.
unavailable_reasonstringPresent ONLY when the change could not be read back, in which case current and proposed are both empty objects and carry no meaning. This exists so that "this review type has nothing to propose" (content: null) is never confused with "we could not tell you what this review would do". review_data_unavailable: the review's stored change data is missing, or does not match the type the review declares — expected on legacy rows. content_unreadable: the data is present but the before/after could not be assembled; that is a server-side fault and is logged.
review_data_unavailablecontent_unreadableWas this helpful?