---
title: "Create Hotspot Alert"
method: POST
path: "/api/v1/alerts/hotspot"
tags: ["alerts"]
---

# Create Hotspot Alert

`POST /api/v1/alerts/hotspot`

## 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/hotspot`
- Auth: none declared

Create a hot spot watch alert.

Subscribes the user to cancellation notifications on high-demand
stats-tier sites. No campground selections needed — the system
routes stats-tier cancellations matching the user's date range
and park filter automatically.

Requires Regular tier or above.

## Headers

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

## Request body

- HotSpotAlertCreate: Schema for creating a hot spot watch alert. Hot spot alerts subscribe users to cancellation notifications on high-demand stats-tier sites without needing specific campground selections. Push-only: Hot Spot alerts can generate 50-300 notifications/day, so email and SMS are always disabled.
  - `park_id` string, required: Specific park ID or '__all__' for all parks
  - `park_name` string, required: Display name or 'Tous les parcs'
  - `provider` string: Provider for hotspot matching
  - `date_start` string, date, required: Broad window start (e.g., June 1)
  - `date_end` string, date, required: Broad window end (e.g., Aug 31)
  - `days_filter` string
  - `nights_min` integer
  - `notify_push` boolean
  - `notify_email` boolean
  - `notify_sms` boolean
  - `activity_type` string, required
  - `equipment_filter_mode` string
  - `sub_equipment_id` integer, nullable
  - `party_size` integer, nullable
  - `has_electricity` boolean, nullable
  - `is_accessible` boolean, nullable
  - `pets_only` boolean, nullable
  - `is_pull_through` boolean, nullable
  - `is_tent_only` boolean, nullable
  - `shade_only` boolean, nullable
  - `waterfront_only` boolean, nullable

## Response `201`

Successful Response

- AlertResponse: Schema for alert response with campground selections.
  - `id` string, required
  - `user_id` string, required
  - `alert_type` string
  - `provider` string, nullable
  - `park_id` string, required
  - `park_name` string, required
  - `date_start` string, date, required
  - `date_end` string, date, required
  - `days_filter` string
  - `split_stay` boolean
  - `nights_min` integer, required
  - `nights_max` integer, nullable, required
  - `campground_selections` CampgroundSelectionResponse[]
    - `id` string, required
    - `campground_id` string, required
    - `zone_ids` string[]
    - `site_ids` string[]
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `is_active` boolean, required
  - `notify_push` boolean, required
  - `notify_email` boolean, required
  - `notify_sms` boolean
  - `party_size` integer, nullable
  - `sub_equipment_id` integer, nullable
  - `op_access_point_resource_id` integer, nullable
  - `tent_pads` integer, nullable
  - `day_use_cells` object, nullable
  - `entry_dates` string[], nullable
  - `activity_type` string, nullable
  - `equipment_filter_mode` string
  - `has_electricity` boolean, nullable
  - `is_accessible` boolean, nullable
  - `pets_only` boolean, nullable
  - `is_pull_through` boolean, nullable
  - `is_tent_only` boolean, nullable
  - `shade_only` boolean, nullable
  - `waterfront_only` boolean, nullable
  - `booking_url` string, nullable
  - `out_of_season` OutOfSeasonHint: Why an alert's dates cannot match: every watched site is out of season. The dates are reported ONLY when every watched site shares one season, and are NULL otherwise. An aggregate across differing seasons contradicts its own message: a site open Jan-Mar beside one open Sep-Dec spans the whole year, so a June request would be told it falls outside "Jan 1 - Dec 31". Widening to the union, or narrowing to the intersection, is wrong in the same way — only unanimity can be stated as a single range. ``distinct_seasons`` lets the app choose its wording: one season gets "this park runs May-October", several get "none of the N sites you picked are open then". ``sites_checked`` counts how much of the selection had a known season at all, so the app can soften when it is a small fraction.
    - `season_start` string, nullable
    - `season_end` string, nullable
    - `distinct_seasons` integer, required
    - `sites_checked` integer, required
  - `last_checked_at` string, nullable, required
  - `last_notified_at` string, nullable, required
  - `notification_count` integer, required
  - `availabilities_found` integer
  - `cancellations_found` integer
  - `scan_count` integer
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `created_via` string, nullable
  - `created_by_agent` string, 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)
