# Get notification settings

Source: https://workroad.app/docs/api/get-notification-settings

`GET https://workroad.app/api/v1/settings/notifications`

Quiet hours, the email digest, push content, calendar alarms, and each notification kind's channels and timing.

- MCP tool: `getNotificationSettings` on `https://workroad.app/api/mcp`
- Required scopes: settings:view
- Test mode: `GET https://workroad.app/api/test/v1/settings/notifications` checks the request and returns the example response without changing anything.

## Response

`200` OK

- `data`: object, required
  - `quietHoursEnabled`: boolean, required. Push and email wait until quiet hours end.
  - `quietStart`: string, required. Quiet hours start, as local HH:MM in the account's zone.
  - `quietEnd`: string, required. Quiet hours end, as local HH:MM in the account's zone.
  - `pushShowContent`: boolean, required. Push messages name the task, exam or subject. Off sends a generic line instead.
  - `calendarAlarms`: boolean, required. The all-schedules calendar feed adds alarms to task and exam events.
  - `digestFrequency`: one of `"OFF"`, `"DAILY"`, `"WEEKLY"`, required
  - `digestTime`: string, required. When the digest is sent, as local HH:MM in the account's zone.
  - `digestWeekday`: integer, required. The weekly digest's day, 0 for Sunday to 6 for Saturday.
  - `emailSuppressedAt`: string (date-time) or null, required. Set after an email bounced or was reported as spam. Notification email stays off until `resumeNotificationEmail`.
  - `emailSuppressedReason`: one of `"BOUNCE"`, `"COMPLAINT"` or null, required. Why email was suppressed, or null.
  - `emailVerified`: boolean, required. No notification email is sent until the account's address is verified.
  - `kinds`: array of objects, required. Every notification kind's channels and timing, defaults included.
    - `kind`: one of `"TASK_DUE"`, `"EXAM_SOON"`, `"STREAK_AT_RISK"`, `"LESSON_STARTING"`, `"SCHEDULE_SHARE_CHANGED"`, `"GENERATION_FINISHED"`, `"RECORDING_READY"`, `"DIGEST"`, required. `TASK_DUE` before a task is due, `EXAM_SOON` before an exam, `STREAK_AT_RISK` when today's goal isn't met, `LESSON_STARTING` before a lesson, `SCHEDULE_SHARE_CHANGED` when someone shares a timetable or stops, `GENERATION_FINISHED` and `RECORDING_READY` when AI work finishes, `DIGEST` for the email digest.
    - `inApp`: boolean, required. Shown in the bell and the notifications page.
    - `email`: boolean, required. Sent by email once the address is verified.
    - `push`: boolean, required. Sent as a push to every browser the user enabled.
    - `leadMinutes`: integer or null, required. Minutes before a timed task is due (`TASK_DUE`) or a lesson starts (`LESSON_STARTING`). Null for a kind without it.
    - `leadDays`: array of integer or null, required. Days before an all-day task is due (`TASK_DUE`) or an exam (`EXAM_SOON`). Null for a kind without it.
    - `localTime`: string or null, required. When all-day task, exam and streak reminders go out, as local HH:MM. Null for a kind without it.

### Example

```json
{
  "data": {
    "quietHoursEnabled": true,
    "quietStart": "22:00",
    "quietEnd": "07:00",
    "pushShowContent": false,
    "calendarAlarms": false,
    "digestFrequency": "WEEKLY",
    "digestTime": "07:30",
    "digestWeekday": 1,
    "emailSuppressedAt": null,
    "emailSuppressedReason": null,
    "emailVerified": true,
    "kinds": [
      {
        "kind": "TASK_DUE",
        "inApp": true,
        "email": false,
        "push": true,
        "leadMinutes": 60,
        "leadDays": [
          1
        ],
        "localTime": "18:00"
      },
      {
        "kind": "EXAM_SOON",
        "inApp": true,
        "email": true,
        "push": true,
        "leadMinutes": null,
        "leadDays": [
          3,
          1
        ],
        "localTime": "18:00"
      }
    ]
  }
}
```

## Errors

Every error has the body `{ "error": { "code", "message", "details" } }`.

- `400`: Invalid request body or query
- `401`: Missing, invalid, disabled or expired API key
- `403`: The API key lacks the required scope
- `404`: No endpoint exists at this path.
- `405`: Method not allowed. Use a method from the Allow header.
- `429`: Rate limit exceeded. Wait for Retry-After before retrying. The rate-limit headers are absent when the key's own limiter rejected the request before the per-endpoint bucket check ran.
- `500`: Internal server error
