---
title: "List Experiments"
method: GET
path: "/api/v1/geo/hotels/{geo_hotel_id}/experiments"
tags: ["geo-monitoring", "geo-hotels"]
---

# List Experiments

`GET /api/v1/geo/hotels/{geo_hotel_id}/experiments`

## Request

- Base URL: `https://api.getanana.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.getanana.com/api/v1/geo/hotels/{geo_hotel_id}/experiments`
- Auth: none declared

Per-experiment cards for the hotel-level portfolio page.

``ai_visibility_rate`` is the equal-cell AI Visibility Rate over the inclusive
selected range ``[start_date, end_date]`` — the SAME definition, canonical run
selection, and manual fallback the experiment Overview uses — with a
strict-composition ``visibility_delta`` vs the immediately-preceding equal
day-count period, a canonical daily ``daily`` series, per-provider
``provider_visibility``, and the ``usable_responses`` count, all from
``compute_experiment_card_summaries`` in a fixed number of batched queries (no
per-card Overview calls, no Trends row-pooling). ``last_run_at`` is the real last
completed-run time. ``title`` may be ``None`` — the UI falls back to
"Experiment N". ``group_id`` carries the experiment's optional group (``None``
when ungrouped) so the portfolio page can partition Groups from standalone
Experiments without a second read; it costs no extra query and nothing about a
group is aggregated here.

## Path parameters

- `geo_hotel_id` string, uuid, required

## Query parameters

- `start_date` string, date, required
- `end_date` string, date, required

## Response `200`

Successful Response

- ExperimentCard[]
  - `id` string, uuid, required
  - `sequence_number` integer, required
  - `title` string, nullable
  - `approved_at` string, date-time, nullable
  - `daily_scan_enabled` boolean
  - `daily_scan_hour` integer, nullable
  - `last_run_at` string, date-time, nullable
  - `ai_visibility_rate` number, nullable
  - `visibility_delta` number, nullable
  - `period_state` 'comparable' | 'not_comparable' | 'no_prior_data'
  - `takeaway` CardTakeawayRead: Structured, descriptive evidence for the one-line experiment-card takeaway. Facts only — the frontend composes the copy. ``direction`` describes the experiment's overall period movement; strongest/weakest platform describe the CURRENT distribution; the top deficit describes the CURRENT gap. A field is ``None`` when its claim-specific evidence gate did not pass (platform comparison needs usable evidence from ≥2 platforms; deficit fields need an eligible deficit cell). These are NEVER a causal attribution of the movement to any platform.
    - `kind` 'improving' | 'declining' | 'structural_gap' | 'consistent' | 'current_state', required
    - `direction` 'up' | 'down' | 'flat', nullable
    - `strongest_platform_name` string, nullable
    - `strongest_platform_rate` number, nullable
    - `weakest_platform_name` string, nullable
    - `weakest_platform_rate` number, nullable
    - `top_deficit_prompt_text` string, nullable
    - `top_deficit_platform_name` string, nullable
  - `daily` DailyVisibilityPoint[]
    - `date` string, date, required
    - `rate` number, required
  - `provider_visibility` ProviderVisibility[]
    - `platform_name` string, required
    - `rate` number, nullable
  - `usable_responses` integer
  - `group_id` string, uuid, nullable
  - `position` object

## Other responses

- `404`: GEO hotel not found
- `422`: Validation Error

## Changes

> 55 revisions in range; 1 not diffed.

- **2026-09-03** `d65b8fefae34`: 2 info
  - added the optional property `detail/items/ctx` to the response with the `422` status
  - added the optional property `detail/items/input` to the response with the `422` status

[Operation history](https://skmtc.dev/getanana/apis/cleon-api/changes/api/v1/geo/hotels/:geo_hotel_id/experiments/get.md)

---

[API](https://skmtc.dev/getanana/apis/cleon-api.md) · [All operations](https://skmtc.dev/getanana/apis/cleon-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getanana/apis/cleon-api/revisions/4d9d38769a75?raw)
