curl --request PUT \
--url https://pria.praxislxp.com/api/admin/user/{userId} \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"email": "jsmith@example.com",
"fname": "<string>",
"lname": "<string>",
"status": "<string>",
"plan": "<string>",
"credits": 123,
"accountType": "<string>",
"institution": "<string>",
"password": "<string>",
"mustChangePassword": true,
"updatePasswordOnSSO": true,
"passwordChangeSkipOnSSO": true,
"mfaEnabled": true,
"ragLimitChunks": 8,
"personalWelcomePending": true,
"ragKagMode": true
}
'import requests
url = "https://pria.praxislxp.com/api/admin/user/{userId}"
payload = {
"email": "jsmith@example.com",
"fname": "<string>",
"lname": "<string>",
"status": "<string>",
"plan": "<string>",
"credits": 123,
"accountType": "<string>",
"institution": "<string>",
"password": "<string>",
"mustChangePassword": True,
"updatePasswordOnSSO": True,
"passwordChangeSkipOnSSO": True,
"mfaEnabled": True,
"ragLimitChunks": 8,
"personalWelcomePending": True,
"ragKagMode": True
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: 'jsmith@example.com',
fname: '<string>',
lname: '<string>',
status: '<string>',
plan: '<string>',
credits: 123,
accountType: '<string>',
institution: '<string>',
password: '<string>',
mustChangePassword: true,
updatePasswordOnSSO: true,
passwordChangeSkipOnSSO: true,
mfaEnabled: true,
ragLimitChunks: 8,
personalWelcomePending: true,
ragKagMode: true
})
};
fetch('https://pria.praxislxp.com/api/admin/user/{userId}', 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://pria.praxislxp.com/api/admin/user/{userId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'email' => 'jsmith@example.com',
'fname' => '<string>',
'lname' => '<string>',
'status' => '<string>',
'plan' => '<string>',
'credits' => 123,
'accountType' => '<string>',
'institution' => '<string>',
'password' => '<string>',
'mustChangePassword' => true,
'updatePasswordOnSSO' => true,
'passwordChangeSkipOnSSO' => true,
'mfaEnabled' => true,
'ragLimitChunks' => 8,
'personalWelcomePending' => true,
'ragKagMode' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <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://pria.praxislxp.com/api/admin/user/{userId}"
payload := strings.NewReader("{\n \"email\": \"jsmith@example.com\",\n \"fname\": \"<string>\",\n \"lname\": \"<string>\",\n \"status\": \"<string>\",\n \"plan\": \"<string>\",\n \"credits\": 123,\n \"accountType\": \"<string>\",\n \"institution\": \"<string>\",\n \"password\": \"<string>\",\n \"mustChangePassword\": true,\n \"updatePasswordOnSSO\": true,\n \"passwordChangeSkipOnSSO\": true,\n \"mfaEnabled\": true,\n \"ragLimitChunks\": 8,\n \"personalWelcomePending\": true,\n \"ragKagMode\": true\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-access-token", "<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.put("https://pria.praxislxp.com/api/admin/user/{userId}")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"jsmith@example.com\",\n \"fname\": \"<string>\",\n \"lname\": \"<string>\",\n \"status\": \"<string>\",\n \"plan\": \"<string>\",\n \"credits\": 123,\n \"accountType\": \"<string>\",\n \"institution\": \"<string>\",\n \"password\": \"<string>\",\n \"mustChangePassword\": true,\n \"updatePasswordOnSSO\": true,\n \"passwordChangeSkipOnSSO\": true,\n \"mfaEnabled\": true,\n \"ragLimitChunks\": 8,\n \"personalWelcomePending\": true,\n \"ragKagMode\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pria.praxislxp.com/api/admin/user/{userId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"jsmith@example.com\",\n \"fname\": \"<string>\",\n \"lname\": \"<string>\",\n \"status\": \"<string>\",\n \"plan\": \"<string>\",\n \"credits\": 123,\n \"accountType\": \"<string>\",\n \"institution\": \"<string>\",\n \"password\": \"<string>\",\n \"mustChangePassword\": true,\n \"updatePasswordOnSSO\": true,\n \"passwordChangeSkipOnSSO\": true,\n \"mfaEnabled\": true,\n \"ragLimitChunks\": 8,\n \"personalWelcomePending\": true,\n \"ragKagMode\": true\n}"
response = http.request(request)
puts response.read_bodyEdit a user (Admin only)
Edits an existing account; this is the Users edit page. On an existing account, credits, plan, current twin (institution, applied together with plan ‘sdk’), names, password and MFA change only here; status also changes through the bulk status endpoint and DELETE. Requires users.edit on the account’s current twin, and on institution whenever it names a different twin. A credits value, or a plan other than the account’s own, that you are not allowed to change is ignored. An account with no current twin can be edited only once the person has joined your current Digital Twin (an active membership of their own, or one they accepted); while it has not joined your current Digital Twin, the call answers 403 and changes nothing. What counts is that the membership is the person’s own: a pending, suspended or removed one does not count while it stays so, and counts again once your Digital Twin’s administrators set it back to active. A new accountType must be user, admin or super, and an account or a role above your own can be neither edited nor assigned. Setting status to ‘deleted’ deletes the user and needs users.delete.
curl --request PUT \
--url https://pria.praxislxp.com/api/admin/user/{userId} \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"email": "jsmith@example.com",
"fname": "<string>",
"lname": "<string>",
"status": "<string>",
"plan": "<string>",
"credits": 123,
"accountType": "<string>",
"institution": "<string>",
"password": "<string>",
"mustChangePassword": true,
"updatePasswordOnSSO": true,
"passwordChangeSkipOnSSO": true,
"mfaEnabled": true,
"ragLimitChunks": 8,
"personalWelcomePending": true,
"ragKagMode": true
}
'import requests
url = "https://pria.praxislxp.com/api/admin/user/{userId}"
payload = {
"email": "jsmith@example.com",
"fname": "<string>",
"lname": "<string>",
"status": "<string>",
"plan": "<string>",
"credits": 123,
"accountType": "<string>",
"institution": "<string>",
"password": "<string>",
"mustChangePassword": True,
"updatePasswordOnSSO": True,
"passwordChangeSkipOnSSO": True,
"mfaEnabled": True,
"ragLimitChunks": 8,
"personalWelcomePending": True,
"ragKagMode": True
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: 'jsmith@example.com',
fname: '<string>',
lname: '<string>',
status: '<string>',
plan: '<string>',
credits: 123,
accountType: '<string>',
institution: '<string>',
password: '<string>',
mustChangePassword: true,
updatePasswordOnSSO: true,
passwordChangeSkipOnSSO: true,
mfaEnabled: true,
ragLimitChunks: 8,
personalWelcomePending: true,
ragKagMode: true
})
};
fetch('https://pria.praxislxp.com/api/admin/user/{userId}', 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://pria.praxislxp.com/api/admin/user/{userId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'email' => 'jsmith@example.com',
'fname' => '<string>',
'lname' => '<string>',
'status' => '<string>',
'plan' => '<string>',
'credits' => 123,
'accountType' => '<string>',
'institution' => '<string>',
'password' => '<string>',
'mustChangePassword' => true,
'updatePasswordOnSSO' => true,
'passwordChangeSkipOnSSO' => true,
'mfaEnabled' => true,
'ragLimitChunks' => 8,
'personalWelcomePending' => true,
'ragKagMode' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <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://pria.praxislxp.com/api/admin/user/{userId}"
payload := strings.NewReader("{\n \"email\": \"jsmith@example.com\",\n \"fname\": \"<string>\",\n \"lname\": \"<string>\",\n \"status\": \"<string>\",\n \"plan\": \"<string>\",\n \"credits\": 123,\n \"accountType\": \"<string>\",\n \"institution\": \"<string>\",\n \"password\": \"<string>\",\n \"mustChangePassword\": true,\n \"updatePasswordOnSSO\": true,\n \"passwordChangeSkipOnSSO\": true,\n \"mfaEnabled\": true,\n \"ragLimitChunks\": 8,\n \"personalWelcomePending\": true,\n \"ragKagMode\": true\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-access-token", "<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.put("https://pria.praxislxp.com/api/admin/user/{userId}")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"jsmith@example.com\",\n \"fname\": \"<string>\",\n \"lname\": \"<string>\",\n \"status\": \"<string>\",\n \"plan\": \"<string>\",\n \"credits\": 123,\n \"accountType\": \"<string>\",\n \"institution\": \"<string>\",\n \"password\": \"<string>\",\n \"mustChangePassword\": true,\n \"updatePasswordOnSSO\": true,\n \"passwordChangeSkipOnSSO\": true,\n \"mfaEnabled\": true,\n \"ragLimitChunks\": 8,\n \"personalWelcomePending\": true,\n \"ragKagMode\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pria.praxislxp.com/api/admin/user/{userId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"jsmith@example.com\",\n \"fname\": \"<string>\",\n \"lname\": \"<string>\",\n \"status\": \"<string>\",\n \"plan\": \"<string>\",\n \"credits\": 123,\n \"accountType\": \"<string>\",\n \"institution\": \"<string>\",\n \"password\": \"<string>\",\n \"mustChangePassword\": true,\n \"updatePasswordOnSSO\": true,\n \"passwordChangeSkipOnSSO\": true,\n \"mfaEnabled\": true,\n \"ragLimitChunks\": 8,\n \"personalWelcomePending\": true,\n \"ragKagMode\": true\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
JWT token passed in x-access-token header
Path Parameters
The user ID to edit
^[0-9a-fA-F]{24}$Body
active, inactive or trialing; 'deleted' deletes the user
sdk places the account on institution; any other plan (free, entry, premium, pro, monthly) clears its current twin. A plan change you are not allowed to make is ignored
Ignored when you are not allowed to change credits
user, admin or super
Digital twin _id; applied only together with plan 'sdk'
Default true: SSO sign-ins skip the forced password change
true asks this person for an emailed code at every sign-in from a device that is not trusted (an authenticator app they already use keeps working); false turns multi-factor authentication off, clears their authenticator app and backup codes, and signs out their trusted devices. Anything other than true or false is refused with 400.
How many knowledge segments a turn retrieves when this person works in their personal space, without a Digital Twin (default 2; rounded and clamped to 1-15)
1 <= x <= 15true shows the welcome message the next time this person opens their personal Pria, while they belong to no Digital Twin; false clears it
The person's retrieval mode: false = RAG Only, true = RAG + KAG Fusion; missing means RAG + KAG Fusion wherever knowledge-graph retrieval (KAG) is available. Send it only when the mode is changed: saving it records when the choice was made (ragKagModeChosenAt; a value in the body is ignored), and only a recorded false keeps KAG off
Response
User updated
Was this page helpful?