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

# Update Notification Preferences

> Set the authenticated user's disabled push notification types

Upserts the acting user's push notification preferences. The request **replaces** the whole disabled-types set — send the complete set you want stored, not a delta. Duplicates are collapsed; only valid event type names are accepted.

Requires authentication. **Acting-user-scoped:** an end-user token (`Authorization: Bearer <accessToken>`) writes its own preferences. A service/master key acts on behalf of a named user via the optional body `userId` — a service key without `userId` is rejected, and an end-user token may not name a different user. Requires the `push` bundle.

## Body Parameters

<ParamField body="disabledTypes" type="string[]" required>
  The complete set of event types to disable for push. Each value must be one of the server's exact event type names (see the [event palette](/notification-preferences#the-event-palette)) — unknown names are rejected. Pass `[]` to re-enable everything (all-on).
</ParamField>

<ParamField body="userId" type="string">
  The acting user whose preferences are written. **Service/master keys only** — a service key must pass it; an end-user token infers it from the auth token and may not name a different user.
</ParamField>

## Response

Returns `200` with the stored set (deduplicated).

```json theme={null}
{ "disabledTypes": ["comment-mention"] }
```

## Error Responses

<AccordionGroup>
  <Accordion title="Unauthorized — 401 / 403">
    ```json theme={null}
    { "error": "Unauthorized", "code": "notification-preferences/unauthorized" }
    ```

    `403 notification-preferences/unauthorized` when an end-user token names a `userId` other than its own. A `401` is returned when no valid credential is present.
  </Accordion>

  <Accordion title="Missing User ID — 400">
    ```json theme={null}
    { "error": "Missing user ID", "code": "notification-preferences/missing-user-id" }
    ```

    Returned when a service/master key omits the required `userId` (it has no implicit session user).
  </Accordion>

  <Accordion title="Invalid Body — 400">
    ```json theme={null}
    { "error": "...", "code": "notification-preferences/invalid-body" }
    ```

    Returned when `disabledTypes` contains a value that is not a recognized event type name.
  </Accordion>

  <Accordion title="Bundle Not Installed — 403">
    ```json theme={null}
    { "error": "...", "code": "database/tables-not-available" }
    ```

    Returned when the `push` bundle is not installed for this project.
  </Accordion>
</AccordionGroup>

## See Also

* [Get Notification Preferences](/api-reference/push-notifications/get-preferences)
* [`useNotificationPreferences`](/hooks/push/use-notification-preferences)
* [Notification Preferences & Mute](/notification-preferences)
