curl --request PATCH \
--url https://api.pruff.com/api/clients/user/update \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"email": "ana.perez@example.com",
"name": "Ana Pérez Soto",
"active": true,
"roleIds": [
2,
6,
7
]
}
'import requests
url = "https://api.pruff.com/api/clients/user/update"
payload = {
"email": "ana.perez@example.com",
"name": "Ana Pérez Soto",
"active": True,
"roleIds": [2, 6, 7]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: 'ana.perez@example.com',
name: 'Ana Pérez Soto',
active: true,
roleIds: [2, 6, 7]
})
};
fetch('https://api.pruff.com/api/clients/user/update', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pruff.com/api/clients/user/update",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'email' => 'ana.perez@example.com',
'name' => 'Ana Pérez Soto',
'active' => true,
'roleIds' => [
2,
6,
7
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pruff.com/api/clients/user/update"
payload := strings.NewReader("{\n \"email\": \"ana.perez@example.com\",\n \"name\": \"Ana Pérez Soto\",\n \"active\": true,\n \"roleIds\": [\n 2,\n 6,\n 7\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.pruff.com/api/clients/user/update")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"ana.perez@example.com\",\n \"name\": \"Ana Pérez Soto\",\n \"active\": true,\n \"roleIds\": [\n 2,\n 6,\n 7\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pruff.com/api/clients/user/update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"ana.perez@example.com\",\n \"name\": \"Ana Pérez Soto\",\n \"active\": true,\n \"roleIds\": [\n 2,\n 6,\n 7\n ]\n}"
response = http.request(request)
puts response.read_body{
"message": "User updated"
}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.
curl --request PATCH \
--url https://api.pruff.com/api/clients/user/update \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"email": "ana.perez@example.com",
"name": "Ana Pérez Soto",
"active": true,
"roleIds": [
2,
6,
7
]
}
'import requests
url = "https://api.pruff.com/api/clients/user/update"
payload = {
"email": "ana.perez@example.com",
"name": "Ana Pérez Soto",
"active": True,
"roleIds": [2, 6, 7]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: 'ana.perez@example.com',
name: 'Ana Pérez Soto',
active: true,
roleIds: [2, 6, 7]
})
};
fetch('https://api.pruff.com/api/clients/user/update', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pruff.com/api/clients/user/update",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'email' => 'ana.perez@example.com',
'name' => 'Ana Pérez Soto',
'active' => true,
'roleIds' => [
2,
6,
7
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pruff.com/api/clients/user/update"
payload := strings.NewReader("{\n \"email\": \"ana.perez@example.com\",\n \"name\": \"Ana Pérez Soto\",\n \"active\": true,\n \"roleIds\": [\n 2,\n 6,\n 7\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.pruff.com/api/clients/user/update")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"ana.perez@example.com\",\n \"name\": \"Ana Pérez Soto\",\n \"active\": true,\n \"roleIds\": [\n 2,\n 6,\n 7\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pruff.com/api/clients/user/update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"ana.perez@example.com\",\n \"name\": \"Ana Pérez Soto\",\n \"active\": true,\n \"roleIds\": [\n 2,\n 6,\n 7\n ]\n}"
response = http.request(request)
puts response.read_body{
"message": "User updated"
}Cuerpo
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.
true
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.
[2, 6, 7]