curl --request PUT \
--url https://your-instance.example.com/api/user/profile \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fullName": "Alex Rep",
"email": "alex@acme.example",
"phoneNumber": "+14155550199",
"designation": "Senior Account Executive",
"callForwardingEnabled": true
}
'import requests
url = "https://your-instance.example.com/api/user/profile"
payload = {
"fullName": "Alex Rep",
"email": "alex@acme.example",
"phoneNumber": "+14155550199",
"designation": "Senior Account Executive",
"callForwardingEnabled": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
fullName: 'Alex Rep',
email: 'alex@acme.example',
phoneNumber: '+14155550199',
designation: 'Senior Account Executive',
callForwardingEnabled: true
})
};
fetch('https://your-instance.example.com/api/user/profile', 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://your-instance.example.com/api/user/profile",
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([
'fullName' => 'Alex Rep',
'email' => 'alex@acme.example',
'phoneNumber' => '+14155550199',
'designation' => 'Senior Account Executive',
'callForwardingEnabled' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://your-instance.example.com/api/user/profile"
payload := strings.NewReader("{\n \"fullName\": \"Alex Rep\",\n \"email\": \"alex@acme.example\",\n \"phoneNumber\": \"+14155550199\",\n \"designation\": \"Senior Account Executive\",\n \"callForwardingEnabled\": true\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://your-instance.example.com/api/user/profile")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fullName\": \"Alex Rep\",\n \"email\": \"alex@acme.example\",\n \"phoneNumber\": \"+14155550199\",\n \"designation\": \"Senior Account Executive\",\n \"callForwardingEnabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://your-instance.example.com/api/user/profile")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fullName\": \"Alex Rep\",\n \"email\": \"alex@acme.example\",\n \"phoneNumber\": \"+14155550199\",\n \"designation\": \"Senior Account Executive\",\n \"callForwardingEnabled\": true\n}"
response = http.request(request)
puts response.read_body{
"user": {
"_id": "5f7b1c2e8a1d4e0012c3b4a5",
"email": "admin@acme.example",
"fullName": "Acme Admin",
"phoneNumber": "+14165550100",
"organizationId": "64a1b2c3d4e5f60012345678",
"accessRole": "ADMIN"
},
"persona": {
"position": "Leasing Manager",
"region": "Toronto",
"timezone": "America/Toronto"
}
}{
"error": "User not found",
"details": "No user with id 64ee9a8b1e7f2a0011223399"
}{
"error": "User not found",
"details": "No user with id 64ee9a8b1e7f2a0011223399"
}Update current user profile
Updates the authenticated user profile fields (name, email, phone, designation, persona, automations, notification preferences, call forwarding). Returns 409 if the new email is already in use.
curl --request PUT \
--url https://your-instance.example.com/api/user/profile \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fullName": "Alex Rep",
"email": "alex@acme.example",
"phoneNumber": "+14155550199",
"designation": "Senior Account Executive",
"callForwardingEnabled": true
}
'import requests
url = "https://your-instance.example.com/api/user/profile"
payload = {
"fullName": "Alex Rep",
"email": "alex@acme.example",
"phoneNumber": "+14155550199",
"designation": "Senior Account Executive",
"callForwardingEnabled": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
fullName: 'Alex Rep',
email: 'alex@acme.example',
phoneNumber: '+14155550199',
designation: 'Senior Account Executive',
callForwardingEnabled: true
})
};
fetch('https://your-instance.example.com/api/user/profile', 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://your-instance.example.com/api/user/profile",
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([
'fullName' => 'Alex Rep',
'email' => 'alex@acme.example',
'phoneNumber' => '+14155550199',
'designation' => 'Senior Account Executive',
'callForwardingEnabled' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://your-instance.example.com/api/user/profile"
payload := strings.NewReader("{\n \"fullName\": \"Alex Rep\",\n \"email\": \"alex@acme.example\",\n \"phoneNumber\": \"+14155550199\",\n \"designation\": \"Senior Account Executive\",\n \"callForwardingEnabled\": true\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://your-instance.example.com/api/user/profile")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fullName\": \"Alex Rep\",\n \"email\": \"alex@acme.example\",\n \"phoneNumber\": \"+14155550199\",\n \"designation\": \"Senior Account Executive\",\n \"callForwardingEnabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://your-instance.example.com/api/user/profile")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fullName\": \"Alex Rep\",\n \"email\": \"alex@acme.example\",\n \"phoneNumber\": \"+14155550199\",\n \"designation\": \"Senior Account Executive\",\n \"callForwardingEnabled\": true\n}"
response = http.request(request)
puts response.read_body{
"user": {
"_id": "5f7b1c2e8a1d4e0012c3b4a5",
"email": "admin@acme.example",
"fullName": "Acme Admin",
"phoneNumber": "+14165550100",
"organizationId": "64a1b2c3d4e5f60012345678",
"accessRole": "ADMIN"
},
"persona": {
"position": "Leasing Manager",
"region": "Toronto",
"timezone": "America/Toronto"
}
}{
"error": "User not found",
"details": "No user with id 64ee9a8b1e7f2a0011223399"
}{
"error": "User not found",
"details": "No user with id 64ee9a8b1e7f2a0011223399"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Display name shown across the UI and on outbound messages signed by this user.
Primary login email; must be unique across all users — endpoint returns 409 if already taken.
Personal mobile number (E.164 preferred); rejected if it collides with a provisioned organization SMS number.
Free-form job title (e.g., "Senior Account Executive"); used for display only.
Assigned Sinch outbound number; used as the from-number on user-attributed SMS.
ObjectId of the Department the user belongs to; controls team visibility and routing.
Role granted to the user: SUPERADMIN, ADMIN, DEPARTMENT_HEAD, SALES_REP.
Per-user automation toggles and configuration (free-form map persisted as Mixed on the User document).
Whether inbound calls should be forwarded to the user personal phone when they are offline or busy.
Per-category notification toggles (aiResponses, automationTriggers, escalations, calls, etc.). See UserNotificationPreferences.
Persona fields written to the user linked Persona document; created on first set, otherwise merged. businessHours/timezone require the org-level override flag.
Show child attributes
Show child attributes
Response
Profile updated
Returned after PUT /api/user/profile. Returns the refreshed user plus the updated persona side-by-side.
Refreshed User document (with sensitive fields stripped).
Persona document linked to a user (may be null when unset).
Show child attributes
Show child attributes
{
"_id": "64eea1110000000000000040",
"user": "Alex Rep",
"position": "Senior Account Executive",
"userEmail": "alex@acme.example",
"organization": "Acme Corp",
"organizationAddress": "500 Bay St, Toronto, ON",
"leadProvider": "Facebook Lead Ads",
"organizationWebsite": "https://acme.example",
"organizationCity": "Toronto",
"region": "Ontario",
"timezone": "America/Toronto",
"businessHours": "9am-6pm Mon-Fri"
}