For information about how REST API works, see rest main page.
Read-only. Returns the verdict of one A/B test: which variation is ahead, by how much, how confident Personyze is, and — when nothing has been decided yet — what is still missing.
This is the same comparison the panel shows, computed by the same code that promotes winners and sends the "your test concluded" email. Reading it never promotes anything.
The URL is:
app.personyze.com/rest/ab_test/where/condition_id=<campaign id>
condition_id is required. There is no "all my tests" form: each campaign costs a full aggregation over its lifetime, so you ask about one at a time. Campaign ids come from conditions.
A campaign that is not a running A/B test — no A/B goals configured, never started, or already ended — is an error rather than an empty answer, so a typo'd id cannot read as "no winner yet".
Example
curl 'https://api:FD09908F25BECB09D78EBEA1DADFB618651F612D@app.personyze.com/rest/ab_test/where/condition_id=1878'
{
"condition_id": 1878,
"condition_name": "Homepage hero test",
"has_winner": false,
"winner_actiongroup_id": null,
"message": "Server 362, a/b 1878 (Homepage hero test), bounce_rate (Bounce rate): 0.8404 (Group A) vs. 0.8409 (Control group), 52% sure: Didn't reach min improvement of 0.1 (current: 0.05)",
"control_group_rotation": 50,
"max_duration_reached": false,
"goals": [
{
"ab_goal": "bounce_rate",
"title": "Bounce rate",
"lower_is_better": true,
"best": {"actiongroup_id": 1797, "name": "Group A", "rate": 0.8403790087463557},
"compared_to": {"actiongroup_id": -1, "name": "Control group", "rate": 0.8408839779005525},
"significance_prc": 52.03,
"improvement_prc": 0.0505,
"min_significance_prc": 95,
"min_improvement_prc": 0.1,
"reached": false,
"summary": "0.8404 (Group A) vs. 0.8409 (Control group), 52% sure: Didn't reach min improvement of 0.1",
"groups": [
{"actiongroup_id": -1, "name": "Control group", "value": 2283, "denom": 2715, "rate": 0.8408839779005525},
{"actiongroup_id": 1797, "name": "Group A", "value": 2306, "denom": 2744, "rate": 0.8403790087463557}
]
}
]
}
Top level
| Field | Meaning |
|---|---|
has_winner |
Whether the test has concluded. True only when every configured goal passed its significance and improvement thresholds and they all name the same variation. |
winner_actiongroup_id |
The winning rotation group, or null when there is no winner. Never set without has_winner. |
message |
Why there is no winner yet, in words — minimum duration, minimum sessions per arm, a goal short of its threshold, or goals disagreeing. Empty once a winner exists. |
control_group_rotation |
The percentage of traffic held back as the control group. 0 means no holdout: every visitor sees some variation. |
max_duration_reached |
The test has run past the platform's maximum duration and will be concluded regardless. |
goals |
One entry per configured winner criterion, below. Populated whether or not the test concluded — a test still running reports where each goal currently stands. |
Per goal
| Field | Meaning |
|---|---|
ab_goal, title |
The criterion — goal_event_1..goal_event_12, products_goal_sessions, clicks, bounce_rate — and its display name. |
lower_is_better |
True for bounce rate. Where it is true, the best arm is the lowest rate, and improvement_prc is still positive when the winner is better. |
best |
The arm that is ahead on this goal. actiongroup_id is -1 for the control group. |
compared_to |
What best is measured against: the control group, or — when the control is itself the best arm — the worst arm. In a multivariate test with no control group, -2 is a synthetic baseline pooling every other combination. |
significance_prc |
Confidence that the difference is real, 0–100. Computed one-sided, and penalized for the number of arms compared, so adding variations lowers confidence for the same observed gap. |
improvement_prc |
How much better best is than compared_to, in percentage points — not a relative percentage. Always positive when the winner is genuinely better, including for bounce_rate. |
min_significance_prc, min_improvement_prc |
The thresholds configured for this test, for context on why reached is what it is. |
reached |
This goal passed both thresholds and the winner is not the control group. |
summary |
The one-line rendering of all of the above. |
groups |
Every arm with data: value (the numerator — conversions, clicks, bounced sessions), denom (sessions), rate = value / denom. |
A null in place of a number means that arm has no data yet.
Notes
- Only goals Personyze can score appear.
products_value_per_order,page_viewsandtime_on_sitecan be chosen as reporting metrics but are not scoreable criteria, and are omitted. - Figures cover the whole test, from its start time. For day-by-day numbers use summary_actions.
- A running test is one with A/B goals set, a start time, and no end time. Ended tests keep their results in the panel but are not served here.
See also: server-side personalization and A/B testing, which covers running the test itself from your own code.