curl --request POST \
--url https://pria.praxislxp.com/api/admin/user \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"email": "jsmith@example.com",
"fname": "<string>",
"lname": "<string>",
"password": "<string>",
"institution": "<string>",
"credits": 123,
"picture": "<string>",
"remember_history_count": 123,
"mustChangePassword": true,
"updatePasswordOnSSO": true,
"passwordChangeSkipOnSSO": true
}
'import requests
url = "https://pria.praxislxp.com/api/admin/user"
payload = {
"email": "jsmith@example.com",
"fname": "<string>",
"lname": "<string>",
"password": "<string>",
"institution": "<string>",
"credits": 123,
"picture": "<string>",
"remember_history_count": 123,
"mustChangePassword": True,
"updatePasswordOnSSO": True,
"passwordChangeSkipOnSSO": True
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: 'jsmith@example.com',
fname: '<string>',
lname: '<string>',
password: '<string>',
institution: '<string>',
credits: 123,
picture: '<string>',
remember_history_count: 123,
mustChangePassword: true,
updatePasswordOnSSO: true,
passwordChangeSkipOnSSO: true
})
};
fetch('https://pria.praxislxp.com/api/admin/user', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => 'jsmith@example.com',
'fname' => '<string>',
'lname' => '<string>',
'password' => '<string>',
'institution' => '<string>',
'credits' => 123,
'picture' => '<string>',
'remember_history_count' => 123,
'mustChangePassword' => true,
'updatePasswordOnSSO' => true,
'passwordChangeSkipOnSSO' => 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"
payload := strings.NewReader("{\n \"email\": \"jsmith@example.com\",\n \"fname\": \"<string>\",\n \"lname\": \"<string>\",\n \"password\": \"<string>\",\n \"institution\": \"<string>\",\n \"credits\": 123,\n \"picture\": \"<string>\",\n \"remember_history_count\": 123,\n \"mustChangePassword\": true,\n \"updatePasswordOnSSO\": true,\n \"passwordChangeSkipOnSSO\": true\n}")
req, _ := http.NewRequest("POST", 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.post("https://pria.praxislxp.com/api/admin/user")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"jsmith@example.com\",\n \"fname\": \"<string>\",\n \"lname\": \"<string>\",\n \"password\": \"<string>\",\n \"institution\": \"<string>\",\n \"credits\": 123,\n \"picture\": \"<string>\",\n \"remember_history_count\": 123,\n \"mustChangePassword\": true,\n \"updatePasswordOnSSO\": true,\n \"passwordChangeSkipOnSSO\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pria.praxislxp.com/api/admin/user")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.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 \"password\": \"<string>\",\n \"institution\": \"<string>\",\n \"credits\": 123,\n \"picture\": \"<string>\",\n \"remember_history_count\": 123,\n \"mustChangePassword\": true,\n \"updatePasswordOnSSO\": true,\n \"passwordChangeSkipOnSSO\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"id": "<string>",
"message": "<string>",
"ignoredFields": [
"<string>"
]
}{
"success": true,
"id": "<string>",
"message": "<string>",
"ignoredFields": [
"<string>"
]
}Create a user, or add an existing account to a digital twin
Creates the user when the email is new. A new user gets 50 credits, or the Digital Twin’s credit award. When plan is ‘sdk’ with a valid institution (the API’s word for a Digital Twin: your Digital Twin’s _id), the user is enrolled into that Digital Twin. accountType must be user, admin or super, and a role above your own cannot be assigned.
When the email already belongs to a live account, that account is not edited: credits, status, plan, current twin, names, password, MFA and preferences stay as they are. Change them with PUT /api/admin/user/. The account is added to institution if it is not a member yet, with accountType as its role there, and accountType is applied to the account only when it raises it. When request fields were dropped, the response lists them in ignoredFields. Without institution, or when institution is already the account’s current twin, the call answers “User already exists” and changes nothing. A soft-deleted account whose email still matches is re-added like a new one. Re-adding one that has no current Digital Twin answers 403 unless it holds an active membership of its own on your current Digital Twin. The membership this adds records the enrolling administrator, and the Digital Twin’s sign-in provider does not sign the person in through it until they use the Digital Twin from a session they signed into with their password (switching to it, or that sign-in itself).
curl --request POST \
--url https://pria.praxislxp.com/api/admin/user \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"email": "jsmith@example.com",
"fname": "<string>",
"lname": "<string>",
"password": "<string>",
"institution": "<string>",
"credits": 123,
"picture": "<string>",
"remember_history_count": 123,
"mustChangePassword": true,
"updatePasswordOnSSO": true,
"passwordChangeSkipOnSSO": true
}
'import requests
url = "https://pria.praxislxp.com/api/admin/user"
payload = {
"email": "jsmith@example.com",
"fname": "<string>",
"lname": "<string>",
"password": "<string>",
"institution": "<string>",
"credits": 123,
"picture": "<string>",
"remember_history_count": 123,
"mustChangePassword": True,
"updatePasswordOnSSO": True,
"passwordChangeSkipOnSSO": True
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: 'jsmith@example.com',
fname: '<string>',
lname: '<string>',
password: '<string>',
institution: '<string>',
credits: 123,
picture: '<string>',
remember_history_count: 123,
mustChangePassword: true,
updatePasswordOnSSO: true,
passwordChangeSkipOnSSO: true
})
};
fetch('https://pria.praxislxp.com/api/admin/user', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => 'jsmith@example.com',
'fname' => '<string>',
'lname' => '<string>',
'password' => '<string>',
'institution' => '<string>',
'credits' => 123,
'picture' => '<string>',
'remember_history_count' => 123,
'mustChangePassword' => true,
'updatePasswordOnSSO' => true,
'passwordChangeSkipOnSSO' => 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"
payload := strings.NewReader("{\n \"email\": \"jsmith@example.com\",\n \"fname\": \"<string>\",\n \"lname\": \"<string>\",\n \"password\": \"<string>\",\n \"institution\": \"<string>\",\n \"credits\": 123,\n \"picture\": \"<string>\",\n \"remember_history_count\": 123,\n \"mustChangePassword\": true,\n \"updatePasswordOnSSO\": true,\n \"passwordChangeSkipOnSSO\": true\n}")
req, _ := http.NewRequest("POST", 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.post("https://pria.praxislxp.com/api/admin/user")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"jsmith@example.com\",\n \"fname\": \"<string>\",\n \"lname\": \"<string>\",\n \"password\": \"<string>\",\n \"institution\": \"<string>\",\n \"credits\": 123,\n \"picture\": \"<string>\",\n \"remember_history_count\": 123,\n \"mustChangePassword\": true,\n \"updatePasswordOnSSO\": true,\n \"passwordChangeSkipOnSSO\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pria.praxislxp.com/api/admin/user")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.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 \"password\": \"<string>\",\n \"institution\": \"<string>\",\n \"credits\": 123,\n \"picture\": \"<string>\",\n \"remember_history_count\": 123,\n \"mustChangePassword\": true,\n \"updatePasswordOnSSO\": true,\n \"passwordChangeSkipOnSSO\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"id": "<string>",
"message": "<string>",
"ignoredFields": [
"<string>"
]
}{
"success": true,
"id": "<string>",
"message": "<string>",
"ignoredFields": [
"<string>"
]
}Authorizations
JWT token passed in x-access-token header
Body
active, inactive free, sdk super can be assigned by super admins only
user, admin, super Must choose a new password after an email + password sign-in
Default true: a Google/Microsoft/Facebook/Apple/LMS sign-in is never asked to change the password; mustChangePassword waits for an email + password sign-in
Response
The email already belongs to an account. "User already exists" (nothing changed), or "User updated!" with ignoredFields listing the request fields that were not applied.
Was this page helpful?