---
title: "POST /v1/workspaces/{workspaceId}/experiments"
method: POST
path: "/v1/workspaces/{workspaceId}/experiments"
---

# POST /v1/workspaces/{workspaceId}/experiments

`POST /v1/workspaces/{workspaceId}/experiments`

## Request

- Base URL: `https://api.bangermail.com`
- URL: `https://api.bangermail.com/v1/workspaces/{workspaceId}/experiments`
- Auth: HTTP bearer

Start an A/B test on a Broadcast, journey step, or automation rule.

## Request body

- ExperimentInput: Variant payload must match dimension: subject, template_id (design), content, or from_name. Keys must be unique and cannot be holdback. Allocation must have one percentage per variant and sum to 100; omitted allocation splits evenly.
  - `name` string, required
  - `subject_kind` 'campaign' | 'sequence_step' | 'automation_rule', required
  - `subject_id` string, required
  - `dimension` 'subject' | 'design' | 'content' | 'from_name', required
  - `variants` object[], required
    - `key` string
    - `label` string
    - `subject` string
    - `template_id` string, uuid
    - `content` object
    - `from_name` string
  - `allocation` integer[]
  - `sample_percent` integer
  - `primary_metric` 'human_open' | 'human_click' | 'reply' | 'conversion'
  - `min_sample_per_arm` integer
  - `decision` object
    - `mode` 'manual' | 'auto'
    - `after_hours` integer
    - `confidence` number
  - `guardrails` object
    - `max_complaint_rate` number
    - `max_unsubscribe_rate` number

## Response `201`

Successful response.

- object
  - `data` EmailExperiment, required
    - `name` string, required
    - `subject_kind` 'campaign' | 'sequence_step' | 'automation_rule', required
    - `subject_id` string, required
    - `dimension` 'subject' | 'design' | 'content' | 'from_name', required
    - `variants` object[], required
      - `key` string
      - `label` string
      - `subject` string
      - `template_id` string, uuid
      - `content` object
      - `from_name` string
    - `allocation` integer[]
    - `sample_percent` integer
    - `primary_metric` 'human_open' | 'human_click' | 'reply' | 'conversion'
    - `min_sample_per_arm` integer
    - `decision` object
      - `mode` 'manual' | 'auto'
      - `after_hours` integer
      - `confidence` number
    - `guardrails` object
      - `max_complaint_rate` number
      - `max_unsubscribe_rate` number
    - `id` string, uuid, required
    - `product_id` string, uuid
    - `status` 'running' | 'decided' | 'stopped', required
    - `winner_key` string, nullable
    - `decided_by` string, nullable
    - `decision_basis` 'confident' | 'deadline' | 'guardrail' | 'manual' | 'null', nullable
    - `decision_confidence` number, nullable
    - `decision_reason` string, nullable
    - `started_at` string, date-time
    - `decided_at` string, date-time, nullable
    - `created_by_actor_id` string
    - `created_at` string, date-time
    - `updated_at` string, date-time

---

[API](https://skmtc.dev/bangermail/apis/banger-api.md) · [All operations](https://skmtc.dev/bangermail/apis/banger-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bangermail/apis/banger-api/revisions/a149909267f9?raw)
