---
title: "Approve Experiment"
method: POST
path: "/api/v1/geo/experiments/{experiment_id}/approve"
tags: ["geo-monitoring", "geo-hotels"]
---

# Approve Experiment

`POST /api/v1/geo/experiments/{experiment_id}/approve`

Approve a Draft experiment: set ``approved_at`` and create its FIRST run,
atomically, in one request transaction.

Order: (1) reject with 400 if the Draft has no active prompt (before any
write); (2) atomic compare-and-set ``approved_at`` (0 rows → already approved →
409); (3) create the first run for THIS experiment with
``on_active_conflict="raise"`` — a hotel active slot held by another experiment
raises the active-run IntegrityError → 409 and the whole transaction (incl.
``approved_at``) rolls back; (4) commit once, then dispatch the run in the
background only when it was actually created.

## Path parameters

- `experiment_id` string, uuid, required

## Response `200`

Successful Response

- GeoExperimentRead
  - `id` string, uuid, required
  - `tenant_id` string, uuid, required
  - `geo_hotel_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
  - `samples_per_prompt` integer, nullable
  - `model_by_platform` object
  - `group_id` string, uuid, nullable
  - `position` object

## Other responses

- `404` — Experiment not found
- `422` — Validation Error

---

[API](https://skmtc.dev/getanana/apis/cleon-api.md) · [All operations](https://skmtc.dev/getanana/apis/cleon-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/getanana/cleon-api/revisions/3ad158624c53/schema)
