Create Experiment Review

Create Experiment Review

posthttps://statsigapi.net/console/v1/experiments/{id}/reviews

Authorizations

STATSIG-API-KEYstringrequired

apiKey (header)

Path parameters

idstringrequired

Body

application/json
typestringrequired

The kind of experiment change the review proposes.

Allowed values:startstoppauserestartabandonarchivedeletemake_decisionrolloutschedule_rolloutreallocatechange_enabled_groupsunarchiveupdate_ownersupdate_teamupdate_settingsupdate_overridesupdate_target_applicationsupdate_allowed_reviewersupdate_default_impact_multiplierscheduled_startscheduled_start_editdisable_reviews_locally
descriptionstring

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).

Constraints:max length: 2000
reviewer_idsstring[]

User IDs to request review from.

Default:[]
reviewer_group_idsstring[]

Reviewer group IDs to request review from.

Default:[]
reasonstring

Optional reason recorded with the change, applied when committed (e.g. stop / pause / abandon / decision reason).

Constraints:max length: 2000
winning_group_idstring

For make_decision: the group to ship. Required.

remove_targetingboolean

For make_decision: drop targeting on ship (default false).

remove_overridesboolean

For make_decision: drop overrides on ship (default false).

start_datestring

For start: optional scheduled start date.

group_idstring

For rollout / schedule_rollout: the group to roll out. Required.

rollout_percentagenumber

For rollout: the pass percentage to roll the group out to. Required.

Constraints:format: doublemin: 0max: 100
clear_phasesboolean

For rollout: clear any scheduled rollout phases (default false).

rollout_phasesobject[]

For schedule_rollout: the ordered rollout phases to schedule. Required.

Show child attributes
percentagenumberrequired

Pass percentage for this phase (0–100).

Constraints:min: 0max: 100
timenumber

Absolute start time of the phase (epoch ms).

time_stringstring

Human-readable start time of the phase.

is_completeboolean

Whether this phase is already complete (default false).

phase_duration_msnumber

Duration 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_idstringrequired

ID of the owner (user ID or SDK key ID).

Constraints:min length: 1
owner_typestring

Kind of owner. Defaults to user.

Allowed values:usersdk_key
team_idstring

For update_team: the team to assign, or null to clear it.

Constraints:nullablemin length: 1
default_impact_multipliernumber

For update_default_impact_multiplier: the new multiplier. Required.

Constraints:format: double
target_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_timeinteger

For scheduled_start: epoch-ms time to schedule the start. Required.

Constraints:format: int64
new_timeinteger

For scheduled_start_edit: epoch-ms time to reschedule the start to. Required.

Constraints:format: int64
overridesobject[]

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
typestringrequired
Allowed values:gatesegment
group_idstringrequired
namestringrequired
environmentstring
Constraints:nullable
id_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[]required
group_idstringrequired
environmentstring
Constraints:nullable
unit_typestring
Constraints:nullable
allow_overrides_in_pulseboolean

For update_overrides: whether overridden units are included in Pulse. Omit to preserve the current setting.

settingsobject

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.

Show child attributes
namestring

The display name of the experiment

Constraints:min length: 3max length: 100pattern: ^[a-zA-Z0-9_\- ]*$
descriptionstringrequired

A helpful summary of what this experiment does

Constraints:max length: 1000
idTypestringrequired

The type of ID which the experiment is based on

secondaryIDTypestring

The secondary ID type for the experiment used in WHN for ID resolution

Constraints:nullable
identifierMappingModestring

The identifier mapping mode for the experiment used in WHN for ID resolution

Allowed values:strictOneToOnefirstTouchOneToManylastTouchOneToMany
identityResolutionSourcestring

The identity resolution entity property source for the experiment used in WHN for ID resolution

Constraints:nullable
hypothesisstringrequired

A statement that will be tested by this experiment

linksobject[]

Links to relevant documentation or resources

urlstringrequired

The URL of the link

Constraints:format: uri
titlestring

The title of the link

externalEventsobject[]
namestringrequired
timestampnumberrequired
groupsobject[]required

The test groups for your experiment

namestringrequired
idstring
Constraints:nullable
sizenumberrequired
Constraints:min: 0max: 100
parameterValuesobjectrequired

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.

disabledboolean
descriptionstring
foreignGroupIDstring
highlightedboolean

Marks this experiment group as highlighted in analysis views. Highlighted groups are prioritized (shown first) and can be used to filter.

controlGroupIDstring

Optional control group ID

allocationnumberrequired

Percent of layer allocated to this experiment

Constraints:format: doublemin: 0max: 100
userBucketsnumber[]
primaryMetricTagsstring[]

Primary metric tags for the experiment

