> ## Documentation Index
> Fetch the complete documentation index at: https://docs.scrubbe.com/llms.txt
> Use this file to discover all available pages before exploring further.

# On-Call Scheduling: Shifts, Rotations, and Alerts

> Learn how to assign team members to on-call shifts, configure notification quiet periods with silent hours, and connect on-call rotation to incident routing.

On-call scheduling in Scrubbe lets you define which team member is responsible for responding to incidents during any given time window. When an incident is created and routed to the on-call contact — either by assigning `assignedToEmail` or through automatic escalation — Scrubbe knows who to notify via your configured channels (Slack, SMS, WhatsApp, or email). Maintaining accurate on-call assignments is the foundation of reliable incident response.

## Assigning a team member to an on-call shift

Use `POST /api/v1/assign-member` to create an on-call assignment for a user on a specific date:

```http theme={null}
POST /api/v1/assign-member
```

```json theme={null}
{
  "userId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "date": "2026-03-15",
  "startTime": "09:00",
  "endTime": "17:00"
}
```

| Field       | Description                                  |
| ----------- | -------------------------------------------- |
| `userId`    | UUID of the team member being assigned       |
| `date`      | Date of the shift in `YYYY-MM-DD` format     |
| `startTime` | Start of the shift in `HH:MM` 24-hour format |
| `endTime`   | End of the shift in `HH:MM` 24-hour format   |

You can create multiple assignments on the same date to model overlapping coverage or handoffs between engineers.

<Note>
  You can look up user IDs from the members list at `GET /api/v1/business/get_members`.
</Note>

## Viewing assignments

Retrieve all on-call assignments for your organization:

```http theme={null}
GET /api/v1/get-all-assign
```

Retrieve a specific assignment by its ID:

```http theme={null}
GET /api/v1/get-assign/:id
```

These endpoints return the full assignment record including the user details, date, and time window.

## Silent hours

Silent hours define notification quiet periods — windows during which Scrubbe suppresses non-critical alerts to prevent unnecessary interruptions. You configure silent hours per team, day of the week, and timezone.

### Publishing silent hour rules

`POST /api/v1/silent-hours` replaces all existing quiet hour rules for your organization with the set you provide:

```http theme={null}
POST /api/v1/silent-hours
```

```json theme={null}
{
  "rules": [
    {
      "name": "Frontend Platform",
      "startTime": "21:00",
      "endTime": "08:00",
      "timezone": "America/New_York",
      "daysOfWeek": [1, 2, 3, 4, 5],
      "teamScope": "frontend-team",
      "isActive": true
    }
  ]
}
```

| Field        | Description                                                   |
| ------------ | ------------------------------------------------------------- |
| `name`       | Label for the rule (e.g. team name or shift type)             |
| `startTime`  | Start of the quiet period in `HH:MM` 24-hour format           |
| `endTime`    | End of the quiet period in `HH:MM` 24-hour format             |
| `timezone`   | IANA timezone name (e.g. `America/New_York`, `Europe/London`) |
| `daysOfWeek` | Array of day numbers — `1` = Monday through `7` = Sunday      |
| `teamScope`  | Optional team identifier this rule applies to                 |
| `isActive`   | Set to `false` to disable a rule without deleting it          |

<Warning>
  `POST /api/v1/silent-hours` replaces your entire set of quiet hour rules. If you want to preserve existing rules, retrieve them first with `GET /api/v1/silent-hours` and include them in the replacement payload.
</Warning>

### Updating and deleting individual rules

To update a single rule without replacing your full set:

```http theme={null}
PUT /api/v1/silent-hours/:id
```

To delete a rule:

```http theme={null}
DELETE /api/v1/silent-hours/:id
```

## How on-call connects to incident routing

When Scrubbe creates or escalates an incident, it routes notifications to the team member whose on-call assignment covers the current date and time. If `autoEscalate` is enabled in your IMS configuration, Scrubbe escalates unacknowledged incidents to the `escalationContact` defined in the matching SLA policy — which is typically your on-call lead or manager.

To keep routing accurate:

* Ensure every day has at least one active on-call assignment.
* Set your IMS timezone (`PUT /api/v1/ims/config`) to match the timezone your team operates in.
* Define silent hours so that low-priority notifications don't wake engineers during off-hours.
