---
title: "Update Employee Identity"
method: PUT
path: "/admin/employee-identities/{user_id}"
tags: ["admin", "employee-identities"]
---

# Update Employee Identity

`PUT /admin/employee-identities/{user_id}`

## Request

- Base URL: `https://api-docs.upsmith.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api-docs.upsmith.com/admin/employee-identities/{user_id}`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

Set, correct or clear who an employee is in Linear, Plain or Slack.

An omitted field is left alone; an explicit ``null`` clears it. Setting one locks that
source by default — the ingest re-resolves on every reconcile, so an unlocked
correction is overwritten within the hour.

Clearing matters more here than elsewhere: a person can hold two accounts in the same
system, so "not this one" is a real answer that exact-email matching cannot reach.

## Path parameters

- `user_id` string, required

## Headers

- `organization-id` string, nullable
- `timezone` string
- `x-user-id` string, nullable
- `x-actor-email` string, nullable
- `x-request-source` string, nullable
- `x-operation-id` string, nullable
- `x-commit-message` string, nullable
- `x-confirmation-id` string, nullable
- `x-chat-id` string, nullable

## Request body

- UpdateEmployeeIdentityRequest: Who this employee is in Linear, Plain and Slack. Internal only — deciding which Linear account belongs to a colleague is not something a customer's admin can reach, so this lives on the admin router. An omitted field is left alone; an explicit ``null`` clears the identity. Callers read the difference off ``model_fields_set``. Clearing matters here more than most places: a person can hold two accounts in the same system, so "not this one" is a real answer.
  - `linear_user_id` string, nullable
  - `linear_handle` string, nullable
  - `linear_email` string, nullable
  - `plain_user_id` string, nullable
  - `plain_email` string, nullable
  - `slack_user_id` string, nullable
  - `slack_handle` string, nullable
  - `identity_locked_sources` string[], nullable
  - `lock` boolean

## Response `200`

Successful Response

- EmployeeIdentityState
  - `user_id` string, required
  - `email` string, nullable
  - `name` string, nullable
  - `status` 'unresolved' | 'partial' | 'resolved', required: Ordered by how much attention it wants.
  - `identity_locked_sources` string[]
  - `identities` object
  - `departed` boolean

## Other responses

- `422`: Validation Error

---

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