---
title: "List experiments"
method: GET
path: "/v1/projects/{projectSlug}/experiments"
tags: ["Experiments"]
---

# List experiments

`GET /v1/projects/{projectSlug}/experiments`

Returns the project's experiments with cheap summary metrics (variant count, distinct sessions and users across all variant populations). Excludes per-variant comparison metrics — fetch a single experiment for those.

## Path parameters

- `projectSlug` string, required — Project slug (human-readable identifier)

## Query parameters

- `cursor` string — Opaque cursor returned in a previous response's `nextCursor`. Omit on the first page.
- `limit` integer — Page size. Defaults to 50; max 100.
- `search` string — Filter by name (case-insensitive substring).

## Response `200`

Page of experiments

- PaginatedExperiments
  - `items` ExperimentListItem[], required — Page of items, in the requested sort order.
    - `id` string, required — Stable experiment identifier.
    - `organizationId` string, required — Organization that owns this experiment.
    - `projectId` string, required — Project this experiment belongs to.
    - `slug` string, required — URL-safe slug derived from `name`. Unique within the project.
    - `name` string, required — Human-readable name.
    - `description` string, required — Free-form description. Empty string when not set.
    - `variants` ExperimentVariant[], required — Ordered variants. Exactly one carries the baseline flag when the list is non-empty.
      - `id` string, required — Stable variant identifier, unique within the experiment.
      - `name` string, required — Human-readable variant name (e.g. "Variant A"). Unique within the experiment.
      - `baseline` boolean, required — `true` for the single baseline variant that every other variant is compared against.
      - `filterSet` object, required — Session filters selecting this variant's population.
      - `query` string, nullable, required — Free-text / semantic search applied to the population, or `null`.
      - `timeRange` union, required — Time window the variant is measured over. `null` uses the default last-30-days window.
        - RelativeVariantTimeRange
          - `type` 'relative', required — A live window ending now, spanning the last `seconds`.
          - `seconds` integer, required — Length of the live window in seconds (e.g. 2592000 for the last 30 days).
        - AbsoluteVariantTimeRange
          - `type` 'absolute', required — A fixed window between two instants.
          - `fromIso` string, required — ISO-8601 start of the window (inclusive).
          - `toIso` string, required — ISO-8601 end of the window (inclusive).
    - `createdAt` string, required — ISO-8601 timestamp of creation.
    - `updatedAt` string, required — ISO-8601 timestamp of the last update.
    - `variantCount` integer, required — Number of variants in the experiment.
    - `sessionsDistinct` integer, required — Distinct sessions across the union of every variant's population (a session in several variants counts once).
    - `usersDistinct` integer, required — Distinct users across the union of every variant's population (a user in several variants counts once).
  - `nextCursor` string, nullable, required — Opaque cursor for fetching the next page. `null` when there are no more pages. Pass it back in `cursor` to continue.
  - `hasMore` boolean, required — `true` when there is at least one more page after this one.

## Other responses

- `400` — Validation error
- `401` — Unauthorized
- `404` — Not found

---

[API](https://skmtc.net/latitude-dev/apis/latitude.md) · [All operations](https://skmtc.net/latitude-dev/apis/latitude/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/latitude-dev/latitude/versions/6a8789c59a5c/schema)
