---
title: "Trigger Experiment Monitoring Run"
method: POST
path: "/api/v1/geo/experiments/{experiment_id}/monitoring-runs"
tags: ["geo-monitoring", "geo-hotels"]
---

# Trigger Experiment Monitoring Run

`POST /api/v1/geo/experiments/{experiment_id}/monitoring-runs`

Experiment-scoped manual "Run Now" — the sole manual-run path (no
hotel-level fallback).

Loads run config from THIS experiment and idempotently redispatches its own
in-flight run (``on_active_conflict="reload"``). If the hotel's single active
slot is held by a *different* experiment, returns 409 and never the other run.

## Path parameters

- `experiment_id` string, uuid, required

## Response `200`

Successful Response

- GeoMonitoringRunRead
  - `id` string, uuid, required
  - `tenant_id` string, uuid, required
  - `geo_hotel_id` string, uuid, required
  - `experiment_id` string, uuid, required
  - `status` string, required
  - `total_tasks` integer, required
  - `completed_tasks` integer, required
  - `successful_tasks` integer
  - `failed_tasks` integer
  - `samples_per_prompt` integer, required
  - `started_at` string, date-time, nullable, required
  - `completed_at` string, date-time, nullable, required
  - `error_message` string, nullable, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `providers` MonitoringProviderCoverage[]
    - `platform_id` string, uuid, required
    - `platform_name` string, required
    - `planned_count` integer, required
    - `succeeded_count` integer, required
    - `failed_count` integer, required
    - `pending_count` integer, required
    - `total_attempts` integer, required
    - `failure_codes` MonitoringFailureCode[]
    - `tasks` MonitoringTaskCoverage[]
      - `task_id` string, uuid, required
      - `prompt_id` string, uuid, required
      - `platform_id` string, uuid, required
      - `platform_name` string, required
      - `run_index` integer, required
      - `status` 'queued' | 'running' | 'retry_wait' | 'succeeded' | 'terminal_failed', required
      - `attempt_count` integer, required
      - `failure_code` 'quota_exhausted' | 'auth_failed' | 'rate_limited' | 'timeout' | 'provider_unavailable' | 'invalid_model' | 'malformed_response' | 'retrieval_not_observed' | 'unknown' — Stable provider failure taxonomy persisted on monitoring tasks.
      - `requested_model` string, nullable
      - `resolved_model` string, required
      - `adapter` string, required
      - `retrieval_policy` string, required
      - `started_at` string, date-time, nullable
      - `completed_at` string, date-time, nullable
      - `last_attempt_at` string, date-time, nullable
  - `data_scan` MonitoringRunCoverage — Lifecycle and provider coverage for one monitoring attempt.
    - `run_id` string, uuid, required
    - `status` string, required
    - `total_tasks` integer, required
    - `completed_tasks` integer, required
    - `successful_tasks` integer, required
    - `failed_tasks` integer, required
    - `started_at` string, date-time, nullable, required
    - `completed_at` string, date-time, nullable, required
    - `created_at` string, date-time, required
    - `providers` MonitoringProviderCoverage[]
      - `platform_id` string, uuid, required
      - `platform_name` string, required
      - `planned_count` integer, required
      - `succeeded_count` integer, required
      - `failed_count` integer, required
      - `pending_count` integer, required
      - `total_attempts` integer, required
      - `failure_codes` MonitoringFailureCode[]
      - `tasks` MonitoringTaskCoverage[]
        - `task_id` string, uuid, required
        - `prompt_id` string, uuid, required
        - `platform_id` string, uuid, required
        - `platform_name` string, required
        - `run_index` integer, required
        - `status` 'queued' | 'running' | 'retry_wait' | 'succeeded' | 'terminal_failed', required
        - `attempt_count` integer, required
        - `failure_code` 'quota_exhausted' | 'auth_failed' | 'rate_limited' | 'timeout' | 'provider_unavailable' | 'invalid_model' | 'malformed_response' | 'retrieval_not_observed' | 'unknown' — Stable provider failure taxonomy persisted on monitoring tasks.
        - `requested_model` string, nullable
        - `resolved_model` string, required
        - `adapter` string, required
        - `retrieval_policy` string, required
        - `started_at` string, date-time, nullable
        - `completed_at` string, date-time, nullable
        - `last_attempt_at` string, date-time, nullable
  - `showing_older_data` boolean
  - `progress_pct` number, required

## Other responses

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

## Changes

- **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

[Change history](https://skmtc.dev/getanana/apis/cleon-api/changes/api/v1/geo/experiments/:experiment_id/monitoring-runs/post.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-service-production.skmtc.workers.dev/v1/apis/getanana/cleon-api/revisions/a9141b6e4e7e/schema)
