Create an experiment (stage draft). Key: 2-48 lowercase letters, digits, ., -, _. 2-5 variants, one named
control (the baseline); exp:<key>:<variant> must fit 64 characters. 409 if the key exists.
"Make winner": everyone gets this variant from now on and the experiment ends. control = show nothing.
Dashboard: a person-unit experiment event (offers).
Dashboard: a server-unit experiment event (promos). Needs access to the server.
The rule builder's vocabulary: feature ids, plan-limit ids (for limitPct: / count: / hitLimit:), server
types and goals, each with a label. Read these instead of hardcoding ids.
Results: per variant - exposures, clicks, conversions (adopt: the server turned the feature on within 7 days of
first seeing it; buy: an attributed purchase within 14 days), revenue, conversion rate, lift and p-value vs
control - plus likelyWinner (beats control at p < 0.05 with 200+ exposures each, or control when the promo
hurts) and daily view / click / dismiss counts. Shown only: "Make winner" is still a staff click.
Every experiment, newest first (200 max).
Dashboard: an "add this too" suggestion for the add-ons in the cart (addon ids, e.g. TiktokConnections), or null.
Call when the cart changes. Accepting adds suggestAddon to the cart and sends pairOffer: key with the
checkout; report click (accepted) / dismiss (no thanks) with createExperimentEvent. Do not send view.
Dashboard: the feature promo for one surface of a server - home, banner or page:<feature> (0 or 1 card).
The server records that it was shown (control included), so do NOT send a view event for promos; send click on
the CTA and dismiss on the X (createGuildExperimentEvent). Pass attribution into checkout when the CTA buys.
Dashboard: the logged-in person's discount offer banner, or null. The first call starts their window (endsAt
is fixed from then on). Pass key as offer to the checkout (premium.createCheckoutSession body) - the server
re-checks it. Report click / dismiss with createExperimentEvent; do not send view.
Surfaces, rule, variants, group / slice, priority. Once started, variant keys and weights, the group and the slice
are locked (only config text, surfaces, rule and priority can change).
Optionalgroup?: null | stringOptionalpriority?: numberOptionalsurfaces?: string[]OptionaltargetOptionaltrafficOptionaltrafficOptionalvariants?: ExperimentVariant[]Move an experiment between stages. rollout needs a percentage above 0. An ended experiment cannot restart.
Optionalrollout
A/B experiments (promos, offers). Developers only for the admin methods (403 otherwise); every change is audit-logged. The two
create...ExperimentEventmethods are for the dashboard: report what the viewer saw and did, for the arm the server gave them (a mismatched or preview arm answers{ recorded: false }and is not counted).