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

# Crear usuario

> Crea un usuario en tu empresa con el nombre, email, contraseña y roles indicados. El email se guarda en minúsculas. Si no envías `active`, el usuario se crea inactivo. Si no envías `roleIds`, el usuario se crea sin roles.

El email debe ser único en Pruff: si ya existe un usuario con ese email, la solicitud responde 400.

El email no puede contener espacios, y solo admite letras sin tilde, dígitos, la `@` y los caracteres `._%+-`. Si no cumple ese formato, la solicitud responde 400 `Invalid email format`.

El campo `roleIds` recibe los ids de los roles, no sus nombres. Los ids de los roles estándar están en la descripción de ese campo. Debe ser una lista de ids enteros de roles que existan en tu empresa. Una lista vacía (`[]`) o `null` crea el usuario sin roles. Si `roleIds` no es una lista, incluye un id que no existe en tu empresa o incluye un valor que no es un entero, la solicitud responde 400 `Invalid roleIds`.

Los roles de administrador no se pueden asignar por API: el rol `Administrador` (id 1), el rol `Super Administrador` (id 4, reservado de Pruff) y cualquier rol personalizado de tu empresa con permisos de administrador responden 400 con el `displayMessage` `No se pueden asignar roles de administrador por API`. Repetir un id en la lista no es un error.



## OpenAPI

````yaml openapi/clients.yaml POST /user/create
openapi: 3.1.0
info:
  title: API de clientes de Pruff
  version: '1'
  description: >-
    Endpoints que tus sistemas llaman para leer y operar los datos de tu empresa
    en Pruff. Todas las solicitudes van por HTTPS y se autentican con el header
    `x-api-key`. Las convenciones de formato, paginación y errores se describen
    en https://docs.pruff.com/api/introduccion.
servers:
  - url: https://api.pruff.com/api/clients
security:
  - ApiKeyAuth: []
tags:
  - name: Facturas
    description: Consulta de facturas electrónicas, facturas transables y cesiones.
  - name: Documentos
    description: Consulta y creación de documentos asociados a tus clientes.
  - name: Archivos
    description: Carga de archivos a operaciones y a los requerimientos de tus documentos.
  - name: Financiamiento
    description: >-
      Simula créditos, crea solicitudes de factoring y consulta las prórrogas de
      tu empresa.
  - name: Comité
    description: >-
      Consulta las aprobaciones de una solicitud en los comités de riesgo y de
      operaciones, y registra nuevas firmas.
  - name: Chat
    description: Exporta y envía mensajes del chat de una solicitud.
  - name: Reportes
    description: >-
      Reportes de operaciones, cartera, recaudaciones, cuentas pendientes y
      flujos de tu empresa.
  - name: Datahub
    description: >-
      Consulta de la información tributaria, financiera y de riesgo que Pruff
      tiene de tus clientes y deudores.
  - name: Mercado Público
    description: >-
      Licitaciones y órdenes de compra de Mercado Público (ChileCompra) cargadas
      en Pruff.
  - name: CRM
    description: >-
      Datos comerciales de tu CRM en Pruff: empresas con su ficha, pipeline,
      prospectos, gestiones y simulaciones.
  - name: SGR
    description: Operaciones SGR (garantías) de tu empresa.
  - name: Sincronizador
    description: >-
      Pide sincronizar a un cliente con el SII o la TGR para obtener su
      información más actualizada, y consulta el estado de esas
      sincronizaciones.
  - name: Usuarios
    description: >-
      Administra los usuarios de tu empresa en Pruff (crear, editar, eliminar,
      consultar su perfil y asignar subordinados) y consulta las cuentas
      (empresas conectadas) a las que cada usuario tiene acceso.
  - name: Contactos
    description: Crea contactos asociados a las empresas de tu cartera.
paths:
  /user/create:
    post:
      tags:
        - Usuarios
      summary: Crear usuario
      description: >-
        Crea un usuario en tu empresa con el nombre, email, contraseña y roles
        indicados. El email se guarda en minúsculas. Si no envías `active`, el
        usuario se crea inactivo. Si no envías `roleIds`, el usuario se crea sin
        roles.


        El email debe ser único en Pruff: si ya existe un usuario con ese email,
        la solicitud responde 400.


        El email no puede contener espacios, y solo admite letras sin tilde,
        dígitos, la `@` y los caracteres `._%+-`. Si no cumple ese formato, la
        solicitud responde 400 `Invalid email format`.


        El campo `roleIds` recibe los ids de los roles, no sus nombres. Los ids
        de los roles estándar están en la descripción de ese campo. Debe ser una
        lista de ids enteros de roles que existan en tu empresa. Una lista vacía
        (`[]`) o `null` crea el usuario sin roles. Si `roleIds` no es una lista,
        incluye un id que no existe en tu empresa o incluye un valor que no es
        un entero, la solicitud responde 400 `Invalid roleIds`.


        Los roles de administrador no se pueden asignar por API: el rol
        `Administrador` (id 1), el rol `Super Administrador` (id 4, reservado de
        Pruff) y cualquier rol personalizado de tu empresa con permisos de
        administrador responden 400 con el `displayMessage` `No se pueden
        asignar roles de administrador por API`. Repetir un id en la lista no es
        un error.
      operationId: createUser
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserCreateRequest'
            example:
              email: ana.perez@example.com
              name: Ana Pérez
              password: ContraseñaSegura123!
              active: true
              roleIds:
                - 2
                - 6
      responses:
        '201':
          description: Usuario creado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserMessageResponse'
              example:
                message: User created
        '400':
          description: >-
            El body es inválido o el usuario ya existe. El campo `message`
            identifica el motivo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                invalidEmail:
                  summary: Email con formato inválido
                  value:
                    message: Invalid email format
                nameRequired:
                  summary: Falta el nombre
                  value:
                    message: name is required
                passwordRequired:
                  summary: Falta la contraseña
                  value:
                    message: password is required
                invalidRoleIds:
                  summary: >-
                    roleIds no es una lista, o contiene un id que no existe o un
                    valor que no es un entero
                  value:
                    message: Invalid roleIds
                administratorRoleForbidden:
                  summary: roleIds incluye un rol de administrador
                  value:
                    message: Administrator roles cannot be assigned through the API
                    displayMessage: No se pueden asignar roles de administrador por API
                userAlreadyExists:
                  summary: Ya existe un usuario con ese email
                  value:
                    message: User already exists
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
        '504':
          $ref: '#/components/responses/Timeout'
