---
title: "Update Staff User"
method: PATCH
path: "/admin/staff/{user_id}"
tags: ["Admin"]
---

# Update Staff User

`PATCH /admin/staff/{user_id}`

## Request

- Base URL: `https://api.openintake.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.openintake.ai/admin/staff/{user_id}`
- Auth: none declared

Update a staff user's settings. Requires admin authentication.

## Path parameters

- `user_id` string, required

## Request body

- UpdateStaffUserRequest: Request to update a staff user's settings
  - `meeting_phone_number` string, nullable
  - `voip_extension` string, nullable
  - `user_type` 'admin' | 'staff' | 'referral_partner': Enum for user types. NOTE: SQLEnum(UserType) persists the member NAME, so each name must equal its value or writes break. admin/staff are internal firm users with dashboard access. referral_partner is an EXTERNAL user (an outside referrer: an individual, organization, or attorney who sends the firm cases) whose only surface is the branded referral portal — see get_portal_user in app.auth.dependencies; get_user deliberately rejects this type so no internal endpoint is reachable.
  - `role_id` string, uuid, nullable

## Response `200`

Successful Response

- UpdateStaffUserResponse: Response after updating a staff user
  - `id` string, required
  - `meeting_phone_number` string, nullable
  - `voip_extension` string, nullable
  - `user_type` 'admin' | 'staff' | 'referral_partner', required: Enum for user types. NOTE: SQLEnum(UserType) persists the member NAME, so each name must equal its value or writes break. admin/staff are internal firm users with dashboard access. referral_partner is an EXTERNAL user (an outside referrer: an individual, organization, or attorney who sends the firm cases) whose only surface is the branded referral portal — see get_portal_user in app.auth.dependencies; get_user deliberately rejects this type so no internal endpoint is reachable.
  - `role_id` string, nullable
  - `role_name` string, required
  - `message` string, required

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-28** `05472eabc78d`: 3 info
  - added the new optional request property `role_id`
  - added the optional property `role_id` to the response with the `200` status
  - added the required property `role_name` to the response with the `200` status
- **2026-09-17** `0afcd7c31ce2`: 1 warning, 1 info
  - added the new `referral_partner` enum value to the `user_type` response property for the response status `200`
  - added the new `referral_partner` enum value to the request property `user_type/anyOf[subschema #1: UserType]/`

[Operation history](https://skmtc.dev/openintake/apis/openintake-api/changes/admin/staff/:user_id/patch.md)

---

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