End Experiment
Concludes the experiment and records required findings. Pass winning_arm to serve the winning treatment to everyone; omit it when control won. Ended experiments cannot restart, but may be ended again to correct the winner. Requires experiment:manage on the account, or internal access for platform experiments.
Authorizations
An Account API key, account-scoped JWT, App API key, or user OAuth token. Prepend the key or token with Bearer, for example Bearer ***************************.
Headers
A unique key that makes this request safe to retry. See Idempotent requests.
255"d9105228-4a08-46b1-8b91-42fed586d383"
Pins the request to a dated API version.
"2026-09-11"
Path Parameters
The experiment identifier — the expt_ id or the flag_key handle.
Query Parameters
Owning account or internal. Required when id is a flag key; optional for an expt_ ID.
Body
What you learned and why you chose this outcome. Required.
"Treatment lifted signups 12%, shipping it to everyone."
The treatment that won. Setting it rolls that arm out: every later evaluation returns it to every caller, ignoring targeting and allocation, and exposures stop being recorded. Omit it when control won — an ended experiment with no winning arm evaluates to control for everyone, so ending again without one also reverts a rollout recorded by mistake. Not accepted on feature flags, which evaluate to disabled once ended.
"treatment"
Response
experiment ended
Owning account ID, or internal for Whop platform experiments.
"internal"
Assignment hashes UTF-8 seed + subject ID with CRC32 modulo 100 and selects the stored end-exclusive range.
"verb_end_exp1768435200"
Revision of the serving configuration. Does not change the assignment seed.
2
Developer-chosen handle referenced from code. Anywhere the API takes an experiment identifier, the expt_ id and the flag_key are interchangeable.
"verb_end_exp"
Unique identifier for the experiment, prefixed expt_.
"expt_xxxxxxxxxxxxxx"
Human-readable display name.
"Verb End"
Lifecycle state. draft — not yet live; active — currently running; paused — traffic paused; ended — concluded.
draft, active, paused, ended "ended"
Rules gating who is in the experiment at all. Conditions within a rule are AND-ed, rules are OR-ed, and exclude rules always win. Empty means everyone qualifies.
"2026-01-01T12:00:00.000Z"
Treatment arms. Users outside every arm's allocation form the implicit control group. Weights only ever grow and arms are never removed, so a user moves from control into a treatment at most once.
Randomization unit — user buckets each user independently, account buckets whole accounts (every user of an account gets the same arm). null for feature flags.
user, account, anonymous "user"
When the experiment was created, as an ISO 8601 timestamp.
"2026-01-01T12:00:00.000Z"
ID of the user who created the experiment, prefixed user_. null for experiments created before creators were recorded.
"user_xxxxxxxxxxxxxx"
When the experiment stopped collecting data, as an ISO 8601 timestamp. null while still running.
"2026-01-01T12:00:00.000Z"
true when this was created as a feature flag rather than a full experiment. Feature flags share the same evaluation API but do not collect metric results.
false
What was learned and why this outcome, recorded when the experiment was ended. null until then.
"Treatment lifted conversion 8%"
Hypothesis for this experiment. null when none is set, and always null for feature flags.
"Users will convert more"
When the experiment began collecting data, as an ISO 8601 timestamp. null for drafts.
"2026-01-01T12:00:00.000Z"
The treatment that won, set when the experiment was ended. Once set, every evaluation returns this arm to every caller regardless of targeting or allocation, and no further exposures are recorded. null means control won — an ended experiment with no winning arm evaluates to control for everyone. Always null for feature flags, which simply evaluate to disabled once ended.
"treatment"

