---
title: "Get Existing Alert Odds"
method: GET
path: "/api/v1/alerts/{alert_id}/odds"
tags: ["alerts"]
---

# Get Existing Alert Odds

`GET /api/v1/alerts/{alert_id}/odds`

## Request

- Base URL: `https://api.alert.camp` (the document declares no server; this is the origin it was published from)
- URL: `https://api.alert.camp/api/v1/alerts/{alert_id}/odds`
- Auth: none declared

Score an EXISTING alert's odds (alert-detail screen).

Same engine as the draft preview (``POST /odds``), but the scoring scope is
derived SERVER-SIDE from the stored alert + its campground selections — the
single source of truth — rather than the client re-deriving the request and
risking drift (e.g. day-of-week filter, split-stay, the explicit-site set).
Read-only.

## Path parameters

- `alert_id` string, required

## Headers

- `authorization` string, nullable
- `x-dev-user-id` string, nullable
- `x-app-version` string, nullable

## Response `200`

Successful Response

- AlertOddsResponse: Qualitative odds band + evidence + improvement suggestions. ``band`` is one of: ``limited_data`` | ``low`` | ``moderate`` | ``good``. Intentionally NO probability percentage — the band + evidence numbers are the trustworthy surface. ``evidence`` is a flat map the client renders into a localized line (e.g. observation_days, total_openings, max_nights_seen).
  - `band` string, required
  - `evidence` object
  - `suggestions` AlertOddsSuggestion[]
    - `type` string, required
    - `nights_min` integer, nullable
    - `qualifying_openings` integer, nullable
    - `uplift` integer, nullable
    - `recommended_tier` string, nullable
    - `min_rebooking_minutes` integer, nullable
    - `median_rebooking_minutes` integer, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/alert/apis/alertcamp.md) · [All operations](https://skmtc.dev/alert/apis/alertcamp/llms.txt) · [OpenAPI document](https://skmtc.dev/alert/apis/alertcamp/revisions/864c8c9ef833?raw)
