---
title: "Resume Itinerary"
method: POST
path: "/api/v1/alerts/itineraries/{itinerary_id}/resume"
tags: ["itineraries"]
---

# Resume Itinerary

`POST /api/v1/alerts/itineraries/{itinerary_id}/resume`

## 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/itineraries/{itinerary_id}/resume`
- Auth: none declared

Resume a paused route.

``last_fired_signature`` is deliberately **preserved**, which is what an
ordinary alert does: the per-site path filters every change against
existing ``active``/``seen`` ``AlertMatch`` rows for the same
(alert_id, site_id) before it dispatches, so a resumed alert can never
re-announce something the user has already looked at — and its resume
additionally skips one whole match cycle (``_resumed_alert_ids``) to avoid
a stale-state burst.

Clearing the signature here made routes the only surface that re-announces
on resume, and the openings it named kept their ``seen_at`` — so a toggle
produced a push describing start days the card had been rendering as
already-read for days. A notification with nothing behind it is worse than
silence: it teaches the user to ignore the channel.

Preserving it keeps the half that mattered. The matcher is level-triggered,
so if the bookable set CHANGED while the route was paused its signature
differs and the next sweep fires normally — the user IS told what is open
now. Only the exact set they were last notified about stays quiet.

Edits that change the QUESTION (window, party_size, tent_pads) still
re-baseline in ``update_itinerary``: a different question deserves a fresh
answer, exactly as editing an alert's criteria does.

## Path parameters

- `itinerary_id` string, required

## Headers

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

## Response `200`

Successful Response

- ItineraryResponse
  - `id` string, required
  - `park_id` string, required
  - `park_name` string, required
  - `provider` string, required
  - `route_id` string, nullable
  - `window_start` string, date, required
  - `window_end` string, date, required
  - `nights` integer, required
  - `party_size` integer, nullable
  - `tent_pads` integer, nullable
  - `is_active` boolean, required
  - `booking_url` string, nullable
  - `notify_push` boolean
  - `notify_email` boolean
  - `notify_sms` boolean
  - `notification_count` integer, required
  - `last_notified_at` string, date-time, nullable
  - `created_at` string, date-time, nullable
  - `created_via` string, nullable
  - `created_by_agent` string, nullable
  - `scan_count` integer
  - `last_checked_at` string, date-time, nullable
  - `availabilities_found` integer
  - `open_routes` OpenRoute[]
    - `start_date` string, date, required
    - `end_date` string, date, required
    - `nights` OpenRouteNight[]
      - `night_index` integer, required
      - `site_id` string, required
      - `site_name` string, required
    - `booking_url` string, nullable
    - `webview_inject` boolean
    - `is_new` boolean
    - `first_seen_at` string, date-time, nullable
    - `expired_at` string, date-time, nullable
    - `last_seen_at` string, date-time, nullable
    - `booking_closed` boolean
    - `booking_deadline` string, date-time, nullable
  - `night_openings_recent` integer
  - `night_openings_latest` string, date, nullable
  - `distinct_zone_count` integer
  - `legs` ItineraryNightResponse[]
    - `night_index` integer, required
    - `campground_id` string, nullable
    - `site_ids` string[]
    - `site_names` string[]
    - `date_start` string, date, nullable
    - `date_end` string, date, 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)
