> ## 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.

# Editar usuario

> Edita un usuario de tu empresa identificado por su `email`. Solo se modifican los campos que envías.

Debes enviar al menos uno de estos campos: `name`, `password`, `roleIds` o `active`. `active` debe ser un booleano (`true` o `false`); si es lo único que envías y no es un booleano, responde 400 con el mensaje `No data to update`.

**Activar o desactivar.** Con `active: false` en un usuario de tu empresa, el usuario queda desactivado y no puede usar Pruff. Con `active: false` en un usuario de otra empresa que tiene acceso a la tuya (un usuario invitado), solo se desactiva su acceso a tu empresa: el usuario no se desactiva y sigue usando Pruff en su propia empresa. Envía `active: true` para volver a activarlo (en un usuario invitado, para devolverle el acceso a tu empresa).

`roleIds` reemplaza por completo los roles que el usuario tenía. Envía solo ids de roles de tu empresa. Una lista vacía (`[]`) es válida y deja al usuario sin roles. `roleIds: null` se trata como si no lo enviaras: si es lo único que envías, responde 400 `No data to update`. La solicitud responde 400 `Invalid roleIds` y no modifica nada si `roleIds` no es una lista, incluye un id que no existe en tu empresa o incluye un valor que no es un entero. 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.

Si el usuario que editas ya tiene un rol de administrador, no puedes cambiarle los roles por API: si envías `roleIds`, aunque sea `[]`, la solicitud responde 403 y no modifica nada. Ese 403 solo se aplica cuando envías `roleIds`.

Si el usuario pertenece a otra empresa y tiene acceso a la tuya, solo puedes cambiar `active` y `roleIds`. Intentar cambiar `name` o `password` responde 403.



## OpenAPI

````yaml openapi/clients.yaml PATCH /user/update
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/update:
    patch:
      tags:
        - Usuarios
      summary: Editar usuario
      description: >-
        Edita un usuario de tu empresa identificado por su `email`. Solo se
        modifican los campos que envías.


        Debes enviar al menos uno de estos campos: `name`, `password`, `roleIds`
        o `active`. `active` debe ser un booleano (`true` o `false`); si es lo
        único que envías y no es un booleano, responde 400 con el mensaje `No
        data to update`.


        **Activar o desactivar.** Con `active: false` en un usuario de tu
        empresa, el usuario queda desactivado y no puede usar Pruff. Con
        `active: false` en un usuario de otra empresa que tiene acceso a la tuya
        (un usuario invitado), solo se desactiva su acceso a tu empresa: el
        usuario no se desactiva y sigue usando Pruff en su propia empresa. Envía
        `active: true` para volver a activarlo (en un usuario invitado, para
        devolverle el acceso a tu empresa).


        `roleIds` reemplaza por completo los roles que el usuario tenía. Envía
        solo ids de roles de tu empresa. Una lista vacía (`[]`) es válida y deja
        al usuario sin roles. `roleIds: null` se trata como si no lo enviaras:
        si es lo único que envías, responde 400 `No data to update`. La
        solicitud responde 400 `Invalid roleIds` y no modifica nada si `roleIds`
        no es una lista, incluye un id que no existe en tu empresa o incluye un
        valor que no es un entero. 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.


        Si el usuario que editas ya tiene un rol de administrador, no puedes
        cambiarle los roles por API: si envías `roleIds`, aunque sea `[]`, la
        solicitud responde 403 y no modifica nada. Ese 403 solo se aplica cuando
        envías `roleIds`.


        Si el usuario pertenece a otra empresa y tiene acceso a la tuya, solo
        puedes cambiar `active` y `roleIds`. Intentar cambiar `name` o
        `password` responde 403.
      operationId: updateUser
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserUpdateRequest'
            example:
              email: ana.perez@example.com
              name: Ana Pérez Soto
              active: true
              roleIds:
                - 2
                - 6
                - 7
      responses:
        '200':
          description: Usuario actualizado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserMessageResponse'
              example:
                message: User updated
        '400':
          description: El body es inválido. El campo `message` identifica el motivo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                emailRequired:
                  summary: Falta el email
                  value:
                    message: email is required
                noDataToUpdate:
                  summary: No enviaste ningún campo para modificar
                  value:
                    message: No data to update
                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
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: >-
            No se puede completar el cambio. El campo `message` identifica el
            motivo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                administratorRoles:
                  summary: >-
                    Enviaste `roleIds` para un usuario que ya tiene un rol de
                    administrador
                  value:
                    message: >-
                      Roles of an administrator user cannot be changed through
                      the API
                guestNameOrPassword:
                  summary: >-
                    El usuario pertenece a otra empresa, por lo que su nombre y
                    su contraseña no se pueden modificar desde tu empresa
                  value:
                    message: Name and password belong to the own company of the user
        '404':
          description: No existe un usuario con ese email en tu empresa.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: User not found
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalError'
        '504':
          $ref: '#/components/responses/Timeout'
components:
  schemas:
    UserUpdateRequest:
      type: object
      required:
        - email
      properties:
        email:
          type: string
          format: email
          description: >-
            Email del usuario que quieres editar. Identifica al usuario y no se
            modifica.
          example: ana.perez@example.com
        name:
          type: string
          description: Nuevo nombre del usuario.
          example: Ana Pérez Soto
        password:
          type: string
          format: password
          description: Nueva contraseña del usuario.
          example: NuevaContraseña456!
        active:
          type: boolean
          description: >-
            Activa (`true`) o desactiva (`false`) al usuario. En un usuario de
            tu empresa, `false` desactiva al usuario. En un usuario de otra
            empresa con acceso a la tuya (invitado), solo activa o desactiva su
            acceso a tu empresa y no modifica al usuario en su propia empresa.
            Puedes enviarlo solo, sin otros campos. Debe ser un booleano; si es
            lo único que envías y no es un booleano, la solicitud responde 400.
          example: true
        roleIds:
          type: array
          items:
            type: integer
          description: >-
            Ids de los roles del usuario. Reemplaza todos los roles que tenía.
            Una lista vacía (`[]`) es válida y deja al usuario sin roles; `null`
            se trata como si no lo enviaras. Usa los mismos ids que en `POST
            /user/create`:


            | 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.
            Envía solo ids de roles de tu empresa. 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`. Si el usuario ya
            tiene un rol de administrador, enviar `roleIds` responde 403 y no
            modifica nada.
          example:
            - 2
            - 6
            - 7
    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.