Experimentation

A/B Testing on Live Journeys

Attach an experiment to any journey step. We handle variant assignment (deterministic, SHA-256 based), decision logging, and significance testing. You just pick what to test.

Split-test diagram showing email variants A and B with performance bars and a winner highlighted

How it works

1

Create an experiment

POST to /v1/experiments with a journey step ID and weighted variants. Each variant can override the subject line, swap in a different template version, or act as a holdout group.

2

Start it

POST to /v1/experiments/:id/start. Moves the experiment from draft to running. Only running experiments touch live sends, so you can set everything up safely first.

3

Contacts get assigned deterministically

When the journey step fires, each contact is hashed (SHA-256) into a variant bucket. Same contact, same variant, every time. Holdout contacts skip the send entirely.

4

Overrides kick in

Subject line and template overrides from the assigned variant are applied before sending. Every decision is logged for attribution.

5

Outcomes traced back

When business events arrive (purchases, signups, activations), they trace back through experiment decision logs. Four attribution models are supported.

6

You get significance numbers

GET /v1/experiments/:id/results returns per-variant conversion rates, a two-proportion z-test, p-values, and 95% confidence intervals. No spreadsheet required.

Create an experiment

POST /v1/experiments

{
  "tenantId": "your-tenant-id",
  "journeyId": "welcome-series",
  "journeyStepId": "step-2-nudge",
  "name": "Subject line test",
  "type": "ab",
  "variants": [
    {
      "id": "control",
      "name": "Control",
      "weight": 50,
      "isControl": true,
      "isHoldout": false,
      "subjectOverride": null,
      "templateVersionId": null,
      "timingDelayMinutes": null
    },
    {
      "id": "variant-b",
      "name": "Urgency subject",
      "weight": 50,
      "isControl": false,
      "isHoldout": false,
      "subjectOverride": "Don't miss out - your trial ends tomorrow",
      "templateVersionId": null,
      "timingDelayMinutes": null
    }
  ]
}

What you can test

Subject lines

The lowest-friction test you can run. Swap subject copy across variants and measure open and conversion rate differences.

Template versions

Different designs, different layouts, different copy. Point each variant at a separate template version and let the data decide.

Holdout groups

Would this email even matter if you didn't send it? Withhold from a control group and compare outcomes to find out.

Significance, not guesswork

Results use a two-proportion z-test at 95% confidence. Once enough sends accumulate, you get a clear signal: p-value, confidence interval, and a flag telling you whether the difference is real.

Variant        Sent     Converted   Rate     p-value
Control        1,204    83          6.89%    -
Urgency        1,198    112         9.35%    0.0241  *

* Statistically significant at p < 0.05

Run your first experiment

One POST creates the experiment, another starts it. Significance tracking happens on its own. Ship a test in under five minutes.