---
title: "List experiments"
method: GET
path: "/api/v1/experiments"
tags: ["Experiments"]
---

# List experiments

`GET /api/v1/experiments`

## Request

- Base URL: `https://mailinapp.com`
- URL: `https://mailinapp.com/api/v1/experiments`
- Auth: HTTP bearer

The account's send and journey experiments, newest first (up to 500). Read-only: experiments are created, launched and decided in the dashboard.

## Query parameters

- `status` 'draft' | 'scheduled' | 'sending' | 'observing' | 'analyzing' | 'decided' | 'inconclusive' | 'closed' | 'cancelled'
- `kind` 'send' | 'journey'
- `projectId` string
- `journeyId` string

## Response `200`

The experiments

- object
  - `experiments` Experiment[], required
    - `id` string, required
    - `name` string, required
    - `kind` 'send' | 'journey', required
    - `status` 'draft' | 'scheduled' | 'sending' | 'observing' | 'analyzing' | 'decided' | 'inconclusive' | 'closed' | 'cancelled', required
    - `projectId` string, required: The email the experiment is stored on: the one it sends, or for a journey experiment the first email its split reaches.
    - `journey` object, nullable, required: Null for a send experiment.
      - `journeyId` string, required
      - `nodeId` string, required: The split step.
      - `windowHours` integer, required: How long each contact is measured from reaching the split.
    - `hypothesis` string, required
    - `primaryMetric` 'purchase_conversion' | 'revenue_per_delivered' | 'unique_click_rate' | 'response_rate' | 'reveal_rate' | 'post_reveal_click_rate' | 'open_rate' | 'goal_rate' | 'unsubscribe_rate' | 'complaint_rate', required: `goal_rate` is for journey experiments only.
    - `secondaryMetrics` ExperimentMetric[], required
    - `guardrailMetrics` ExperimentMetric[], required
    - `analysis` 'fixed' | 'sequential', required
    - `arms` ExperimentArm[], required
      - `key` string, required
      - `label` string, required
      - `isControl` boolean, required
      - `isHoldout` boolean, required: A holdout is mailed nothing.
      - `allocation` number, required: The arm's share of the sample, 0–1.
      - `pathIndex` integer, nullable, required: The split path this arm is (0-based), for a journey experiment; null for a send experiment.
    - `createdAt` integer, required: Epoch milliseconds, like every time below.
    - `lockedAt` integer, nullable, required
    - `sendAt` integer, required
    - `observationEndsAt` integer, nullable, required
    - `closedAt` integer, nullable, required
    - `result` object, nullable, required: What the statistics engine said in the latest analysis; null before the first.
      - `outcome` 'invalid' | 'winner' | 'no_difference' | 'inconclusive', required
      - `armKey` string, nullable, required: The winning arm, for a winner.
      - `final` boolean, required: The analysis covers the whole observation window.
      - `computedAt` integer, required
    - `decision` object, nullable, required: What a person recorded; null until then.
      - `outcome` 'winner' | 'inconclusive' | 'no_difference', required
      - `armKey` string, nullable, required
      - `pathIndex` integer, nullable, required: For a journey experiment's winner, the path everyone can be sent down. Sending them is done by a person in the journey editor, never automatically.
      - `evidence` 'significant' | 'not_significant' | 'invalid', required: What the statistics said when the decision was recorded.
      - `rationale` string, required
      - `decidedAt` integer, required
    - `deployment` union, required: How the winner was put to use; null until then. A path deployment has no email.
      - object
        - `kind` 'email', required
        - `projectId` string, required: The email made from the winning arm.
        - `armKey` string, required
        - `deployedAt` integer, required
      - object
        - `kind` 'path', required
        - `pathIndex` integer, required
        - `armKey` string, required
        - `deployedAt` integer, required
    - `resultsUrl` string, uri, required: The results page in the dashboard.

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key
- `429`: Too many requests for this key

---

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