secondaryMetricTagsstring[]

Secondary metric tags for the experiment

primaryMetricsobject[]

Main metrics needed to evaluate your hypothesis

namestringrequired

The metric name.

typestringrequired

The metric type.

directionstring

The expected direction for one-sided testing (a feature to only measure metric movements in a single direction)

Allowed values:increasedecrease
hypothesizedValuenumber

The 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

namestringrequired

The metric name.

typestringrequired

The metric type.

directionstring

The expected direction for one-sided testing (a feature to only measure metric movements in a single direction)

Allowed values:increasedecrease
hypothesizedValuenumber

The 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.

namestringrequired

The metric name.

typestringrequired

The metric type.

directionstring

The expected direction for one-sided testing (a feature to only measure metric movements in a single direction)

Allowed values:increasedecrease
hypothesizedValuenumber

The comparison value for the one-sample testing (a feature to use a fixed baseline as the control value)

targetAppsoneOf

Target apps assigned to this experiment

Constraints:stringstring[]
tagsstring[]

Tags associated with the experiment

durationinteger

How long the experiment is expected to last in days

Constraints:format: int64min: 1
targetExposuresinteger

Target exposures for the experiment

Constraints:format: int64min: 1
targetingGateIDstringrequired

Restrict your experiment to users passing the selected feature gate

Constraints:nullable
sequentialTestingboolean

Apply sequential testing?

bonferroniCorrectionbooleanrequired

Is Bonferroni correction applied per variant?

bonferroniCorrectionPerMetricboolean

Is Bonferroni correction applied per metric?

benjaminiHochbergPerVariantboolean

Is Benjamini-Hochberg procedure applied per variant?

benjaminiHochbergPerMetricboolean

Is Benjamini-Hochberg procedure applied per metric?

benjaminiPrimaryMetricsOnlyboolean

Is Benjamini-Hochberg procedure applied for primary metrics only?

defaultConfidenceIntervalstringrequired

Default error margin used for results

Allowed values:8090959899
defaultRollupWindowinteger

Default rollup window in days for experiment results. Use -1 for cumulative. Only -1, 1, and 7 allowed for cloud experiments.

Constraints:format: int64
defaultChanceToBeatThresholdnumber

Default chance-to-beat threshold used for Bayesian results.

Constraints:format: double
bayesianPriorsobject[]

Bayesian prior settings by metric.

metricobjectrequired
namestringrequired
typestringrequired
priorMeannumberrequired
priorStdDevnumberrequired
Constraints:min: 0
manualQualityScoresobject[]

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

criteriaNameoneOfrequired
Constraints:stringstring
statusstringrequired
Allowed values:PASSEDFAILEDWARNING
criteriaDescriptionstringrequired
scorenumberrequired
weightnumberrequired
statusstringrequired

The current status of the experiment

Allowed values:activesetupdecision_madeabandonedarchivedexperiment_stoppedassignment_stopped
launchedGroupIDstring

ID of the launched group, null otherwise

Constraints:nullable
assignmentSourceNamestring

Source name of the assignment

assignmentSourceExperimentNamestring

Name of the source experiment for assignment

creatorIDstring

The Statsig ID of the creator of this experiment

Constraints:nullable
creatorEmailstring

The email of the creator of this experiment

Constraints:nullable
isAnalysisOnlyboolean

For Warehouse Native

Constraints:nullable
teamstring

The team name associated with the experiment, Enterprise only.

Constraints:nullable
teamIDstring

The team ID associated with the experiment, Enterprise only.

Constraints:nullable
allocationDurationinteger

Warehouse Native Only - Allocation duration in days

Constraints:format: int64nullablemin: 1
cohortedAnalysisDurationinteger

Warehouse Native Only - Cohorted analysis duration in days

Constraints:format: int64min: 1
cohortedMetricsMatureAfterEndboolean

Warehouse Native Only - Allow cohort metrics to mature after experiment end

cohortWaitUntilEndToIncludeboolean

Warehouse Native Only - Whether to filter to units whose experiment cohort analysis duration is complete, if cohortedAnalysisDuration exists

fixedAnalysisDurationinteger

Fixed analysis duration in days

Constraints:format: int64min: 1
scheduledReloadHourinteger

Warehouse Native only - UTC hour at which to run scheduled pulse loads

Constraints:format: int64nullablemin: 0max: 23
scheduledReloadTypestring

Warehouse Native only - reload type for scheduled reloads

Allowed values:fullincremental
scheduledReloadDaysinteger[]

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
turboModeboolean

Warehouse Native only - whether to run scheduled reloads with Turbo mode.

autoLoadToplineImpactboolean

Warehouse Native only - whether to automatically run topline and projected launch impact calculations when reloading experiments.

