---
title: "Set"
method: PATCH
path: "/users/me/preferences/notifications"
tags: ["Users"]
---

# Set

`PATCH /users/me/preferences/notifications`

Sets the authenticated user's notification preferences. Each preference is addressed by `scope`, not by id, so a scope read back from either list endpoint can be sent straight here.

A scope naming an experience with no topic sets that experience's level, and accepts all three levels. Any other scope sets a topic override, which is binary — `all` or `nothing` — and requires a `channel`.

`level: null` clears the preference. Preferences are stored as overrides, so clearing one means the scope inherits its default again rather than being switched off.

The batch is applied in one transaction: if any entry is rejected, none are written. Experience levels are applied before topic overrides, because setting a level replaces every topic preference for that experience — so an override sent alongside a level wins. The response reports what each scope now resolves to, in the order the entries were sent.

## Request body

- object
  - `preferences` object[], required — The preferences to set, at most 100 per request.
    - `level` 'all' | 'mentions' | 'nothing' | 'null', nullable, required — What the user is notified about in this scope. `mentions` is only valid for an experience level. `null` clears the preference.
    - `scope` object, required — What the preference applies to. `null` on a dimension means the preference is not narrowed there.
      - `account_id` string, nullable — Account to scope the preference to (member notifications), `biz_` tag.
      - `channel` 'in_app' | 'mobile' | 'null', nullable — Delivery channel the preference applies to. Required when setting a topic override.
      - `experience_id` string, nullable — Experience to scope the preference to (`exp_` tag). Requires `account_id` when a `topic_id` is also given.
      - `team_account_id` string, nullable — Account whose team notifications the preference is scoped to, `biz_` tag.
      - `topic_id` string, nullable — Notification topic to scope the preference to, `topic_` tag.

## Response `200`

preferences set

- object
  - `data` NotificationPreferenceState[], required
    - `level` 'all' | 'mentions' | 'nothing' | 'null', nullable, required — What the user is now notified about in this scope, or `null` if the preference was cleared and the scope inherits its default again.
    - `object` 'notification_preference' | 'experience_notification_preference', required — Which kind of preference was written: `experience_notification_preference` for an experience level, `notification_preference` for a topic override.
    - `scope` NotificationPreferenceScope, required
      - `account_id` string, nullable, required — Account the preference is scoped to (member notifications), prefixed `biz_`.
      - `channel` 'in_app' | 'mobile' | 'null', nullable, required — Delivery channel the preference applies to. `null` applies to every channel.
      - `experience_id` string, nullable, required — Experience the preference is scoped to, prefixed `exp_`.
      - `team_account_id` string, nullable, required — Account whose team notifications the preference is scoped to, prefixed `biz_`.
      - `topic_id` string, nullable, required — Notification topic the preference is scoped to, prefixed `topic_`.

## Other responses

- `400` — Invalid Parameters
- `404` — Resource not found

---

[API](https://skmtc.net/whop/apis/whop-api.md) · [All operations](https://skmtc.net/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/whop/whop-api/versions/db0883548bc5/schema)
