---
title: "Update preferences"
method: PATCH
path: "/users/me"
tags: ["users"]
---

# Update preferences

`PATCH /users/me`

## Request

- Base URL: `https://api.sytecheck.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.sytecheck.app/users/me`
- Auth: HTTP bearer

Update the account's preferences. Email addresses cannot be changed here — use
`POST /auth/change-email`, which confirms the new address first.

## Request body

- UserUpdateRequest
  - `email` string, email, nullable: Deprecated and rejected with 400. Changing an email address requires confirming the new one is reachable, so it goes through POST /auth/change-email instead.
  - `preferences` UserPreferences
    - `default_categories` string[]: Analysis categories run by default when none are specified in a scan request. Valid values: "html", "seo", "links", "visual", "ai_visibility", "accessibility", "performance", "security_headers", "responsive", "content_freshness".
    - `default_breakpoints` string[]: Screenshot breakpoints used by default. Valid values: "mobile" (375 px), "tablet" (768 px), "desktop" (1440 px).
    - `email_notifications` boolean: Send an email when a scan completes.
    - `dark_mode` boolean: Use the dark colour scheme in the web UI.
    - `onboarding_dismissed` boolean: Whether the user has dismissed the first-login onboarding walkthrough.
    - `dismissed_announcement_id` integer, nullable: The in-app announcement the user last dismissed; a newer one shows again.
    - `product_emails` boolean: Occasional follow-up emails after your first scans, including a one-time offer.
  - `signup_source` 'search_google' | 'search_bing' | 'search_duckduckgo' | 'search_other' | 'ai_chatgpt' | 'ai_claude' | 'ai_perplexity' | 'ai_gemini' | 'ai_copilot' | 'ai_other' | 'social' | 'friend' | 'article' | 'directory' | 'ascent' | 'other', nullable: Where the user heard about SyteCheck.
  - `signup_source_detail` string, nullable: Free text accompanying an "other" answer.

## Response `200`

Successful Response

- UserResponse
  - `id` integer, required
  - `email` string, email, required
  - `tier` string, required
  - `role` string, required
  - `email_verified` boolean, required
  - `has_password` boolean, required
  - `preferences` UserPreferences, required
    - `default_categories` string[]: Analysis categories run by default when none are specified in a scan request. Valid values: "html", "seo", "links", "visual", "ai_visibility", "accessibility", "performance", "security_headers", "responsive", "content_freshness".
    - `default_breakpoints` string[]: Screenshot breakpoints used by default. Valid values: "mobile" (375 px), "tablet" (768 px), "desktop" (1440 px).
    - `email_notifications` boolean: Send an email when a scan completes.
    - `dark_mode` boolean: Use the dark colour scheme in the web UI.
    - `onboarding_dismissed` boolean: Whether the user has dismissed the first-login onboarding walkthrough.
    - `dismissed_announcement_id` integer, nullable: The in-app announcement the user last dismissed; a newer one shows again.
    - `product_emails` boolean: Occasional follow-up emails after your first scans, including a one-time offer.
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/sytecheck/apis/sytecheck-api.md) · [All operations](https://skmtc.dev/sytecheck/apis/sytecheck-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sytecheck/apis/sytecheck-api/revisions/797cf6b3e867?raw)
