Skip to content
Menu
All API groups

Experiments

A/B tests.

8 endpoints.

GET/v1/experiments

List A/B tests

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
cursorquerystring | nullnomax length 200
limitqueryintegernodefault 50 · min 1 · max 200

Responses

POST/v1/experiments

Experiments Create

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
Idempotency-Keyheaderstring | nullnoUnique per logical write (8-255 chars). Retries with the same key are safe. · pattern ^[A-Za-z0-9_\-:.]{8,255}$

Request body application/json ExperimentIn

NameTypeRequiredDescription
namestringyesmax length 200
kind"ranking" | "synonyms" | "rules" | "ai_rewrite"yes
variantsVariant[]yes
primary_metric"ctr" | "conversion" | "zero_result_rate" | "add_to_cart_rate"nodefault "ctr"
traffic_percentintegernodefault 100 · min 1 · max 100

Responses

GET/v1/experiments/{experiment_id}

Experiments Get

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
experiment_idpathstringyes

Responses

PATCH/v1/experiments/{experiment_id}

Experiments Update

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
experiment_idpathstringyes

Request body application/json ExperimentPatch

NameTypeRequiredDescription
namestring | nullnomax length 200
variantsVariant[] | nullno
traffic_percentinteger | nullnomin 1 · max 100

Responses

DELETE/v1/experiments/{experiment_id}

Experiments Delete

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
experiment_idpathstringyes

Responses

POST/v1/experiments/{experiment_id}/start

Experiments Start

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
experiment_idpathstringyes

Responses

POST/v1/experiments/{experiment_id}/stop

Experiments Stop

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
experiment_idpathstringyes

Responses

GET/v1/experiments/{experiment_id}/results

Results with a significance test

Needs a key or a dashboard session

Parameters

NameInTypeRequiredDescription
experiment_idpathstringyes

Responses

Data shapes on this page

Page_ExperimentOut_

NameTypeRequiredDescription
dataExperimentOut[]yes
next_cursorstring | nullno
totalinteger | nullnoPresent when cheap to count.

ExperimentOut

NameTypeRequiredDescription
namestringyesmax length 200
kind"ranking" | "synonyms" | "rules" | "ai_rewrite"yes
variantsVariant[]yes
primary_metric"ctr" | "conversion" | "zero_result_rate" | "add_to_cart_rate"nodefault "ctr"
traffic_percentintegernodefault 100 · min 1 · max 100
idstringyes
status"draft" | "running" | "stopped" | "completed"yes
started_atstring (date-time) | nullno
ended_atstring (date-time) | nullno
created_atstring (date-time)yes

Variant

NameTypeRequiredDescription
keystringyesmax length 16
weightintegeryesmin 0 · max 100
configRankingConfignoOnly the fields that differ from the tenant's saved settings.

RankingConfig

One ranking setup, used by the dashboard playground (`SearchRequest.config_override`) and by A/B variants (`Variant.config`). Every field is optional: a missing field means "use the tenant's saved value" (`TenantSettings.search`, same field names). Nothing here is saved.

NameTypeRequiredDescription
ai_rewriteboolean | nullno
rule_parserboolean | nullno
in_stock_firstboolean | nullno
business_signalsmap<string, number> | nullnoWeights 0..1, e.g. {popularity: 0.2, margin: 0.1}. {} turns them all off.
typo_toleranceboolean | nullno
hybrid_searchboolean | nullno
cheap_rerank_top_ninteger | nullnomin 10 · max 200
merch_rulesboolean | nullnofalse = ignore all merchandising rules.
disabled_rule_idsstring[] | nullno
synonym_setsstring[] | nullnoTenant synonym sets that are on. "default" is the normal set. Example A/B: A = ["default"], B = ["default", "winter-2026"].
global_synonymsboolean | nullnofalse = ignore the platform's global synonyms.

ExperimentIn

NameTypeRequiredDescription
namestringyesmax length 200
kind"ranking" | "synonyms" | "rules" | "ai_rewrite"yes
variantsVariant[]yes
primary_metric"ctr" | "conversion" | "zero_result_rate" | "add_to_cart_rate"nodefault "ctr"
traffic_percentintegernodefault 100 · min 1 · max 100

ExperimentPatch

NameTypeRequiredDescription
namestring | nullnomax length 200
variantsVariant[] | nullno
traffic_percentinteger | nullnomin 1 · max 100

Deleted

NameTypeRequiredDescription
deletedbooleannodefault true
idstringyes

ExperimentResults

NameTypeRequiredDescription
experiment_idstringyes
primary_metricstringyes
variantsVariantResult[]yes
p_valuenumber | nullnoThe p-value used for `significant` (see `method`).
significantbooleannodefault false
winnerstring | nullno
methodstringnoHow significance was computed.default "two-proportion z-test, alpha 0.05"
updated_atstring (date-time)yes
guidanceExperimentGuidance | nullno

VariantResult

NameTypeRequiredDescription
keystringyes
searchesintegeryes
metric_valuenumberyes
ci_lownumberyes
ci_highnumberyes
sessionsinteger | nullnoShopper sessions in this variant (the test's unit).

ExperimentGuidance

What to do now, and how big the test must be. Safe to read at any time (no peeking problem).

NameTypeRequiredDescription
state"not_started" | "collecting" | "keep_running" | "wait_full_week" | "winner" | "no_clear_difference" | "stopped_early" | "check_traffic_split"yesStable key for the dashboard text.
advicestringyesThe same in plain English.
min_sessions_per_variantintegeryes
min_daysintegeryesDays a test must run before a winner is shown (one full week).
days_runningnumberyes
planned_sessions_per_variantinteger | nullnoSessions per variant for `power` to find a `mde_relative` change (always-valid test).
fixed_horizon_sessions_per_variantinteger | nullnoThe classic fixed-sample size, for reference (smaller; valid only if read once).
progressnumber | nullnoSmallest variant's sessions / planned sessions.
sessions_per_daynumber | nullnoSessions in the test per day so far (or expected).
days_to_plannumber | nullnoExpected days left until the planned size.
baselinenumber | nullnoRate of the primary metric the plan is based on.
baseline_source"control" | "history" | "none"nodefault "none"
mde_relativenumberyesSmallest relative change the plan is sized for, e.g. 0.1 = 10%.
powernumberyes
p_value_fixed_horizonnumber | nullnoClassic z-test p-value. Not for decisions while the test runs (peeking).
srm_p_valuenumber | nullnoTraffic split check (chi-square).
srm_alarmbooleannodefault false