---
title: "Mark a saved route as persisted (keeps it past the 30-min TTL)"
method: POST
path: "/routing/route/saved/{id}/persist"
tags: ["routing"]
---

# Mark a saved route as persisted (keeps it past the 30-min TTL)

`POST /routing/route/saved/{id}/persist`

Counts against the customer's per-plan persisted-route cap
(`max_saved_routes`, or the per-customer override when set).

Supplying a `notify` block opts the route into monitoring: the
route-monitor re-evaluates the route on a fixed interval and POSTs a
`route.alert` webhook to `notify.webhook_id` whenever warnings appear
on — or clear from — the route. Alerts are filtered to `min_severity`
and `types`; an optional `valid_from`/`valid_to` window bounds when
monitoring is active. The webhook body is
`{ event: "route.alert", timestamp, data: { route_id, label,
new_warnings[], cleared_warnings[] } }`, HMAC-signed like every other
Road511 webhook.

## Path parameters

- `id` string, required

## Request body

- object
  - `buffer_m` integer
  - `label` string
  - `notify` object
    - `min_severity` 'info' | 'warning' | 'critical'
    - `types` string[]
    - `webhook_id` integer
  - `route_index` integer — Which alternative route to persist. `0` (default) keeps the primary as it was computed. `N > 0` re-enriches that alternative against current data and **replaces** the stored polyline + `routing_response.routes[]` with the chosen route only; other alternatives are dropped from the row.
  - `valid_from` string, date-time
  - `valid_to` string, date-time

## Response `200`

Persisted

## Other responses

- `400` — Invalid request (e.g. route_index out of range)
- `403` — Persisted-routes cap reached
- `404` — Route not found or already persisted

---

[API](https://skmtc.net/road511/apis/road511-traffic-api.md) · [All operations](https://skmtc.net/road511/apis/road511-traffic-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/road511/road511-traffic-api/revisions/92944ef90bfd/schema)
