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

# Create a trader user

> Create a trader user for your firm. The user can access only the trader dashboard and cannot access admin-only endpoints. If the email already belongs to an existing user, that user is granted access for your firm and the submitted password is ignored. Use `results[].existing_user` to decide whether to show the submitted onboarding password or tell the trader to use or reset their existing password.



## OpenAPI

````yaml /openapi.json post /api/users/
openapi: 3.0.3
info:
  title: TBBO API
  version: 1.0.0
  description: >
    Authentication uses short-lived session tokens (3 hours).


    Send the token with every request using the `Authorization` header:


    ```

    Authorization: Token <token>

    ```


    Example:


    ```

    Authorization: Token 123abc456def789

    ```


    To obtain a token, call `POST /auth/login/` with valid credentials. The
    response includes a `key` value. Use that value in the header above for
    subsequent API calls.


    How to find required IDs:


    - `challenge_id`: Prop Tech Configuration -> Challenges

    - `user_id`: Tickblaze Manager -> Users

    - `account_id`: Tickblaze Manager -> Accounts 
servers: []
security: []
tags:
  - name: withdrawals
    description: Withdrawal related endpoints
    x-displayName: Withdrawals
paths:
  /api/users/:
    post:
      tags:
        - Users
      summary: Create a trader user
      description: >-
        Create a trader user for your firm. The user can access only the trader
        dashboard and cannot access admin-only endpoints. If the email already
        belongs to an existing user, that user is granted access for your firm
        and the submitted password is ignored. Use `results[].existing_user` to
        decide whether to show the submitted onboarding password or tell the
        trader to use or reset their existing password.
      operationId: api_users_create
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserCreate'
            examples:
              CreateTraderUser:
                value:
                  email: trader@example.com
                  full_name: John Trader
                  password1: StrongPassword123!
                  password2: StrongPassword123!
                  phone: '123456789'
                  address_1: Main St 123
                  address_2: ''
                  city: Denver
                  state: Colorado
                  country_code: US
                  postal_code: '7350000'
                summary: Create a trader user
                description: >-
                  Example request to create a new trader user under the
                  authenticated firm.
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/UserCreate'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UserCreate'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperationResponse'
              examples:
                NewUserSuccessResponse:
                  value:
                    success: true
                    message: Trader user created.
                    results:
                      - user_id: 42
                        email: trader@example.com
                        full_name: John Trader
                        is_active: true
                        is_staff: false
                        blocked: false
                        created: '2026-01-08T14:32:10Z'
                        existing_user: false
                    summary:
                      created: 1
                    duration_ms: 31
                  summary: New trader user created
                  description: >-
                    `existing_user=false` means the submitted password was
                    applied to the newly created user.
                ExistingUserSuccessResponse:
                  value:
                    success: true
                    message: Trader user created.
                    results:
                      - user_id: 43
                        email: existing.trader@example.com
                        full_name: Existing Trader
                        is_active: true
                        is_staff: false
                        blocked: false
                        created: '2025-12-19T09:15:20Z'
                        existing_user: true
                    summary:
                      created: 1
                    duration_ms: 28
                  summary: Existing user granted access for your firm
                  description: >-
                    `existing_user=true` means the email already belongs to an
                    existing user. The submitted password was ignored; direct
                    the trader to use or reset their existing password.
          description: ''
        '502':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TickblazeProvisioningError'
              examples:
                ProvisioningValidationError:
                  value:
                    detail: 'User creation failed: last name should not be empty.'
                    upstream_detail: lastName should not be empty
                  summary: Trader user could not be created
                  description: Validation details are returned when safe to expose.
          description: >-
            Provisioning failed; the user was not created. `upstream_detail` is
            included when a safe validation message is available.
      security:
        - tokenAuth: []
components:
  schemas:
    UserCreate:
      type: object
      properties:
        email:
          type: string
          format: email
          maxLength: 200
        full_name:
          type: string
          maxLength: 100
        password1:
          type: string
          writeOnly: true
          minLength: 8
        password2:
          type: string
          writeOnly: true
          minLength: 8
        phone:
          type: string
          nullable: true
          default: '9999999999'
          maxLength: 32
        address_1:
          type: string
          maxLength: 255
        address_2:
          type: string
          nullable: true
          maxLength: 255
        city:
          type: string
          maxLength: 100
        state:
          type: string
          maxLength: 100
        country_code:
          type: string
          maxLength: 4
        postal_code:
          type: string
          maxLength: 20
      required:
        - address_1
        - city
        - country_code
        - email
        - full_name
        - password1
        - password2
        - postal_code
        - state
    OperationResponse:
      type: object
      description: >-
        Standard serializer for operation responses. A command or a task should
        return a response matching this format.

        Operation = a request to perform some action, e.g. sync, update, delete,
        create, etc.
      properties:
        success:
          type: boolean
          description: Indicates whether the operation completed successfully.
        results:
          type: array
          items: {}
          description: >-
            List containing the result items produced by the operation. The
            structure of each item depends on the executed operation.
        summary:
          type: object
          additionalProperties: {}
          description: >-
            Aggregated summary information about the operation results (e.g.
            counts of updated, created, failed or unchanged records).
        duration_ms:
          type: number
          format: double
          description: Execution time of the operation in milliseconds.
        message:
          type: string
          nullable: true
          description: Optional human-readable message describing the operation outcome.
      required:
        - duration_ms
        - results
        - success
        - summary
    TickblazeProvisioningError:
      type: object
      description: Error DTO for failed Tickblaze provisioning during trader creation.
      properties:
        detail:
          type: string
          description: Human-readable provisioning failure returned by the API.
        upstream_detail:
          type: string
          description: Sanitized validation detail returned by Tickblaze when available.
      required:
        - detail
  securitySchemes:
    tokenAuth:
      type: apiKey
      in: header
      name: Authorization
      description: Token-based authentication with required prefix "Token"

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.