analysisEndTimestring

Warehouse Native only - end time for analysis only experiments

assignmentSourceFiltersobject[]

Array of criteria for filtering assignment sources.

columnstring

Column to filter on.

conditionstringrequired
Allowed values:innot_in=><>=<=is_nullnon_nullcontainsnot_containssql_filterstarts_withends_withafter_exposurebefore_exposureis_trueis_false
valuesstring[]

Optional array of values for the criterion to match against.

analyticsTypestring

The mode of analysis for the experiment, e.g frequentist, bayesian, sprt

Allowed values:frequentistbayesiansprt
defaultSPRTPowerParamnumber

SPRT power parameter percentage used as the default for experiment analysis.

Constraints:format: double
defaultSPRTMDEnumber

Default MDE value for every metric if one isn't provided. Only used in manual mode.

Constraints:format: double
sprtBaselineModestring

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.

Allowed values:manualin_experiment_control
sprtMDESettingsobject[]

The SPRT values for use in the experiment.

metricKeystringrequired
groupSettingsobject[]required
groupKeystringrequired
mdenumberrequired
meannumber
stdDevnumber
isSidecarboolean

Whether this is a Statsig Sidecar experiment. sidecarEditorURL, sidecarURLFilters, sidecarDisableAutoRun, and sidecarPrerunScript are saved only when this is true.

sidecarEditorURLstring

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.

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.

typestringrequired
Allowed values:containsequalsregexpath
valuestringrequired
sidecarDisableAutoRunboolean

Sidecar (Visual Editor) only: whether to disable auto-running the experiment on page load. By default the experiment auto runs.

sidecarPrerunScriptstring

Sidecar (Visual Editor) only: a script to run before the experiment starts. Send null to clear it.

Constraints:nullable
decisionReasonstring

Experiment notes reported after experiment completes

preComputedUserDimensionsobject[]

User dimensions that will be computed for every metric in WHN

propertySourcestring
namestringrequired
cureCovariatesobject[]

CURE Covariates to use in this experiment

namestringrequired
typestringrequired
stratifiedSamplingobject

The stratified sampling settings for the experiment

Constraints:nullable
statusstringrequired
Allowed values:pendingsuccesserror
metricobject
namestringrequired
typestring
startDatestringrequired
endDatestringrequired
entityPropertySourceobject
propertySourceNamestringrequired
columnstringrequired
csvobject
originalstringrequired
identifierstringrequired
useStratifiedSaltboolean

Whether successful stratified sampling is currently used for experiment assignment.

useUnitsboolean

Whether stratified sampling was configured to use allocated units directly.

deltaReductionnumber

Observed reduction in delta after running stratified sampling.

Constraints:format: double
spreadReductionnumber

Observed reduction in spread after running stratified sampling.

Constraints:format: double
enabledNonProdEnvironmentsstring[]

Response

application/json
201· The created experiment review.
messagestringrequired

A simple string explaining the result of the operation.

dataobjectrequired
Show child attributes
review_idstringrequired

Unique ID of the review.

statusstringrequired

Lifecycle status of the review.

Allowed values:pendingacceptedrejectedcommittedchanges_requestedpending_webhook_validationfailed_webhook_validationapproved_webhook_validation
typestringrequired

Kind of change the review proposes.

Allowed values:startstoppauserestartabandonarchivedeletemake_decisionupdate_settingsupdate_overridesupdate_target_applicationsupdate_allowed_reviewersupdate_default_impact_multiplierscheduled_startscheduled_start_editdisable_reviews_locallyrolloutschedule_rolloutreallocatechange_enabled_groupsunarchiveupdate_ownersupdate_team
authorobjectrequired

The user who created the review.

idstringrequired
emailstringrequired
Constraints:nullable
reviewersobject[]required

Requested reviewers (users and groups).

idstringrequired
kindstringrequired
Allowed values:usergroup
descriptionstringrequired

Human-readable description of the proposed change.

created_atstringrequired

ISO-8601 timestamp of when the review was created.

contentobject

The 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.

Constraints:nullable
typestringrequired

Same value as the envelope type, repeated for self-containment.

Allowed values:startstoppauserestartabandonarchivedeletemake_decisionupdate_settingsupdate_overridesupdate_target_applicationsupdate_allowed_reviewersupdate_default_impact_multiplierscheduled_startscheduled_start_editdisable_reviews_locallyrolloutschedule_rolloutreallocatechange_enabled_groupsunarchiveupdate_ownersupdate_team
currentobjectrequired

The 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.

proposedobjectrequired

The 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_reasonstring

Present 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.

Allowed values:review_data_unavailablecontent_unreadable

Was this helpful?