---
title: "[Internal] Create user"
method: POST
path: "/api/users"
tags: ["Users"]
---

# \[Internal\] Create user

`POST /api/users`

## Request

- Base URL: `https://api.typless.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.typless.com/api/users`
- Auth: none declared

## Request body

- CreateUserRequest
  - `name` string, required
  - `email` string, required
  - `role` 'BU_READ_ONLY_USER' | 'BU_USER' | 'BU_ADMIN' | 'TENANT_ADMIN' | 'ADMIN'
  - `role_ids` string[], nullable
  - `authorized_business_unit_ids` union[], required
    - union
      - string, uuid
      - '*'
  - `tag_ids` union[]
    - union
      - string, uuid
      - '*'
  - `locale` string
  - `can_export` boolean
  - `notification_preferences` NotificationPreferences: Per-user notification preferences. Each ``notify_*`` field is a list of delivery channels. An empty list means "no notifications of this type". Everything defaults to off except ``notify_export_ready``: the user started the export themselves, so its result shows up in the notification center unless they turn it off. Unknown keys are ignored so a rolling deploy that removes a field does not break reads of rows written by the newer replica.
    - `notify_new_document_typless_inbox` string[]
    - `notify_new_document_integration` string[]
    - `notify_new_document_upload` string[]
    - `notify_document_in_review` string[]
    - `notify_approval_requested` string[]
    - `notify_export_ready` string[]
    - `notify_export_failed` string[]
    - `notify_bank_issues` string[]
    - `notify_minimax_disabled` string[]
  - `notification_business_unit_ids` union[]
    - union
      - string, uuid
      - '*'

## Response `200`

Successful Response

- UserDTO
  - `aggregate_id` string, uuid, required
  - `tenant_id` string, uuid, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `name` string, required
  - `email` string, required
  - `role` 'BU_READ_ONLY_USER' | 'BU_USER' | 'BU_ADMIN' | 'TENANT_ADMIN' | 'ADMIN', required
  - `active` boolean, required
  - `role_ids` string[], required
  - `language` 'en' | 'sl', required
  - `authorized_business_unit_ids` union[], required
    - union
      - string, uuid
      - '*'
  - `notification_business_unit_ids` union[], required
    - union
      - string, uuid
      - '*'
  - `tag_ids` union[], required
    - union
      - string, uuid
      - '*'
  - `can_export` boolean, required
  - `identity_providers` UserIdentityProviderDTO[], required
    - `aggregate_id` string, uuid, required
    - `user_id` string, uuid, required
    - `provider` string, required
    - `provider_user_id` string, required
    - `provider_email` string, required
    - `linked_at` string, date-time, required
  - `permissions` string[], required
  - `notification_preferences` NotificationPreferences, required: Per-user notification preferences. Each ``notify_*`` field is a list of delivery channels. An empty list means "no notifications of this type". Everything defaults to off except ``notify_export_ready``: the user started the export themselves, so its result shows up in the notification center unless they turn it off. Unknown keys are ignored so a rolling deploy that removes a field does not break reads of rows written by the newer replica.
    - `notify_new_document_typless_inbox` string[]
    - `notify_new_document_integration` string[]
    - `notify_new_document_upload` string[]
    - `notify_document_in_review` string[]
    - `notify_approval_requested` string[]
    - `notify_export_ready` string[]
    - `notify_export_failed` string[]
    - `notify_bank_issues` string[]
    - `notify_minimax_disabled` string[]
  - `accessible_tags` AccessibleTagsDTO
    - `grants_all_tags` boolean, required
    - `parents` AccessibleTagParentDTO[], required
      - `id` string, uuid, required
      - `name` string, required
      - `color` string, nullable, required
      - `is_protected` boolean, required
      - `accessible` boolean, required
      - `children` AccessibleTagChildDTO[], required
        - `id` string, uuid, required
        - `name` string, required
        - `color` string, nullable, required
        - `is_protected` boolean, required

## Other responses

- `422`: Validation Error

---

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