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

# Get experiment

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

Returns a single experiment plus its comparison: per-variant metrics, deltas vs the baseline, and population-deviation flags.

## Path parameters

- `projectSlug` string, required — Project slug (human-readable identifier)
- `experimentSlug` string, required — Experiment slug (human-readable identifier within the project).

## Response `200`

Experiment comparison

- ExperimentComparison
  - `experiment` object, required — The experiment, including its variant definitions.
    - `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.
  - `variants` VariantComparison[], required — One entry per variant, in the experiment's stored variant order. The baseline is the entry whose `baseline` field is `true` — identify it by that flag, never by array position.
    - `variantId` string, required — Id of the variant these metrics belong to.
    - `baseline` boolean, required — `true` when this is the baseline variant; every metric's `delta` is `null`.
    - `approximate` boolean, required — `true` when the variant's query has a semantic component, making its population a best-effort sample.
    - `resolvedRange` ResolvedRange, required — The absolute window the metrics were computed over.
      - `fromIso` string, required — ISO-8601 start of the resolved window.
      - `toIso` string, required — ISO-8601 end of the resolved window.
    - `metrics` VariantMetrics, required — Population-scoped metrics grouped by entity. Each metric is a `{ value, delta }` pair; `delta` is the change vs the baseline (`null` on the baseline itself). `tools`, `signals`, and `behaviours` also carry a `top` ranked list.
      - `sessions` ExperimentSessionsMetrics, required
        - `count` object, required — Number of sessions in the variant's population — count.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `users` object, required — Distinct users across the variant's sessions — count.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `cost_total` object, required — Total model cost across the variant's sessions — USD; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `tokens_total` object, required — Total tokens across the variant's sessions — tokens.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `error_rate` object, required — Fraction of sessions with at least one error — fraction (0–1); lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `cache_hit_rate` object, required — Fraction of input tokens served from cache — fraction (0–1); higher is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `duration_median` object, required — Median session duration — seconds; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `duration_p90` object, required — 90th-percentile session duration — seconds; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `duration_p95` object, required — 95th-percentile session duration — seconds; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `cost_avg` object, required — Average model cost per session — USD; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `tokens_avg` object, required — Average tokens per session — tokens.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `ttft_median` object, required — Median time to first token across sessions — seconds; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `spans_avg` object, required — Average spans per session — count.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `traces_avg` object, required — Average traces per session — count.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
      - `users` ExperimentUsersMetrics, required
        - `distinct` object, required — Distinct users in the variant's population — count.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `sessions_per_user` object, required — Average sessions per user — count.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `traces_per_user` object, required — Average traces per user — count.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `cost_avg` object, required — Average model cost per user — USD; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `duration_median` object, required — Median total session time per user — seconds; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `duration_p90` object, required — 90th-percentile total session time per user — seconds; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `duration_p95` object, required — 95th-percentile total session time per user — seconds; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `error_session_rate` object, required — Average fraction of a user's sessions that have an error — fraction (0–1); lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
      - `tools` ExperimentToolsMetrics, required
        - `calls` object, required — Total tool calls across the variant's sessions — count.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `distinct` object, required — Distinct tools called — count.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `sessions_with_tools_rate` object, required — Fraction of sessions that call at least one tool — fraction (0–1).
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `error_rate` object, required — Fraction of tool calls that error — fraction (0–1); lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `duration_p50` object, required — Median tool-call duration — seconds; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `duration_p90` object, required — 90th-percentile tool-call duration — seconds; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `duration_p95` object, required — 95th-percentile tool-call duration — seconds; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `top` ExperimentTopListItem[], required — Top tools by call count.
          - `key` string, required — Stable identity: tool name, signal slug, or cluster id.
          - `label` string, required — Human-readable label (resolved name; falls back to `key` when unresolved).
          - `value` number, required — Ranking value: tool calls / signal occurrences / behaviour observations.
      - `signals` ExperimentSignalsMetrics, required
        - `distinct` object, required — Distinct signals raised on the variant's sessions — count; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `occurrences` object, required — Total signal occurrences — count; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `affected_sessions_rate` object, required — Fraction of sessions with at least one signal — fraction (0–1); lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `affected_traces_rate` object, required — Fraction of traces with at least one signal — fraction (0–1); lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `affected_users` object, required — Fraction of users with at least one signal — fraction (0–1); lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `cost_impact` object, required — Total model cost of sessions carrying a signal — USD; lower is better.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `top` ExperimentTopListItem[], required — Top signals by occurrence count.
          - `key` string, required — Stable identity: tool name, signal slug, or cluster id.
          - `label` string, required — Human-readable label (resolved name; falls back to `key` when unresolved).
          - `value` number, required — Ranking value: tool calls / signal occurrences / behaviour observations.
      - `behaviours` ExperimentBehavioursMetrics, required
        - `observations` object, required — Total behaviour observations on the variant's sessions — count.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `distinct_clusters` object, required — Distinct behaviour clusters observed — count.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `moments` object, required — Semantic moments detected on the variant's sessions — count.
          - `value` number, nullable, required — Value in the metric's unit; `null` when empty or not computable.
          - `delta` union, required — Change vs the baseline: a signed fraction `(value - baseline) / baseline`, `"up-from-zero"` for an unbounded increase from a zero baseline, or `null` when incomparable or on the baseline variant itself.
            - number
            - 'up-from-zero'
        - `top` ExperimentTopListItem[], required — Top behaviours by observation count.
          - `key` string, required — Stable identity: tool name, signal slug, or cluster id.
          - `label` string, required — Human-readable label (resolved name; falls back to `key` when unresolved).
          - `value` number, required — Ranking value: tool calls / signal occurrences / behaviour observations.
    - `deviatingPopulationKeys` string[], required — Population keys (a subset of `sessions.count` / `sessions.users`) that deviate from the baseline by more than 25%.

## 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)
