---
title: "Create a new user."
method: POST
path: "/api/users"
tags: ["User Accounts"]
---

# Create a new user.

`POST /api/users`

A user who can login and use the system.

## Request body

- UserCreate
  - `email` string, required
  - `isActive` boolean
  - `isSuperuser` boolean
  - `isVerified` boolean
  - `name` string, nullable
  - `password` string, required

## Response `201`

Document created, URL follows

- User
  - `avatarUrl` string, nullable
  - `email` string, required
  - `hasPassword` boolean
  - `id` string, uuid, required
  - `isActive` boolean
  - `isSuperuser` boolean
  - `isTwoFactorEnabled` boolean
  - `isVerified` boolean
  - `name` string, nullable
  - `oauthAccounts` OauthAccount[]
    - `accountEmail` string, required
    - `accountId` string, required
    - `id` string, uuid, required
    - `oauthName` string, required
    - `scopes` string[], nullable
  - `roles` UserRole[]
    - `assignedAt` string, date-time, required
    - `roleId` string, uuid, required
    - `roleName` string, required
    - `roleSlug` string, required
  - `teams` UserTeam[]
    - `isOwner` boolean
    - `role` 'admin' | 'editor' | 'member' — Valid values for team roles. Roles follow Jetstream conventions: - ADMIN: Full permissions (create, read, update, delete) - EDITOR: Limited permissions (read, create, update) - MEMBER: Basic read-only access Note: Team ownership is tracked separately via is_owner on TeamMember.
    - `teamId` string, uuid, required
    - `teamName` string, required
    - `teamSlug` string, required

## Other responses

- `400` — Bad request syntax or unsupported method

## Changes

- **2025-12-26** `1df5362b73fc` — 1 breaking, 2 warning, 1 info
  - removed the required property `oauthAccounts/items/accessToken` from the response with the `201` status
  - removed the optional property `oauthAccounts/items/expiresAt` from the response with the `201` status
  - removed the optional property `oauthAccounts/items/refreshToken` from the response with the `201` status
  - added the optional property `oauthAccounts/items/scopes` to the response with the `201` status
- **2025-12-22** `6b2fad3e4bcc` — 1 warning, 3 info
  - removed the optional property `oauthAccounts/items/scopes` from the response with the `201` status
  - added the optional property `oauthAccounts/items/expiresAt` to the response with the `201` status
  - added the optional property `oauthAccounts/items/refreshToken` to the response with the `201` status
  - added the required property `oauthAccounts/items/accessToken` to the response with the `201` status

[Change history](https://skmtc.dev/litestar-org/apis/app/changes/api/users/post.md)

---

[API](https://skmtc.dev/litestar-org/apis/app.md) · [All operations](https://skmtc.dev/litestar-org/apis/app/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/litestar-org/app/revisions/461f3baecebb/schema)
