---
title: "Update Coverage Grants"
method: PUT
path: "/scheduling/coverage-groups/{group_id}/grants"
tags: ["scheduling"]
---

# Update Coverage Grants

`PUT /scheduling/coverage-groups/{group_id}/grants`

## 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/scheduling/coverage-groups/{group_id}/grants`
- Auth: HTTP bearer

## Path parameters

- `group_id` string, required

## Request body

- UpdateCoverageGrantsRequest: Replace-all with MOVE semantics: the group's grants become exactly these lists, and any requested parent/site currently owned by ANOTHER group is stolen from it in the same transaction (membership is exclusive). The one 409: requesting a site that another group covers via a PARENT grant - move the parent, not the site.
  - `parent_ids` string[], required: Parents granted wholesale - each covers every current AND future site under it, so onboarding never touches coverage.
  - `site_ids` string[], required: Individually granted sites (exceptions outside the parent grants).

## Response `200`

Successful Response

- UpdateCoverageGroupResponse
  - `group` CoverageGroupModel, required
    - `id` string, uuid, required: The coverage group ID.
    - `name` string, required: Display name of the group.
    - `color` string, required: Display color used in schedule grids and chips.
    - `grants` CoverageGrantModel[], required: The parent/site grants that define the group's sites.
      - `id` string, uuid, required: The grant ID.
      - `parent_id` string, uuid, nullable: Parent granted wholesale - covers every current AND future site under it (null for site grants).
      - `site_id` string, uuid, nullable: Individually granted site (null for parent grants).
    - `site_count` integer, required: Distinct sites currently covered (parent grants expanded).
    - `members` CoverageGroupMemberModel[]: Operators who are standing members of this group. Their tenant scope includes this group's sites -- SCOPE ONLY, never a permission. Deleting a group with members is refused (409).
      - `id` string, uuid, required: The operator ID.
      - `first_name` string, required: Member's first name.
      - `last_name` string, required: Member's last name.
      - `role` 'owner' | 'operator' | 'site_manager' | 'read_only' | 'account_manager' | 'monitoring_manager' | 'location_manager' | 'support', required
    - `member_count` integer: How many operators are standing members of this group.

## 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)