components:
  schemas:
    UserCreateRequest:
      type: object
      required:
        - email
        - name
        - password
      properties:
        email:
          type: string
          format: email
          description: >-
            Email del usuario. Debe ser único en Pruff. Se guarda en minúsculas.
            No puede contener espacios, y solo admite letras sin tilde, dígitos,
            la `@` y los caracteres `._%+-`.
          example: ana.perez@example.com
        name:
          type: string
          description: Nombre completo del usuario.
          example: Ana Pérez
        password:
          type: string
          format: password
          description: Contraseña con la que el usuario ingresa a Pruff.
          example: ContraseñaSegura123!
        active:
          type: boolean
          default: false
          description: Indica si el usuario queda activo. Si no lo envías, queda inactivo.
          example: true
        roleIds:
          type: array
          items:
            type: integer
          description: >-
            Ids de los roles del usuario (no sus nombres). Si no lo envías, el
            usuario se crea sin roles. Una lista vacía (`[]`) o `null` también
            crea el usuario sin roles.


            Roles estándar:


            | Id | Rol |

            |---|---|

            | 1 | Administrador |

            | 2 | Gerente Comercial |

            | 3 | Ejecutivo II |

            | 5 | Cotizador |

            | 6 | Operaciones |

            | 7 | Gerente Operaciones |

            | 8 | Director |

            | 9 | Gerente General |

            | 10 | Ejecutivo I |

            | 11 | Ejecutivo Cobranza |

            | 12 | Jefe Cobranza |

            | 13 | Gerente Cobranza |

            | 14 | Ejecutivo Verificación |

            | 15 | Usuario Pruff Connect |


            Tu empresa también puede tener roles personalizados con otros ids.
            Si `roleIds` no es una lista, incluye un id que no existe en tu
            empresa o un valor que no es un entero, la solicitud responde 400
            `Invalid roleIds`. Los roles de administrador (el id 1, el id 4
            reservado de Pruff y cualquier rol personalizado con permisos de
            administrador) no se pueden asignar por API: la solicitud responde
            400 con el `displayMessage` `No se pueden asignar roles de
            administrador por API`.
          example:
            - 2
            - 6
    UserMessageResponse:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          description: Confirmación de la operación (`User created` o `User updated`).
          example: User created
    Error:
      type: object
      required:
        - message
      properties:
        message:
          type: string
          description: >-
            Identifica el error. En algunos casos es un texto en inglés con
            valores variables. Para tu lógica, usa el código HTTP y, cuando
            exista, `data.code`.
        displayMessage:
          type: string
          description: >-
            Mensaje pensado para mostrarlo a una persona. Normalmente en
            español; algunos mensajes de validación vienen en inglés.
        data:
          description: Detalle adicional del error, cuando existe.
  responses:
    Unauthorized:
      description: >-
        Falta el header `x-api-key`, su valor no es válido o la cuenta de API de
        tu empresa no está habilitada.
      content:
        application/json:
          schema:
            type: object
            required:
              - message
            properties:
              message:
                type: string
          example:
            message: 'Unauthorized: Invalid API Key'
    TooManyRequests:
      description: >-
        Tu empresa superó el límite de solicitudes. Todas las API keys de tu
        empresa comparten el mismo límite. Espera los segundos que indica el
        header `Retry-After` (o `data.retryAfterSeconds`) antes de reintentar.
      headers:
        Retry-After:
          description: Segundos que debes esperar antes de reintentar.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: >-
              Rate limit exceeded: 501 requests in the current 60s window, limit
              is 500. Retry in 12s.
            displayMessage: >-
              Superaste el límite de 500 solicitudes cada 60 segundos. Vuelve a
              intentarlo en 12 segundos.
            data:
              code: RATE_LIMIT_EXCEEDED
              scope: All API keys of your company share this budget.
              limit: 500
              used: 501
              windowSeconds: 60
              retryAfterSeconds: 12
              resetAt: '2026-11-04T15:00:12.000Z'
              hint: >-
                Wait until resetAt (or honor the Retry-After header) before
                retrying. Avoid repeating identical requests: reuse responses
                you already fetched, use filters and larger pageSize values
                instead of one request per item, and cap your client
                concurrency.
    InternalError:
      description: >-
        Error inesperado en Pruff. El texto de `message` puede variar (por
        ejemplo en mayúsculas); no dependas de él.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: Internal server error
    Timeout:
      description: >-
        La solicitud superó el tiempo máximo de 55 segundos. La operación puede
        haberse completado igual: antes de reintentar una solicitud que crea o
        modifica datos, verifica su estado.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            message: request_timeout
            displayMessage: La solicitud excedió el tiempo máximo permitido
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key que Pruff entrega a tu empresa.

````

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