# Patch User

`PATCH /Users/{id}`

## Description

Partially updates a user. PATCH supports the same mutable surface as PUT (Replace User).

**Supported operations (`add` / `replace`):**
- `active` — archive (`false`) or reactivate (`true`) a user
- `name.givenName` / `name.familyName` — name components may be patched individually; they merge with the stored name
- `externalId`
- `role` — via the `urn:ro.am:params:scim:schemas:extension:roam:2.0:User` extension, as a pathed operation or a path-less operation keyed by the extension URN
- `userName` + `emails` — changing both together to the same new address performs an email change (see Replace User); changing only one returns 400, and a conflicting change returns 409

**Operation forms:**
- Operations may target an attribute path (`"path": "active"`) or omit the path and provide an object of attribute/value pairs (RFC 7644 §3.5.2.1) — the form Okta uses for deactivation: `{"op": "replace", "value": {"active": false}}`
- Operation names are case-insensitive (`Replace` and `replace` both work); `add` on a single-valued attribute behaves as `replace`
- Multiple operations are validated up front and folded into a single update, so a failing operation cannot leave a partial update behind

**Tolerated / not supported:**
- Attributes Roam does not store (`displayName`, `title`, `addresses`, `phoneNumbers`, enterprise-extension fields, ...) are logged and ignored rather than failing the request, so a bundled IdP profile push still succeeds
- `remove` is rejected (400) for stored attributes and ignored for unsupported ones

See [RFC 7644 §3.5.2](https://www.rfc-editor.org/rfc/rfc7644#section-3.5.2) for SCIM PATCH operations.

## Request Body

## Responses

### 200 - Updated user

---

*Machine-readable API documentation.*
*Full documentation: https://developer.ro.am/docs/scim/01-users-patch*
