# Update language, time zone or privacy

Source: https://workroad.app/docs/api/update-preferences

`PATCH https://workroad.app/api/v1/settings/preferences`

Changing the time zone moves every task's due date so it keeps its date and time on the clock, the same as changing it in Settings → Account.

- MCP tool: `updatePreferences` on `https://workroad.app/api/mcp`
- Required scopes: settings:update
- Test mode: `PATCH https://workroad.app/api/test/v1/settings/preferences` checks the request and returns the example response without changing anything.

## Request body

JSON.

- `locale`: one of `"en"`, `"de"`, `"es"`, `"fr"`, `"it"`. One of the five app languages.
- `timeZone`: string, 1-64 characters. An IANA zone name. Aliases such as `Asia/Calcutta` are stored by their canonical name. Every task keeps its due date and time on the clock, so a task due at 09:00 is still due at 09:00 in the new zone.
- `showOnLeaderboards`: boolean

## Response

`200` OK

- `data`: object, required
  - `locale`: one of `"en"`, `"de"`, `"es"`, `"fr"`, `"it"` or null, required. The language of the app, emails, notifications and calendar feeds. Null until the user picks one; the app then follows the browser.
  - `timeZone`: string or null, required. The IANA time zone the account's days and due dates use, such as `Europe/London`. Null until the app has captured one; the API then uses UTC.
  - `showOnLeaderboards`: boolean, required. Whether the user appears on the global task and streak leaderboards and shows study stats on their profile.

### Example

```json
{
  "data": {
    "locale": "en",
    "timeZone": "Europe/London",
    "showOnLeaderboards": true
  }
}
```

## Errors

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

- `400`: Invalid body, no field to update, or an unknown zone.
- `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.
- `409`: The time zone changed elsewhere during the request. Read it again.
- `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
