---
title: "POST /api/users"
method: POST
path: "/api/users"
tags: ["UserService"]
---

# POST /api/users

`POST /api/users`

## Request

- The document declares no server URL.
- Auth: none declared

CreateUser creates a user. The first user of an instance becomes an admin.
 Otherwise, unless an admin calls it, the instance must allow user
 registration and password sign-up, and the new user gets the USER role.

## Query parameters

- `userId` string
- `validateOnly` boolean
- `requestId` string

## Request body

- User: User is an account on the instance.
  - `name` string: Identifier. The resource name of the user. {user} is the username. Format: users/{user}
  - `username` string, required: Required. The unique username, used to sign in.
  - `displayName` string: Optional. The display name of the user.
  - `email` string: Optional. The email address of the user. Stored trimmed and lowercased; empty means no address. An address belongs to at most one user on the instance, so writes that would reuse one fail with ALREADY_EXISTS. Returned only to the user and to admins.
  - `avatarUrl` string: Optional. The avatar URL of the user. An avatar set as a data URI (PNG, JPEG, GIF or WebP, at most 2 MiB) is returned as a file server URL.
  - `description` string: Optional. The description of the user.
  - `password` string: Input only. The password of the user. Never returned.
  - `role` 'ROLE_UNSPECIFIED' | 'ADMIN' | 'USER', enum, required: Required. The role of the user. Only admins can change it.
  - `state` 'STATE_UNSPECIFIED' | 'NORMAL' | 'ARCHIVED', enum, required: Required. The state of the user. Only admins can change it.
  - `createTime` string, date-time: Output only. The creation timestamp.
  - `updateTime` string, date-time: Output only. The last update timestamp.

## Response `200`

OK

- User: User is an account on the instance.
  - `name` string: Identifier. The resource name of the user. {user} is the username. Format: users/{user}
  - `username` string, required: Required. The unique username, used to sign in.
  - `displayName` string: Optional. The display name of the user.
  - `email` string: Optional. The email address of the user. Stored trimmed and lowercased; empty means no address. An address belongs to at most one user on the instance, so writes that would reuse one fail with ALREADY_EXISTS. Returned only to the user and to admins.
  - `avatarUrl` string: Optional. The avatar URL of the user. An avatar set as a data URI (PNG, JPEG, GIF or WebP, at most 2 MiB) is returned as a file server URL.
  - `description` string: Optional. The description of the user.
  - `password` string: Input only. The password of the user. Never returned.
  - `role` 'ROLE_UNSPECIFIED' | 'ADMIN' | 'USER', enum, required: Required. The role of the user. Only admins can change it.
  - `state` 'STATE_UNSPECIFIED' | 'NORMAL' | 'ARCHIVED', enum, required: Required. The state of the user. Only admins can change it.
  - `createTime` string, date-time: Output only. The creation timestamp.
  - `updateTime` string, date-time: Output only. The last update timestamp.

## Other responses

- `default`: Default error response

## Changes

- **2026-10-08** `1846a777b0ef`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/usememos/apis/untitled-api/changes/api/users/post.md)

---

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