---
title: "Update document user"
method: PUT
path: "/documents/{document}/users/{documentUser}"
tags: ["Document Operations"]
---

# Update document user

`PUT /documents/{document}/users/{documentUser}`

<small>Requires an API token with the **Document Manager** role.</small>

Updates a [document user's](/#document-users) details and/or access level (`role`).

Changing the `role` never affects the user's [signatory](/#signatories) status - a signatory who is demoted
to `viewer` remains a signatory. Use the signatory endpoints to manage signing.

> **Note:** When updating a user who has an existing user in the current fynk account (`has_account_user` is
> `true`), only `role` and `party_uuid` can be updated. Attempting to update other fields (`first_name`,
> `last_name`, `title`) will cause the request to be rejected with a validation error.

A document must always have at least one `owner`; demoting the last owner will return a `409` response.

## Path parameters

- `document` string, required
- `documentUser` string, required

## Request body

- UpdateDocumentUserRequest — All fields are optional. Only the fields to be updated need to be provided.
  - `role` 'owner' | 'collaborator' | 'viewer' — The representation of a document user's access level in the external API. Internally the access level is held in the document user's roles (where a plain viewer simply has no role); the external API always exposes it as one of these three values.
  - `party_uuid` string, uuid — UUID of the [party](/#parties) the user belongs to
  - `first_name` string, nullable — Cannot be updated if the document user's `has_account_user` field is true
  - `last_name` string, nullable — Cannot be updated if the document user's `has_account_user` field is true
  - `title` string, nullable — Cannot be updated if the document user's `has_account_user` field is true

## Response `200`

`DocumentUserResource`

- object
  - `data` DocumentUserResource, required
    - `uuid` string, required
    - `first_name` string, nullable, required
    - `last_name` string, nullable, required
    - `email` string, nullable, required
    - `title` string, nullable, required
    - `party_uuid` string, nullable, required — UUID of the [party](/#parties) the user belongs to, if any
    - `has_account_user` boolean, required — `true` if the document user has a fynk user belonging to your account
    - `role` 'owner' | 'collaborator' | 'viewer', required — The representation of a document user's access level in the external API. Internally the access level is held in the document user's roles (where a plain viewer simply has no role); the external API always exposes it as one of these three values.
    - `is_signatory` boolean, required — `true` if the user is also a [signatory](/#signatories) of the document. Use the signatory endpoints to manage this
    - `personal_link` ShareableLinkResource
      - `uuid` string, required
      - `url` string, required — The link URL. Treat it like a secret: anyone who has the URL can access the document with it
      - `expires_at` string, date-time, nullable, required — When the link stops working. `null` means the link never expires
      - `message` string, nullable, required — A personal message shown when the link is opened. Always `null` for public links
      - `created_at` string, date-time, nullable, required

## Other responses

- `401` — Unauthenticated
- `403` — Authorization error
- `404` — Not found
- `409` — The resource's current state prevents the requested change
- `422` — Validation error

---

[API](https://skmtc.dev/fynk/apis/fynk-api-reference.md) · [All operations](https://skmtc.dev/fynk/apis/fynk-api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/fynk/fynk-api-reference/revisions/9657a6757f59/schema)
