curl --request PUT \
--url https://api.cal.id/users/edit-profile \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"username": "john-doe",
"name": "John Doe",
"bio": "Founder at Example Inc.",
"avatarUrl": "<string>",
"timeZone": "Asia/Kolkata",
"weekStart": "Monday",
"hideBranding": false,
"allowDynamicBooking": true,
"allowSEOIndexing": true,
"receiveMonthlyDigestEmail": true,
"brandColor": "#2563EB",
"darkBrandColor": "#1E40AF",
"theme": "light",
"appTheme": "light",
"completedOnboarding": true,
"locale": "en",
"timeFormat": 12,
"disableImpersonation": false,
"metadata": {
"additionalProp1": {}
}
}
'import requests
url = "https://api.cal.id/users/edit-profile"
payload = {
"username": "john-doe",
"name": "John Doe",
"bio": "Founder at Example Inc.",
"avatarUrl": "<string>",
"timeZone": "Asia/Kolkata",
"weekStart": "Monday",
"hideBranding": False,
"allowDynamicBooking": True,
"allowSEOIndexing": True,
"receiveMonthlyDigestEmail": True,
"brandColor": "#2563EB",
"darkBrandColor": "#1E40AF",
"theme": "light",
"appTheme": "light",
"completedOnboarding": True,
"locale": "en",
"timeFormat": 12,
"disableImpersonation": False,
"metadata": { "additionalProp1": {} }
}
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({
username: 'john-doe',
name: 'John Doe',
bio: 'Founder at Example Inc.',
avatarUrl: '<string>',
timeZone: 'Asia/Kolkata',
weekStart: 'Monday',
hideBranding: false,
allowDynamicBooking: true,
allowSEOIndexing: true,
receiveMonthlyDigestEmail: true,
brandColor: '#2563EB',
darkBrandColor: '#1E40AF',
theme: 'light',
appTheme: 'light',
completedOnboarding: true,
locale: 'en',
timeFormat: 12,
disableImpersonation: false,
metadata: {additionalProp1: {}}
})
};
fetch('https://api.cal.id/users/edit-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://api.cal.id/users/edit-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([
'username' => 'john-doe',
'name' => 'John Doe',
'bio' => 'Founder at Example Inc.',
'avatarUrl' => '<string>',
'timeZone' => 'Asia/Kolkata',
'weekStart' => 'Monday',
'hideBranding' => false,
'allowDynamicBooking' => true,
'allowSEOIndexing' => true,
'receiveMonthlyDigestEmail' => true,
'brandColor' => '#2563EB',
'darkBrandColor' => '#1E40AF',
'theme' => 'light',
'appTheme' => 'light',
'completedOnboarding' => true,
'locale' => 'en',
'timeFormat' => 12,
'disableImpersonation' => false,
'metadata' => [
'additionalProp1' => [
]
]
]),
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://api.cal.id/users/edit-profile"
payload := strings.NewReader("{\n \"username\": \"john-doe\",\n \"name\": \"John Doe\",\n \"bio\": \"Founder at Example Inc.\",\n \"avatarUrl\": \"<string>\",\n \"timeZone\": \"Asia/Kolkata\",\n \"weekStart\": \"Monday\",\n \"hideBranding\": false,\n \"allowDynamicBooking\": true,\n \"allowSEOIndexing\": true,\n \"receiveMonthlyDigestEmail\": true,\n \"brandColor\": \"#2563EB\",\n \"darkBrandColor\": \"#1E40AF\",\n \"theme\": \"light\",\n \"appTheme\": \"light\",\n \"completedOnboarding\": true,\n \"locale\": \"en\",\n \"timeFormat\": 12,\n \"disableImpersonation\": false,\n \"metadata\": {\n \"additionalProp1\": {}\n }\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://api.cal.id/users/edit-profile")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"username\": \"john-doe\",\n \"name\": \"John Doe\",\n \"bio\": \"Founder at Example Inc.\",\n \"avatarUrl\": \"<string>\",\n \"timeZone\": \"Asia/Kolkata\",\n \"weekStart\": \"Monday\",\n \"hideBranding\": false,\n \"allowDynamicBooking\": true,\n \"allowSEOIndexing\": true,\n \"receiveMonthlyDigestEmail\": true,\n \"brandColor\": \"#2563EB\",\n \"darkBrandColor\": \"#1E40AF\",\n \"theme\": \"light\",\n \"appTheme\": \"light\",\n \"completedOnboarding\": true,\n \"locale\": \"en\",\n \"timeFormat\": 12,\n \"disableImpersonation\": false,\n \"metadata\": {\n \"additionalProp1\": {}\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.id/users/edit-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 \"username\": \"john-doe\",\n \"name\": \"John Doe\",\n \"bio\": \"Founder at Example Inc.\",\n \"avatarUrl\": \"<string>\",\n \"timeZone\": \"Asia/Kolkata\",\n \"weekStart\": \"Monday\",\n \"hideBranding\": false,\n \"allowDynamicBooking\": true,\n \"allowSEOIndexing\": true,\n \"receiveMonthlyDigestEmail\": true,\n \"brandColor\": \"#2563EB\",\n \"darkBrandColor\": \"#1E40AF\",\n \"theme\": \"light\",\n \"appTheme\": \"light\",\n \"completedOnboarding\": true,\n \"locale\": \"en\",\n \"timeFormat\": 12,\n \"disableImpersonation\": false,\n \"metadata\": {\n \"additionalProp1\": {}\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": 123,
"email": "<string>",
"username": "<string>",
"name": "<string>",
"avatarUrl": "<string>"
},
"message": "<string>",
"meta": {
"pagination": {
"page": 123,
"limit": 123,
"total": 123,
"totalPages": 123
}
}
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}Update your profile
Edit user profile
curl --request PUT \
--url https://api.cal.id/users/edit-profile \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"username": "john-doe",
"name": "John Doe",
"bio": "Founder at Example Inc.",
"avatarUrl": "<string>",
"timeZone": "Asia/Kolkata",
"weekStart": "Monday",
"hideBranding": false,
"allowDynamicBooking": true,
"allowSEOIndexing": true,
"receiveMonthlyDigestEmail": true,
"brandColor": "#2563EB",
"darkBrandColor": "#1E40AF",
"theme": "light",
"appTheme": "light",
"completedOnboarding": true,
"locale": "en",
"timeFormat": 12,
"disableImpersonation": false,
"metadata": {
"additionalProp1": {}
}
}
'import requests
url = "https://api.cal.id/users/edit-profile"
payload = {
"username": "john-doe",
"name": "John Doe",
"bio": "Founder at Example Inc.",
"avatarUrl": "<string>",
"timeZone": "Asia/Kolkata",
"weekStart": "Monday",
"hideBranding": False,
"allowDynamicBooking": True,
"allowSEOIndexing": True,
"receiveMonthlyDigestEmail": True,
"brandColor": "#2563EB",
"darkBrandColor": "#1E40AF",
"theme": "light",
"appTheme": "light",
"completedOnboarding": True,
"locale": "en",
"timeFormat": 12,
"disableImpersonation": False,
"metadata": { "additionalProp1": {} }
}
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({
username: 'john-doe',
name: 'John Doe',
bio: 'Founder at Example Inc.',
avatarUrl: '<string>',
timeZone: 'Asia/Kolkata',
weekStart: 'Monday',
hideBranding: false,
allowDynamicBooking: true,
allowSEOIndexing: true,
receiveMonthlyDigestEmail: true,
brandColor: '#2563EB',
darkBrandColor: '#1E40AF',
theme: 'light',
appTheme: 'light',
completedOnboarding: true,
locale: 'en',
timeFormat: 12,
disableImpersonation: false,
metadata: {additionalProp1: {}}
})
};
fetch('https://api.cal.id/users/edit-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://api.cal.id/users/edit-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([
'username' => 'john-doe',
'name' => 'John Doe',
'bio' => 'Founder at Example Inc.',
'avatarUrl' => '<string>',
'timeZone' => 'Asia/Kolkata',
'weekStart' => 'Monday',
'hideBranding' => false,
'allowDynamicBooking' => true,
'allowSEOIndexing' => true,
'receiveMonthlyDigestEmail' => true,
'brandColor' => '#2563EB',
'darkBrandColor' => '#1E40AF',
'theme' => 'light',
'appTheme' => 'light',
'completedOnboarding' => true,
'locale' => 'en',
'timeFormat' => 12,
'disableImpersonation' => false,
'metadata' => [
'additionalProp1' => [
]
]
]),
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://api.cal.id/users/edit-profile"
payload := strings.NewReader("{\n \"username\": \"john-doe\",\n \"name\": \"John Doe\",\n \"bio\": \"Founder at Example Inc.\",\n \"avatarUrl\": \"<string>\",\n \"timeZone\": \"Asia/Kolkata\",\n \"weekStart\": \"Monday\",\n \"hideBranding\": false,\n \"allowDynamicBooking\": true,\n \"allowSEOIndexing\": true,\n \"receiveMonthlyDigestEmail\": true,\n \"brandColor\": \"#2563EB\",\n \"darkBrandColor\": \"#1E40AF\",\n \"theme\": \"light\",\n \"appTheme\": \"light\",\n \"completedOnboarding\": true,\n \"locale\": \"en\",\n \"timeFormat\": 12,\n \"disableImpersonation\": false,\n \"metadata\": {\n \"additionalProp1\": {}\n }\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://api.cal.id/users/edit-profile")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"username\": \"john-doe\",\n \"name\": \"John Doe\",\n \"bio\": \"Founder at Example Inc.\",\n \"avatarUrl\": \"<string>\",\n \"timeZone\": \"Asia/Kolkata\",\n \"weekStart\": \"Monday\",\n \"hideBranding\": false,\n \"allowDynamicBooking\": true,\n \"allowSEOIndexing\": true,\n \"receiveMonthlyDigestEmail\": true,\n \"brandColor\": \"#2563EB\",\n \"darkBrandColor\": \"#1E40AF\",\n \"theme\": \"light\",\n \"appTheme\": \"light\",\n \"completedOnboarding\": true,\n \"locale\": \"en\",\n \"timeFormat\": 12,\n \"disableImpersonation\": false,\n \"metadata\": {\n \"additionalProp1\": {}\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cal.id/users/edit-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 \"username\": \"john-doe\",\n \"name\": \"John Doe\",\n \"bio\": \"Founder at Example Inc.\",\n \"avatarUrl\": \"<string>\",\n \"timeZone\": \"Asia/Kolkata\",\n \"weekStart\": \"Monday\",\n \"hideBranding\": false,\n \"allowDynamicBooking\": true,\n \"allowSEOIndexing\": true,\n \"receiveMonthlyDigestEmail\": true,\n \"brandColor\": \"#2563EB\",\n \"darkBrandColor\": \"#1E40AF\",\n \"theme\": \"light\",\n \"appTheme\": \"light\",\n \"completedOnboarding\": true,\n \"locale\": \"en\",\n \"timeFormat\": 12,\n \"disableImpersonation\": false,\n \"metadata\": {\n \"additionalProp1\": {}\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": 123,
"email": "<string>",
"username": "<string>",
"name": "<string>",
"avatarUrl": "<string>"
},
"message": "<string>",
"meta": {
"pagination": {
"page": 123,
"limit": 123,
"total": 123,
"totalPages": 123
}
}
}{
"success": false,
"message": "<string>",
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
}
}Authorizations
Use the Authorization header with Bearer scheme.
Examples:
- API Key: Authorization: Bearer calid_xxxxx
Body
Public username slug shown on profile and booking pages.
"john-doe"
Display name for the user profile.
50"John Doe"
Short public profile biography.
"Founder at Example Inc."
IANA time zone used for schedules and booking display.
"Asia/Kolkata"
Preferred first day of week in calendar views.
"Monday"
Hide platform branding on booking pages and emails.
false
Allow dynamic booking behavior based on availability.
true
Allow search engines to index the public booking page.
true
Receive monthly usage and activity digest emails.
true
Primary brand color used on booking pages.
"#2563EB"
Brand color used for dark theme contexts.
"#1E40AF"
UI theme for the user profile.
light, dark "light"
Application theme preference for supported clients.
"light"
Marks onboarding as completed for the user.
true
Locale code used for formatting and localized content.
"en"
Preferred hour format. Typical values are 12 or 24.
12
Prevent admin impersonation for this user when enabled.
false
Flexible metadata object for advanced profile settings.
Show child attributes
Show child attributes
{ "additionalProp1": {} }
Related topics
Managing Your Cal ID Profile SettingsUpdate your avatarGet your profileHow to Set Your Internal Time FormatStart of the WeekWas this page helpful?