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

# Register operator

> Creates an operator account and signs it in. **Unauthenticated** — this is
the sign-up.

Without an invite, `emailVerificationCode` is required: the six digits
e-mailed by `POST /v1/operators/email-verification`. It is single use.

With `operatorInviteKey` the operator joins the inviting tenant with the
invite's roles and gets the default inbox grants; the invite is consumed.
The returned token works on every Talqui API, exactly like a login token.



## OpenAPI

````yaml /api/services-api.yaml post /v1/operators
openapi: 3.0.3
info:
  description: >-
    Talqui is an omnichannel customer service platform that unifies
    conversations from WhatsApp, Instagram, Telegram, and many other channels
    into a single attendant panel, alongside a broader ecosystem of plugins and
    integrations. This API gives developers programmatic access to Talqui's
    services layer, exposing the operations needed to read and manage tenants,
    conversations, plugins, and related resources that power that platform.


    Authentication is available on behalf of an Operator (the default for this
    API), a Plugin Connection, or a Plugin — see the [Talqui authentication
    guide](https://docs.talqui.chat/guides/introduction/authentication/) for how
    each token is obtained and when to use it.


    Need help or have questions not covered here? Reach out to
    support@talqui.com.
  license:
    name: ISC
    url: https://opensource.org/license/isc-license-txt
  title: Talqui - Services API
  version: 0.84.1
servers:
  - description: Production
    url: https://services-api.talqui.chat
security: []
tags:
  - name: Tenants
  - name: Settings
  - name: Analytics/Reports
  - name: Analytics
  - name: Campaigns
  - name: Campaigns/Models
  - name: Contacts
  - name: Contacts/Imports
  - name: Handoff links
  - name: Inboxes
  - name: Messages
  - name: Notifications
  - name: Sessions
  - name: Operators/Shortcuts
  - name: Operators
  - name: Plugins
  - name: Setup
paths:
  /v1/operators:
    post:
      tags:
        - Operators
      summary: Register operator
      description: >-
        Creates an operator account and signs it in. **Unauthenticated** — this
        is

        the sign-up.


        Without an invite, `emailVerificationCode` is required: the six digits

        e-mailed by `POST /v1/operators/email-verification`. It is single use.


        With `operatorInviteKey` the operator joins the inviting tenant with the

        invite's roles and gets the default inbox grants; the invite is
        consumed.

        The returned token works on every Talqui API, exactly like a login
        token.
      operationId: RegisterOperatorController
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              properties:
                emailVerificationCode:
                  description: >-
                    Six-digit code from `POST /v1/operators/email-verification`.
                    Required unless `operatorInviteKey` is given.
                  pattern: ^\d{6}$
                  type: string
                operatorEmail:
                  description: E-mail address, also the login identifier.
                  format: email
                  pattern: >-
                    ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
                  type: string
                operatorFirstname:
                  description: Given name.
                  minLength: 1
                  type: string
                operatorInviteKey:
                  description: >-
                    Invite key from the invite e-mail; joins the inviting
                    tenant.
                  type: string
                operatorLastname:
                  description: Family name.
                  minLength: 1
                  type: string
                operatorPassword:
                  description: Plain password; stored only as a bcrypt hash.
                  maxLength: 64
                  minLength: 5
                  type: string
                operatorPhone:
                  description: Phone number.
                  minLength: 1
                  type: string
              required:
                - operatorEmail
                - operatorPassword
                - operatorFirstname
                - operatorLastname
                - operatorPhone
              type: object
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  data:
                    additionalProperties: false
                    properties:
                      operator:
                        additionalProperties: false
                        description: The operator just created.
                        properties:
                          createdAt:
                            description: When the operator was created.
                            format: date-time
                            type: string
                          lastSignInAt:
                            description: When the operator last signed in.
                            format: date-time
                            nullable: true
                            type: string
                          lastTenantID:
                            description: The tenant the operator was last working in.
                            nullable: true
                            type: string
                          operatorEmail:
                            description: E-mail address (also the login identifier).
                            type: string
                          operatorFirstname:
                            description: Given name.
                            type: string
                          operatorID:
                            description: The operator identifier.
                            type: string
                          operatorLastname:
                            description: Family name.
                            type: string
                          operatorMeta:
                            additionalProperties: {}
                            description: Arbitrary metadata attached to the operator.
                            type: object
                          operatorPhone:
                            description: Phone number, when set.
                            nullable: true
                            type: string
                          operatorPhoto:
                            description: Avatar URL, when set.
                            nullable: true
                            type: string
                          operatorRoles:
                            description: Platform-wide roles, e.g. `superuser`.
                            items:
                              type: string
                            type: array
                          operatorSettings:
                            additionalProperties: false
                            description: Notification preferences and push tokens.
                            properties:
                              notificationSettings:
                                additionalProperties: false
                                properties:
                                  allDisabled:
                                    description: >-
                                      Master switch — silences every
                                      notification for this operator.
                                    type: boolean
                                  allowSounds:
                                    description: >-
                                      Whether the web app may play a
                                      notification sound.
                                    type: boolean
                                  onMessageInbound:
                                    description: Notify on an inbound message.
                                    type: boolean
                                  onOperatorMentioned:
                                    description: Notify when mentioned in an internal note.
                                    type: boolean
                                  onSessionCreated:
                                    description: Notify when a session is opened.
                                    type: boolean
                                  onSessionQueued:
                                    description: Notify when a session enters the queue.
                                    type: boolean
                                  tokens:
                                    additionalProperties: false
                                    description: Push tokens registered per platform.
                                    properties:
                                      mobile:
                                        description: >-
                                          FCM token of the mobile app, when one is
                                          registered.
                                        nullable: true
                                        type: string
                                      web:
                                        description: >-
                                          FCM token of the browser session, when
                                          one is registered.
                                        nullable: true
                                        type: string
                                    required:
                                      - web
                                      - mobile
                                    type: object
                                required:
                                  - allDisabled
                                  - onSessionCreated
                                  - onSessionQueued
                                  - onMessageInbound
                                  - allowSounds
                                  - tokens
                                type: object
                            required:
                              - notificationSettings
                            type: object
                          organizationID:
                            description: The Talqui organization this operator belongs to.
                            type: string
                          updatedAt:
                            description: When the operator was last updated.
                            format: date-time
                            type: string
                        required:
                          - operatorID
                          - operatorFirstname
                          - operatorLastname
                          - operatorPhoto
                          - operatorPhone
                          - operatorEmail
                          - operatorRoles
                          - operatorMeta
                          - lastSignInAt
                          - lastTenantID
                          - createdAt
                          - updatedAt
                        type: object
                      token:
                        description: Operator session token (JWT), valid for 12 hours.
                        type: string
                    required:
                      - operator
                      - token
                    type: object
                required:
                  - data
                type: object
          description: Response for status 201.
        '400':
          content:
            application/json:
              schema:
                properties:
                  errors:
                    items:
                      $ref: '#/components/schemas/RequestValidationError'
                    maxItems: 1
                    minItems: 1
                    type: array
                required:
                  - errors
                type: object
          description: >-
            RequestValidationError (error_code 1002): request body fails schema
            validation.
        '404':
          content:
            application/json:
              schema:
                properties:
                  errors:
                    items:
                      $ref: '#/components/schemas/OperatorInviteInvalidError'
                    maxItems: 1
                    minItems: 1
                    type: array
                required:
                  - errors
                type: object
          description: >-
            OperatorInviteInvalidError (error_code 1846): the invite key does
            not match an open invite for this e-mail.
        '422':
          content:
            application/json:
              schema:
                properties:
                  errors:
                    items:
                      oneOf:
                        - $ref: >-
                            #/components/schemas/EmailVerificationCodeInvalidError
                        - $ref: >-
                            #/components/schemas/EmailVerificationCodeExpiredError
                        - $ref: '#/components/schemas/OperatorEmailAlreadyExistsError'
                    maxItems: 1
                    minItems: 1
                    type: array
                required:
                  - errors
                type: object
          description: >-
            EmailVerificationCodeInvalidError (error_code 1849): missing or
            wrong `emailVerificationCode` (sign-ups without an invite). |
            EmailVerificationCodeExpiredError (error_code 1850): the code
            expired, was never requested, or was burnt by 5 wrong tries. |
            OperatorEmailAlreadyExistsError (error_code 1845): an operator with
            this e-mail already exists.
        '429':
          content:
            application/json:
              schema:
                properties:
                  errors:
                    items:
                      $ref: '#/components/schemas/TooManyRequestsError'
                    maxItems: 1
                    minItems: 1
                    type: array
                required:
                  - errors
                type: object
          description: >-
            TooManyRequestsError (error_code 1071): more than 20 sign-ups per IP
            per hour, or 5 attempts per e-mail per 10 minutes.
        '500':
          content:
            application/json:
              schema:
                properties:
                  errors:
                    items:
                      $ref: '#/components/schemas/UnknownError'
                    maxItems: 1
                    minItems: 1
                    type: array
                required:
                  - errors
                type: object
          description: >-
            UnknownError (error_code 5999): Unexpected internal error not
            otherwise documented for this endpoint.
components:
  schemas:
    RequestValidationError:
      additionalProperties: false
      properties:
        error:
          enum:
            - RequestValidationError
          type: string
        error_code:
          enum:
            - 1002
          type: number
        fields:
          items:
            additionalProperties: false
            properties:
              allowed:
                type: string
              field:
                type: string
              received:
                type: string
            required:
              - field
              - received
              - allowed
            type: object
          type: array
        message:
          example: Invalid request data.
          type: string
        statusCode:
          enum:
            - 400
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
        - fields
      type: object
    OperatorInviteInvalidError:
      additionalProperties: false
      properties:
        error:
          enum:
            - OperatorInviteInvalidError
          type: string
        error_code:
          enum:
            - 1846
          type: number
        message:
          example: This requested invite is not valid.
          type: string
        statusCode:
          enum:
            - 404
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    EmailVerificationCodeInvalidError:
      additionalProperties: false
      properties:
        error:
          enum:
            - EmailVerificationCodeInvalidError
          type: string
        error_code:
          enum:
            - 1849
          type: number
        message:
          example: The verification code is not correct.
          type: string
        statusCode:
          enum:
            - 422
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    EmailVerificationCodeExpiredError:
      additionalProperties: false
      properties:
        error:
          enum:
            - EmailVerificationCodeExpiredError
          type: string
        error_code:
          enum:
            - 1850
          type: number
        message:
          example: The verification code expired. Request a new one.
          type: string
        statusCode:
          enum:
            - 422
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    OperatorEmailAlreadyExistsError:
      additionalProperties: false
      properties:
        error:
          enum:
            - OperatorEmailAlreadyExistsError
          type: string
        error_code:
          enum:
            - 1845
          type: number
        message:
          example: This operator e-mail already exists.
          type: string
        statusCode:
          enum:
            - 422
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    TooManyRequestsError:
      additionalProperties: false
      properties:
        error:
          enum:
            - TooManyRequestsError
          type: string
        error_code:
          enum:
            - 1071
          type: number
        message:
          example: Too many requests. Try again later.
          type: string
        statusCode:
          enum:
            - 429
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object
    UnknownError:
      additionalProperties: false
      properties:
        error:
          enum:
            - UnknownError
          type: string
        error_code:
          enum:
            - 5999
          type: number
        message:
          example: For some unknown reason your request has not succeeded.
          type: string
        statusCode:
          enum:
            - 500
          type: number
      required:
        - statusCode
        - error
        - error_code
        - message
      type: object

````

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