EngagIQ’s auto-tuning message A/B testing surface. Register an experiment, log impressions + conversions, then read the recommended variant — picked with a Wilson lower-bound at 95% confidence.
welcome_push_v1/api/variants/welcome_push_v1. Numbers are refreshed daily by the seed-variants cron.insufficient_data is returned with a reason and EngagIQ keeps its current strategy./api/variantsRegister (or replace) an experiment and its variant set. Idempotent on experimentId — re-running replaces the variant list.
Body
{ experimentId, variants: [{ id, copy }, ...] }Returns · 201 with the persisted ExperimentItem.
/api/variants/{experiment_id}/impressionLog that a user was shown a variant. variantId must be registered on the experiment.
Body
{ userId, variantId }Returns · 201 with { ok: true }.
/api/variants/{experiment_id}/conversionLog a conversion tied to a shown variant. Conversions without a prior impression are accepted (more permissive default).
Body
{ userId, variantId, eventType: "click" | "open" }Returns · 201 with { ok: true }.
/api/variants/{experiment_id}Returns per-variant impressions, conversions, conversion rate, Wilson lower bound (95%), and the recommended variant — or insufficient_data.
Body
—Returns · ExperimentReport JSON; 404 if the experiment is unknown.
Last polled: —. Schema lives in src/lib/contracts/variants.ts; selection rule in src/lib/business/variants.ts.