> ## Documentation Index
> Fetch the complete documentation index at: https://docs.praxis-ai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a user, or add an existing account to a digital twin

> Creates the user when the email is new. A new user gets 50 credits, or the instance's credit award. When plan is 'sdk' with a valid institution (your digital twin _id), the user is enrolled into that instance. `accountType` must be user, admin or super, and only a super admin can create a super admin.

When the email already belongs to a live account, that account is not edited: credits, status, plan, current twin, names, password, MFA and preferences stay as they are. Change them with PUT /api/admin/user/{userId}. The account is added to `institution` if it is not a member yet, with `accountType` as its role there (a super joins as super), and `accountType` is applied to the account only when it raises it. When request fields were dropped, the response lists them in `ignoredFields`. Without `institution`, or when `institution` is already the account's current twin, the call answers "User already exists" and changes nothing. A soft-deleted account whose email still matches is re-added like a new one.




## OpenAPI

````yaml /mdx/api-reference/admin/admin-api.json post /api/admin/user
openapi: 3.0.0
info:
  title: Pria Admin API
  version: 2.0.78
  description: >-
    Pria API Documentation Praxis's developer platform is a core part of our
    mission to empower organizations to grow better. Our APIs are designed to
    enable teams of any shape or size to build robust integrations that help
    them customize and get the most value out of Pria. All Pria APIs are built
    using REST conventions and designed to have a predictable URL structure.
    <br/>  <br/>They use many standard HTTP features, including methods (POST,
    GET, PUT, DELETE) and error response codes.  <br/> <br/>All API calls are
    made under https://hiimpria.ai/api and all responses return standard JSON.
    In these docs, you'll find lists of all available endpoints for a given API,
    along with interactive code blocks for building requests. For walkthroughs
    of basic usage for these APIs, check out the API guides.
servers:
  - url: https://pria.praxislxp.com
    description: Pria API Server
security: []
tags:
  - name: Authentication
    description: User authentication, registration, and password management (/api/auth)
  - name: OAuth
    description: OAuth authentication providers - Google, GitHub, SSO (/api/auth/oauth)
  - name: User
    description: User profile management and account operations (/api/user)
  - name: User Institutions
    description: User institution memberships and switching (/api/user/institution)
  - name: User Tools
    description: Available tools for authenticated users (/api/user/tools)
  - name: Institutions
    description: Institution settings and configuration (/api/user/institution)
  - name: Conversation
    description: AI conversation and Q&A endpoints (/api/ai)
  - name: Realtime
    description: Real-time voice AI and WebRTC sessions (/api/ai/rt)
  - name: Assistant
    description: AI assistant configuration and management (/api/user/assistant)
  - name: History
    description: Conversation history and favorites (/api/user/history)
  - name: RAG
    description: >-
      Document upload, embedding, and retrieval-augmented generation
      (/api/user/files, /api/user/rag)
  - name: Setting
    description: Instance variables and settings management (/api/user/setting)
  - name: Branding
    description: Digital twin branding and customization (/api/agent/branding)
  - name: Agent
    description: Agent engagement and session management (/api/agent)
  - name: SDK Launch
    description: >-
      SDK launch token signing and verification for secure iframe embedding
      (/api/auth/sdk-sign, /api/auth/sdk-verify)
  - name: Testing
    description: Health checks, diagnostics, and test endpoints (/api/test)
  - name: Admin Accounts
    description: Account management for super admins (/api/admin/account)
  - name: Admin Institutions
    description: Institution management for admins (/api/admin/institution)
  - name: Admin Users
    description: User management for admins (/api/admin/user)
  - name: Admin Entitlements
    description: >-
      User-institution relationships and permissions
      (/api/admin/userInstitution)
  - name: Admin Sessions
    description: Session management for admins (/api/admin/session)
  - name: Admin Histories
    description: Conversation history management and analytics (/api/admin/history)
  - name: Admin Assistants
    description: AI assistant management for admins (/api/admin/assistant)
  - name: Admin Questions
    description: Institution question and prompt management (/api/admin/question)
  - name: Admin Tools
    description: Tool configuration management (/api/admin/tool)
  - name: Admin AI Models
    description: AI model configuration (/api/admin/aimodel)
  - name: Admin MCP Servers
    description: Model Context Protocol server management (/api/admin/mcpserver)
  - name: Admin Feedbacks
    description: User feedback management (/api/admin/feedback)
  - name: Admin Uploads
    description: Upload management (/api/admin/upload)
  - name: Admin Charts
    description: Analytics and visualization chart management (/api/admin/chart)
  - name: Admin Memory
    description: Admin inspection and editing of user/instance memory parameters.
  - name: Admin Usage Limits
    description: Per-user usage-vs-cap reporting and account-wide at-limit counts.
paths:
  /api/admin/user:
    post:
      tags:
        - Admin Users
      summary: Create a user, or add an existing account to a digital twin
      description: >
        Creates the user when the email is new. A new user gets 50 credits, or
        the instance's credit award. When plan is 'sdk' with a valid institution
        (your digital twin _id), the user is enrolled into that instance.
        `accountType` must be user, admin or super, and only a super admin can
        create a super admin.


        When the email already belongs to a live account, that account is not
        edited: credits, status, plan, current twin, names, password, MFA and
        preferences stay as they are. Change them with PUT
        /api/admin/user/{userId}. The account is added to `institution` if it is
        not a member yet, with `accountType` as its role there (a super joins as
        super), and `accountType` is applied to the account only when it raises
        it. When request fields were dropped, the response lists them in
        `ignoredFields`. Without `institution`, or when `institution` is already
        the account's current twin, the call answers "User already exists" and
        changes nothing. A soft-deleted account whose email still matches is
        re-added like a new one.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateUserRequest'
      responses:
        '200':
          description: >-
            The email already belongs to an account. "User already exists"
            (nothing changed), or "User updated!" with `ignoredFields` listing
            the request fields that were not applied.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateUserResponse'
        '201':
          description: User created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateUserResponse'
        '400':
          description: >-
            Invalid request (for example an accountType other than user, admin
            or super), "Instance not found" when `institution` does not exist,
            or a failed users.add / users.edit check.
        '403':
          description: Only super admins can assign super role.
      security:
        - apiKeyAuth: []
components:
  schemas:
    CreateUserRequest:
      type: object
      required:
        - email
        - fname
        - lname
        - status
        - plan
        - accountType
        - password
        - institution
      properties:
        email:
          type: string
          format: email
        fname:
          type: string
        lname:
          type: string
        status:
          type: string
          enum:
            - active
            - inactive
        plan:
          type: string
          enum:
            - free
            - sdk
        credits:
          type: integer
        accountType:
          type: string
          enum:
            - user
            - admin
            - super
          description: super can be assigned by super admins only
        picture:
          type: string
          format: uri
        password:
          type: string
        institution:
          type: string
        remember_history_count:
          type: integer
        mustChangePassword:
          type: boolean
    CreateUserResponse:
      type: object
      properties:
        success:
          type: boolean
        id:
          type: string
        message:
          type: string
        ignoredFields:
          type: array
          items:
            type: string
          description: On an existing account, the request fields that were not applied.
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-access-token
      description: JWT token passed in x-access-token header

````