---
title: "Update Theme Preference"
method: PATCH
path: "/auth/me/theme"
tags: ["auth"]
---

# Update Theme Preference

`PATCH /auth/me/theme`

Persist the user's theme preference (system / light / dark / null).

`null` clears the column so the client falls back to its default
(system). Pydantic enforces the enum at request validation time so an
arbitrary string can't reach the column.

## Request body

- ThemePreferenceRequest — Body for PATCH /auth/me/theme. `None` clears the stored preference and lets the client default (system) take over.
  - `theme_preference` 'system' | 'light' | 'dark', nullable

## Response `200`

Successful Response

- UserResponse
  - `id` string, required
  - `github_username` string, nullable
  - `avatar_url` string, nullable
  - `email` string, nullable
  - `tier` 'free' | 'pro' | 'teams' | 'admin', required
  - `personal_tier` 'free' | 'pro' | 'teams' | 'admin', required
  - `effective_tier` 'free' | 'pro' | 'teams' | 'admin', required
  - `billing_access_source` 'none' | 'subscription' | 'comped' | 'legacy_unknown', required
  - `subscription_status` 'pending' | 'active' | 'past_due' | 'on_hold' | 'paused' | 'cancelled' | 'failed' | 'expired', nullable
  - `cancel_at_period_end` boolean
  - `current_period_end` string, date-time, nullable
  - `past_due_ends_at` string, date-time, nullable
  - `llm_credit_balance_cents` integer, required
  - `monthly_credit_reset_at` string, date-time, nullable
  - `billing_interval` string, nullable
  - `preferred_model` string, nullable
  - `theme_preference` 'system' | 'light' | 'dark', nullable
  - `notification_preferences` object
  - `deleted_at` string, date-time, nullable
  - `has_subscription` boolean
  - `has_billing_account` boolean
  - `free_answers_used` integer, nullable
  - `free_answers_limit` integer, nullable
  - `free_answers_remaining` integer, nullable

## Other responses

- `422` — Validation Error

## Changes

- **2026-09-12** `ab200f4d1489` — 7 info
  - added the optional property `cancel_at_period_end` to the response with the `200` status
  - added the optional property `current_period_end` to the response with the `200` status
  - added the optional property `past_due_ends_at` to the response with the `200` status
  - added the optional property `subscription_status` to the response with the `200` status
  - …3 more

[Change history](https://skmtc.dev/repowise/apis/repowise-hosted-api/changes/auth/me/theme/patch.md)

---

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