---
title: "Update Camera Group Monitoring Schedule"
method: PUT
path: "/camera-groups/{group_id}/monitoring-schedule"
tags: ["camera-groups"]
---

# Update Camera Group Monitoring Schedule

`PUT /camera-groups/{group_id}/monitoring-schedule`

## Request

- Base URL: `https://api.verdun.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.verdun.ai/camera-groups/{group_id}/monitoring-schedule`
- Auth: HTTP bearer

Give this camera group a week. THIS is the write that changes monitoring.

Every member camera without its own override now follows THIS week instead
of the site schedule (overlapping scheduled groups combine under "off
wins") — so an off cell here silences a camera the site schedule watches,
and the ingest gate starts 409-ing its events; a monitored cell here keeps
the camera at monitored even while the site week says heightened.

## Path parameters

- `group_id` string, required

## Request body

- UpdateMonitoringScheduleRequest: Replace a site's or camera's whole week at 15-minute grain. Saving through this endpoint makes the schedule authoritative at quarter- hour grain (`resolution_minutes` becomes 15) and rewrites the legacy 7x24 view as its coarsened projection in the same transaction.
  - `slots` array[], required: 7 rows (Monday-Sunday) of 96 quarter-hour monitor states.
    - string[]
  - `notes` string, nullable: Free-form operator notes about the schedule.

## Response `200`

Successful Response

- UpdateMonitoringScheduleResponse
  - `schedule` MonitoringScheduleModel, required: A schedule at 15-minute grain, and which of the THREE targets owns it. Exactly one of site_id / camera_id / group_id is set (DB check `monitoring_schedules_one_target`). What that target means to the resolver: a camera schedule is an OVERRIDE and wins outright; a camera-group schedule replaces the site's for its members (overlapping scheduled groups combine under "off wins"); the site schedule is the fallback when neither exists.
    - `slots` array[], required: 7 rows (Monday-Sunday) of 96 quarter-hour monitor states.
      - string[]
    - `notes` string, nullable: Free-form operator notes about the schedule.
    - `id` string, uuid, required: The schedule ID.
    - `site_id` string, uuid, nullable: The site this schedule belongs to (null for camera overrides and camera-group schedules).
    - `camera_id` string, uuid, nullable: The camera this schedule overrides (null for site and camera-group schedules).
    - `group_id` string, uuid, nullable: The CAMERA GROUP this schedule belongs to (null for site and camera schedules). Additive-optional: safe to ignore. A camera group's schedule replaces the site's for every member camera without its own override; overlapping scheduled groups combine under 'off wins'.
    - `resolution_minutes` integer, required: Authoritative grain: 15 once this schedule has been saved at quarter-hour grain, 60 while it is still an hourly schedule rendered at 15-minute resolution for editing.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/verdun/apis/verdun-api.md) - [All operations](https://skmtc.dev/verdun/apis/verdun-api/llms.txt) - [OpenAPI document](https://skmtc.dev/verdun/apis/verdun-api/revisions/35a2a6ebedda?raw)
