> ## Documentation Index
> Fetch the complete documentation index at: https://higginsgraferinc.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a user account

> Create a new user account for accessing the client app.

In the request body, set the new user account `email`, `password`, `user_name`, and `role`. Available values for the `role` property: `patron`, `expeditor`, `chef`, and `manager`.

The `user_name` and `password` properties are required to authenticate a user and obtain an access token.




## OpenAPI

````yaml openapi.yaml post /users
openapi: 3.0.3
info:
  title: Point of Service (POS) API
  version: '1.0'
  description: >
    An example of a restaurant point of sale API, used to learn how to make API
    calls using Swagger, Github codespaces, and Postman, and to learn API
    documentation best practices.
  contact:
    name: Course Discord server
    url: https://discord.gg/dPsnz5u9
    email: mark.wentowski@docsgeek.io
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
servers:
  - url: https://reimagined-journey-g45xxv4v6gwhvrrr-80.app.github.dev
    description: The server URL used for the point of service API
    variables:
      gh-codespaces-server-url:
        default: https://reimagined-journey-g45xxv4v6gwhvrrr-80.app.github.dev
        description: >-
          Codespace URL used by Sarah Holdgrafer for Mastering API Documentation
          course.
  - url: http://localhost:80/
    description: Local URL for testing
security: []
tags:
  - name: Orders
    description: Methods for creating and managing orders in the client app.
  - name: Dishes
    description: Methods for creating and managing dishes in the client app.
  - name: Ingredients
    description: Methods used for creating and managing ingredients in the client app .
  - name: Users
    description: >-
      Methods for creating and managing the user accounts allowed to access the
      client app.
  - name: Auth
    description: Authentication endpoints for the client app (all methods use Basic auth).
paths:
  /users:
    post:
      tags:
        - Users
      summary: Create a user account
      description: >
        Create a new user account for accessing the client app.


        In the request body, set the new user account `email`, `password`,
        `user_name`, and `role`. Available values for the `role` property:
        `patron`, `expeditor`, `chef`, and `manager`.


        The `user_name` and `password` properties are required to authenticate a
        user and obtain an access token.
      operationId: postUser
      requestBody:
        $ref: '#/components/requestBodies/CreateUserRequest'
      responses:
        '201':
          description: User successfully created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
          headers:
            Location:
              schema:
                type: string
              description: ...
        '400':
          description: Unauthorized
        '409':
          description: Unable to complete request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
      security: []
components:
  requestBodies:
    CreateUserRequest:
      description: |
        The request body to create a user requires the following properties: 

        - `email`
        - `password`
        - `role`
        - `user_name`

        The `user_name` must be unique.
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              email:
                $ref: '#/components/schemas/Email'
              password:
                $ref: '#/components/schemas/Password'
              role:
                $ref: '#/components/schemas/Role'
              user_name:
                $ref: '#/components/schemas/UserName'
            required:
              - email
              - password
              - role
              - user_name
  schemas:
    User:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        created_at:
          $ref: '#/components/schemas/CreatedAt'
        updated_at:
          $ref: '#/components/schemas/UpdatedAt'
        user_name:
          $ref: '#/components/schemas/UserName'
        email:
          $ref: '#/components/schemas/Email'
        password:
          $ref: '#/components/schemas/Password'
        role:
          $ref: '#/components/schemas/Role'
    Problem:
      type: object
      properties:
        title:
          type: string
          description: >-
            A short summary of the error or problem encountered with the
            request.
          example: Human-readable error title.
        detail:
          type: string
          description: >-
            A more detailed description of the error or problem to indicate the
            source and the solution, if possible.
          example: Human-readable error details.
      required:
        - title
        - detail
    Email:
      type: string
      format: email
      description: The email address for the user account.
      example: johndoe@gmail.com
    Password:
      type: string
      description: >-
        Passwords must be at least eight characters long and contain at least
        one uppercase letter, one lowercase letter, one digit, and one special
        character (@, $, !, %, *, ?, &).
      example: P@ssw0rd!
    Role:
      type: string
      enum:
        - patron
        - expeditor
        - chef
        - manager
      example: manager
      description: >
        The role assigned to a user account. A user's role will determine the
        level of access available for protected endpoints.
    UserName:
      type: string
      description: >-
        The user name for account login purposes. User names cannot contain
        spaces.
      example: john_doe
    Id:
      type: string
      example: 674d0bf5c28b69001f8e03a1
      readOnly: true
      description: >
        A unique alpha-numeric string generated by the system when creating a
        resource (e.g., dishes, ingredients, etc). Ids are required for
        retrieving the properties of a specific resource.
    CreatedAt:
      type: string
      format: date-time
      example: '2024-04-22T10:00:00Z'
      readOnly: true
      description: >
        The date and time the resource was created. Timestamp uses ISO 8601
        format, Ex: `2025-04-05T14:55:03.824Z` 
    UpdatedAt:
      type: string
      format: date-time
      example: '2024-04-22T10:00:00Z'
      readOnly: true
      description: |
        The date and time the resource was last updated. 

        Timestamp uses ISO 8601 format, Ex: `2025-04-05T14:55:03.824Z` 

````