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

# Create Alert

`POST /api/v1/alerts`

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

Create a new alert with multiple campground selections.

Creates a campsite availability alert supporting multiple campgrounds
within the same park, each with optional zone/site restrictions.

Users are limited to MAX_ALERTS_PER_USER active alerts.

## Headers

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

## Request body

- AlertCreate: Schema for creating an alert with multiple campground selections.
  - `park_id` string, required
  - `park_name` string, required
  - `campground_selections` CampgroundSelectionCreate[], required: At least one campground must be selected
    - `campground_id` string, required
    - `zone_ids` string[]: Zone IDs to monitor. ['all'] = all zones.
    - `site_ids` string[]: Site IDs to monitor. ['all'] = all sites.
  - `date_start` string, date, required: Arrival date start
  - `date_end` string, date, required: Arrival date end (date_start + window)
  - `days_filter` string
  - `nights_min` integer
  - `notify_push` boolean
  - `notify_email` boolean
  - `notify_sms` boolean
  - `split_stay` boolean
  - `activity_type` string, nullable
  - `equipment_filter_mode` string
  - `sub_equipment_id` integer, nullable
  - `party_size` integer, nullable
  - `tent_pads` integer, nullable
  - `day_use_cells` object, nullable
  - `entry_dates` string[], nullable
  - `webhook_url` string, 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)
