Users
A user is a person who signs in to your Carom account. Use this resource to list your team, read the profile and settings of your key’s user, choose which mailboxes and calendars they follow, set how Carom’s assistant acts for them, and review the notes the assistant keeps about them.
An API key acts as the user who created it. Paths under /users/current refer to that user, and so must every {user_id}. Inviting, editing, deactivating, and removing users happen in the Carom app.
#The user object
Returned by List users and Retrieve a user. Retrieve your key’s user adds that user’s settings, subscriptions, and account.
Attributes
-
idstring · uuidUnique identifier for the user.
-
first_namestring · nullable -
last_namestring · nullable -
email_addressstring · nullableThe address the user signs in with.
-
statusstringA
deactivateduser can’t sign in but can be reactivated with everything intact. Adeleteduser’s content has been removed permanently.activedeactivateddeleted -
activatedbooleanFalse for an invited user who hasn’t signed in yet. An invitation is accepted by signing in.
-
deactivated_atstring · date-time · nullable -
is_ownerboolean · nullableTrue for the account owner, who is also the only user who can read invoices and charges.
-
is_adminboolean · nullableAdmins can invite and manage other users.
-
backgroundstring · nullableFree-form notes about the user.
-
avatar_colorstring · nullableThe color of the user’s default avatar.
gray#3e6eb6mediumpurple#66b185golddarkorangetomato -
avatarobject · nullableThe user’s picture, with an
id, asource_urlyou can display directly, and the originalfile_name. Null when the user hasn’t uploaded one.
{
"id": "9c41d2e8-3f6a-4b7c-8d1e-5a2f7b9c0d3e",
"first_name": "Dana",
"last_name": "Whitfield",
"email_address": "dana@harborline.example",
"is_admin": true,
"is_owner": true,
"background": "Managing partner. Owns the property-management accounts.",
"avatar_color": "#3e6eb6",
"status": "active",
"activated": true,
"deactivated_at": null,
"avatar": null
}
#List users
Returns the users in your account, oldest first by when they were added. By default only active users are included; pass status to include deactivated users. Deleted users are never listed. Returns every matching user in one response; the list isn’t paginated.
Query parameters
-
statusstringdefaultactiveallreturns active and deactivated users.activedeactivatedall
Returns
-
collectionobjectShow 4 child attributesHide child attributes
-
recordsarray of users -
total_resultsinteger · nullableThe number of users in
records. -
sortstringAlways
created_at. -
orderstringAlways
asc.
-
Errors
- 400
invalid_requeststatusisn’t one of the allowed values.
curl "https://api.carom.io/users?status=all" \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"collection": {
"sort": "created_at",
"order": "asc",
"total_results": 3,
"records": [
{
"id": "9c41d2e8-3f6a-4b7c-8d1e-5a2f7b9c0d3e",
"first_name": "Dana",
"last_name": "Whitfield",
"email_address": "dana@harborline.example",
"status": "active",
…
},
{
"id": "44c3f6da-393b-4664-9bfa-3c14e76b8cb8",
"first_name": "Marcus",
"last_name": "Oyelaran",
"email_address": "marcus@harborline.example",
"status": "active",
…
},
{
"id": "722d227f-631b-4a8a-8579-629fd96250a5",
"first_name": "Lena",
"last_name": "Brandt",
"email_address": "lena@harborline.example",
"status": "deactivated",
"deactivated_at": "2026-09-11T17:30:02.417Z",
…
}
]
}
}
#Retrieve a user
Returns any user in your account, including deactivated and deleted users.
Path parameters
-
idstring · uuidrequiredThe user’s id.
Returns
The user object, wrapped in user.
Errors
- 404
record_not_foundNo user with that id is in your account.
curl https://api.carom.io/users/44c3f6da-393b-4664-9bfa-3c14e76b8cb8 \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"user": {
"id": "44c3f6da-393b-4664-9bfa-3c14e76b8cb8",
"first_name": "Marcus",
"last_name": "Oyelaran",
"email_address": "marcus@harborline.example",
"is_admin": false,
"is_owner": false,
"background": null,
"avatar_color": "mediumpurple",
"status": "active",
"activated": true,
"deactivated_at": null,
"avatar": null
}
}
#Retrieve your key’s user
Returns your key’s user, with their settings, the mailboxes and calendars they follow, what they are allowed to do, and a summary of the account. Call it first to learn your own user id and account id.
Returns
The user object, wrapped in user, with these additional attributes.
-
capabilitiesobjectWhat the user may do right now, given their role and the account’s billing state. Use these rather than working the rules out yourself.
Show 5 child attributesHide child attributes
add_usersbooleanThe user is an admin and the account’s billing allows new users.
add_mailboxesbooleanThe user may connect mailboxes and the account’s billing allows new ones.
-
api_key_tiersarray of stringsThe key tiers the account’s
api_accessallows:["read", "read_write"],["read"], or empty when API access is off. send_emailbooleanThe user can send email from Carom. False when the account’s billing blocks sending,
outbound_email_enabledis off, or Carom has paused sending.ask_carombooleanThe user can use Ask Carom: the account’s
ask_carom_enabledis on and the user hasn’t turned it off in their assistant settings.
-
configurationobject · nullableThe user’s settings.
Show 3 child attributesHide child attributes
idstring · uuidtime_zonestring · nullableIANA zone name, such as
America/New_York.notification_optoutsobjectPush notifications the user has turned off, keyed by notification event, such as
{"task_assigned": true}.
-
mailbox_subscriptionsarray of mailbox subscriptions · nullableThe mailboxes the user follows. Each nested
mailboxalso carriesuser_sendable, true when the user may send from it, anduser_sendability_reasonwhen they can’t. -
calendar_subscriptionsarray of calendar subscriptions · nullableThe calendars the user follows.
-
accountobject · nullableThe user’s account. Billing details are on Retrieve an account.
Show 17 child attributesHide child attributes
idstring · uuidorganizationstring · nullableThe organization’s name.
domainstring · nullableThe email domain of the user who created the account.
statusstringpre-livelivesubscription_statusstring · nullableAs on the account object.
live_atstring · date-time · nullableWhen the account went live.
credit_expires_atstring · date-time · nullableWhen the launch credit expires: the end of the first billing period. Null before the account goes live. Stays set after the date passes.
credit_remaining_centsinteger · nullableLaunch credit left, in cents. Null outside the credit period.
ai_agents_enabledbooleanWhether agents run for this account.
api_accessstringThe most any API key on the account can do. With
off, every key request returns403 api_access_disabled; withread, write operations return403 api_access_read_only. Set by admins in the Carom app.offreadread_writeoutbound_email_enabledbooleanWhether users can send email from Carom. Set by admins in the Carom app.
ask_carom_enabledbooleanWhether Ask Carom is on for the account. Set by admins in the Carom app.
demobooleanTrue for a demo account filled with sample data.
expires_atstring · date-time · nullableWhen a demo account will be removed.
closed_atstring · date-time · nullableWhen the account was closed.
usersarray of users · nullable-
agent_configurationsarray of objects · nullableWhich of Carom’s agents are turned on for the account. An agent’s settings are on List agent configurations, which requires an admin.
Show 3 child attributesHide child attributes
idstring · uuidagent_slugstringOne of the agent slugs.
enabledboolean
curl https://api.carom.io/users/current \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"user": {
"id": "9c41d2e8-3f6a-4b7c-8d1e-5a2f7b9c0d3e",
"first_name": "Dana",
"last_name": "Whitfield",
"email_address": "dana@harborline.example",
"is_admin": true,
"is_owner": true,
…
"capabilities": {
"add_users": true,
"add_mailboxes": true,
"api_key_tiers": ["read", "read_write"],
"send_email": true,
"ask_carom": true
},
"mailbox_subscriptions": [
{
"id": "0d627db9-7fcd-4197-8468-99e87594297b",
"mailbox_id": "d4e5f6a7-b8c9-4d0e-9f1a-2b3c4d5e6f70",
"color": "#3e6eb6",
"mailbox": {
"id": "d4e5f6a7-b8c9-4d0e-9f1a-2b3c4d5e6f70",
"email_address": "dana@harborline.example",
"user_sendable": true,
"user_sendability_reason": null,
…
},
…
}
],
"calendar_subscriptions": [
{
"id": "1b7da12f-735d-451e-978d-46c3fc441097",
"calendar_id": "2e3e3e5d-1f2f-4c8d-81b6-75ea0db7b9c0",
"color": "#66b185",
…
}
],
"configuration": {
"id": "0d4e263d-e915-46ea-8f76-d5866869ba21",
"time_zone": "America/New_York",
"notification_optouts": { "deal_stage_moved": true }
},
"account": {
"id": "06d4e1ca-b76f-4210-8165-c0f9199478ec",
"status": "live",
"organization": "Harborline Advisory",
"domain": "harborline.example",
"ai_agents_enabled": true,
"api_access": "read_write",
"outbound_email_enabled": true,
"ask_carom_enabled": true,
"demo": false,
"expires_at": null,
"closed_at": null,
"subscription_status": "active",
"live_at": "2026-09-02T13:02:51.640Z",
"credit_expires_at": "2026-10-02T13:02:51.000Z",
"credit_remaining_cents": 8350,
"users": [ … ],
"agent_configurations": [ … ]
}
}
}
#The mailbox subscription object
Attributes
-
idstring · uuidUnique identifier for the subscription.
-
mailbox_idstring · uuid · nullable -
colorstring · nullableThe color the user has chosen for the mailbox, such as
#3e6eb6. -
mailboxmailboxThe followed mailbox.
{
"id": "3eae338a-9ae0-4b42-83c2-bd9e1edd66bc",
"mailbox_id": "6f1a9c3e-8b2d-4a7f-9e5c-1d3b7a9f2c86",
"color": "#66b185",
"mailbox": {
"id": "6f1a9c3e-8b2d-4a7f-9e5c-1d3b7a9f2c86",
"name": "Harborline Sales",
"email_address": "sales@harborline.example",
"sync_state": "active",
"connection_status": "connected",
…
}
}
#Create a mailbox subscription
Subscribes your key’s user to a mailbox visible to your key.
Path parameters
-
user_idstring · uuidrequiredThe id of your key’s user, from Retrieve your key’s user. Any other id returns
record_not_found.
Request body application/json
-
mailbox_subscriptionobjectrequiredShow 1 child attributeHide child attributes
-
mailbox_idstring · uuidrequiredThe mailbox to follow.
-
Returns
The mailbox subscription object with its mailbox, wrapped in mailbox_subscription.
Errors
- 400
invalid_requestmailbox_idis missing. - 404
record_not_founduser_idisn’t your key’s user, or no mailbox with that id is visible to your key.
curl https://api.carom.io/users/9c41d2e8-3f6a-4b7c-8d1e-5a2f7b9c0d3e/mailbox_subscriptions \
-H "Authorization: Bearer $CAROM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mailbox_subscription": {
"mailbox_id": "6f1a9c3e-8b2d-4a7f-9e5c-1d3b7a9f2c86"
}
}'
{
"mailbox_subscription": {
"id": "3eae338a-9ae0-4b42-83c2-bd9e1edd66bc",
"mailbox_id": "6f1a9c3e-8b2d-4a7f-9e5c-1d3b7a9f2c86",
"color": null,
"mailbox": {
"id": "6f1a9c3e-8b2d-4a7f-9e5c-1d3b7a9f2c86",
"name": "Harborline Sales",
"email_address": "sales@harborline.example",
…
}
}
}
#Update a mailbox subscription
Changes the color of a mailbox the user follows.
Path parameters
-
user_idstring · uuidrequiredThe id of your key’s user.
-
idstring · uuidrequiredThe subscription’s id.
Request body application/json
-
mailbox_subscriptionobjectrequiredShow 1 child attributeHide child attributes
-
colorstring · nullableThe new color.
nullclears it.
-
Returns
The mailbox subscription object with its mailbox, wrapped in mailbox_subscription.
Errors
- 404
record_not_founduser_idisn’t your key’s user, or the user has no subscription with that id.
curl -X PATCH https://api.carom.io/users/9c41d2e8-3f6a-4b7c-8d1e-5a2f7b9c0d3e/mailbox_subscriptions/3eae338a-9ae0-4b42-83c2-bd9e1edd66bc \
-H "Authorization: Bearer $CAROM_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "mailbox_subscription": { "color": "#66b185" } }'
{
"mailbox_subscription": {
"id": "3eae338a-9ae0-4b42-83c2-bd9e1edd66bc",
"mailbox_id": "6f1a9c3e-8b2d-4a7f-9e5c-1d3b7a9f2c86",
"color": "#66b185",
"mailbox": {
"id": "6f1a9c3e-8b2d-4a7f-9e5c-1d3b7a9f2c86",
"name": "Harborline Sales",
"email_address": "sales@harborline.example",
…
}
}
}
#Delete a mailbox subscription
Stops the user following a mailbox. The mailbox itself isn’t affected.
Path parameters
-
user_idstring · uuidrequiredThe id of your key’s user.
-
idstring · uuidrequiredThe subscription’s id.
Returns
An empty response with status 204.
Errors
- 404
record_not_founduser_idisn’t your key’s user, or the user has no subscription with that id.
curl -X DELETE https://api.carom.io/users/9c41d2e8-3f6a-4b7c-8d1e-5a2f7b9c0d3e/mailbox_subscriptions/3eae338a-9ae0-4b42-83c2-bd9e1edd66bc \
-H "Authorization: Bearer $CAROM_API_KEY"
No content
#The calendar subscription object
A calendar subscription records that a user follows a calendar, and the color the user has chosen for it. The owner of a mailbox follows its calendars from the start; other users can follow any calendar visible to them.
Attributes
-
idstring · uuidUnique identifier for the subscription.
-
calendar_idstring · uuid · nullable -
colorstring · nullableThe color the user has chosen for the calendar.
-
calendarcalendarThe followed calendar.
{
"id": "1b7da12f-735d-451e-978d-46c3fc441097",
"calendar_id": "2e3e3e5d-1f2f-4c8d-81b6-75ea0db7b9c0",
"color": "#66b185",
"calendar": {
"id": "2e3e3e5d-1f2f-4c8d-81b6-75ea0db7b9c0",
"name": "Marcus Oyelaran",
"description": null,
"access_role": "reader",
"mailbox_id": "de1a3485-c4cf-4983-a11c-75d99ad409d4",
"sync_enabled": true,
"primary": true
}
}
#Create a calendar subscription
Subscribes your key’s user to a calendar visible to your key.
Path parameters
-
user_idstring · uuidrequiredThe id of your key’s user, from Retrieve your key’s user. Any other id returns
record_not_found.
Request body application/json
-
calendar_subscriptionobjectrequiredShow 1 child attributeHide child attributes
-
calendar_idstring · uuidrequiredThe calendar to follow.
-
Returns
The calendar subscription object with its calendar, wrapped in calendar_subscription.
Errors
- 400
invalid_requestcalendar_idis missing. - 404
record_not_founduser_idisn’t your key’s user, or no calendar with that id is visible to your key.
curl https://api.carom.io/users/9c41d2e8-3f6a-4b7c-8d1e-5a2f7b9c0d3e/calendar_subscriptions \
-H "Authorization: Bearer $CAROM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"calendar_subscription": {
"calendar_id": "2e3e3e5d-1f2f-4c8d-81b6-75ea0db7b9c0"
}
}'
{
"calendar_subscription": {
"id": "1b7da12f-735d-451e-978d-46c3fc441097",
"calendar_id": "2e3e3e5d-1f2f-4c8d-81b6-75ea0db7b9c0",
"color": null,
"calendar": {
"id": "2e3e3e5d-1f2f-4c8d-81b6-75ea0db7b9c0",
"name": "Marcus Oyelaran",
…
}
}
}
#Update a calendar subscription
Changes the color of a calendar the user follows.
Path parameters
-
user_idstring · uuidrequiredThe id of your key’s user.
-
idstring · uuidrequiredThe subscription’s id.
Request body application/json
-
calendar_subscriptionobjectrequiredShow 1 child attributeHide child attributes
-
colorstring · nullableThe new color.
nullclears it.
-
Returns
The calendar subscription object with its calendar, wrapped in calendar_subscription.
Errors
- 404
record_not_founduser_idisn’t your key’s user, or the user has no subscription with that id.
curl -X PATCH https://api.carom.io/users/9c41d2e8-3f6a-4b7c-8d1e-5a2f7b9c0d3e/calendar_subscriptions/1b7da12f-735d-451e-978d-46c3fc441097 \
-H "Authorization: Bearer $CAROM_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "calendar_subscription": { "color": "#66b185" } }'
{
"calendar_subscription": {
"id": "1b7da12f-735d-451e-978d-46c3fc441097",
"calendar_id": "2e3e3e5d-1f2f-4c8d-81b6-75ea0db7b9c0",
"color": "#66b185",
"calendar": {
"id": "2e3e3e5d-1f2f-4c8d-81b6-75ea0db7b9c0",
"name": "Marcus Oyelaran",
…
}
}
}
#Delete a calendar subscription
Stops the user following a calendar. The calendar itself isn’t affected.
Path parameters
-
user_idstring · uuidrequiredThe id of your key’s user.
-
idstring · uuidrequiredThe subscription’s id.
Returns
An empty response with status 204.
Errors
- 404
record_not_founduser_idisn’t your key’s user, or the user has no subscription with that id.
curl -X DELETE https://api.carom.io/users/9c41d2e8-3f6a-4b7c-8d1e-5a2f7b9c0d3e/calendar_subscriptions/1b7da12f-735d-451e-978d-46c3fc441097 \
-H "Authorization: Bearer $CAROM_API_KEY"
No content
#Retrieve your assistant settings
Returns your key’s user’s settings for Ask Carom, Carom’s chat assistant: whether it is on for them, and, for each kind of change the assistant can make, whether it makes the change at once or asks first. These settings belong to the user and apply only to their own conversations. Carom’s background agents are configured separately, per account, through agent configurations.
Each change the assistant makes is recorded as a proposal addressed to the user. At auto the change is applied immediately and recorded with status auto_applied, and can be undone where the action type allows it. At suggest it waits as a pending proposal for the user to accept.
Capabilities
| Action type | Default | Allowed levels |
|---|---|---|
comment.create, deal.advance_stage, deal.create, tag.apply, tag.remove, task.complete, task.create | auto | suggest, auto |
email.send | suggest | suggest |
A sent email can’t be taken back, so the assistant always asks before sending. The response lists each capability’s allowed levels; use those rather than this table.
Returns
-
assistant_settingsobjectShow 3 child attributesHide child attributes
-
availablebooleanWhether Ask Carom is available on the account: its
ask_carom_enabledis on, as set by an admin in the Carom app, and Carom hasn’t paused the assistant. Read-only. -
enabledbooleandefaulttrueThe user’s own choice. The assistant answers only when
availableandenabledare both true, which is whatcapabilities.ask_caromon Retrieve your key’s user reports. -
capabilitiesarray of objectsOne entry per kind of change the assistant can make, listed whether or not the user has changed it.
Show 4 child attributesHide child attributes
action_typestringThe proposal
action_typethis capability covers.levelstringThe level in effect for the user.
suggestautodefaultstringThe level a user who hasn’t changed it gets.
suggestautoallowed_levelsarray of stringsThe levels
levelmay be set to.
-
curl https://api.carom.io/users/current/assistant_settings \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"assistant_settings": {
"available": true,
"enabled": true,
"capabilities": [
{
"action_type": "comment.create",
"level": "auto",
"default": "auto",
"allowed_levels": ["suggest", "auto"]
},
…
{
"action_type": "email.send",
"level": "suggest",
"default": "suggest",
"allowed_levels": ["suggest"]
},
…
{
"action_type": "task.create",
"level": "auto",
"default": "auto",
"allowed_levels": ["suggest", "auto"]
}
]
}
}
#Update your assistant settings
Turns the assistant on or off for your key’s user, or changes the level of one or more capabilities. Fields you leave out keep their values, and capabilities you don’t name keep their levels. Any user can change their own settings; no one can change another user’s.
Request body application/json
-
assistant_settingsobjectrequiredShow 2 child attributesHide child attributes
-
enabledbooleanWhether the assistant answers this user.
-
capability_levelsobjectLevels to set, keyed by action type, such as
{"task.create": "suggest"}. Needs at least one key. Each key must be one of the user’scapabilitiesand each value one of that capability’sallowed_levels.
-
Returns
The updated settings, in the same shape as Retrieve your assistant settings.
Errors
- 400
invalid_requestThe body has noassistant_settingsobject,enabledisn’t a boolean,capability_levelsis empty or not an object, or it names an action type the assistant doesn’t have or a level outside that capability’sallowed_levels. Nothing is saved.
curl -X PATCH https://api.carom.io/users/current/assistant_settings \
-H "Authorization: Bearer $CAROM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"assistant_settings": {
"capability_levels": { "task.create": "suggest" }
}
}'
{
"assistant_settings": {
"available": true,
"enabled": true,
"capabilities": [
…
{
"action_type": "task.create",
"level": "suggest",
"default": "auto",
"allowed_levels": ["suggest", "auto"]
}
]
}
}
#List assistant memories
Carom’s assistant can save short private notes about a user, up to 500 characters each, to use in later conversations. A user can have at most 50. This endpoint returns all of them for your key’s user, newest first. Only the assistant creates memories.
Returns
-
assistant_memoriesarray of objectsShow 4 child attributesHide child attributes
idstring · uuidcontentstring · nullableThe note.
created_atstring · date-time · nullableupdated_atstring · date-time · nullable
curl https://api.carom.io/users/current/assistant_memories \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"assistant_memories": [
{
"id": "6976ee2b-cd22-4821-972f-39c0387f82af",
"content": "Prefers meeting briefs as three bullet points, sent the evening before.",
"created_at": "2026-09-15T20:11:37.244Z",
"updated_at": "2026-09-15T20:11:37.244Z"
},
{
"id": "2def32d1-7b88-4a90-8774-426de3d14798",
"content": "Handles renewals for Wildgrove Property Management; Marcus Oyelaran covers new business.",
"created_at": "2026-09-08T14:52:03.618Z",
"updated_at": "2026-09-08T14:52:03.618Z"
}
]
}
#Delete an assistant memory
Deletes one of the assistant’s notes about your key’s user. The assistant stops using it. Deleting a memory frees one of the user’s 50 slots.
Path parameters
-
idstring · uuidrequiredThe memory’s id.
Returns
An empty response with status 204.
Errors
- 404
record_not_foundThe user has no memory with that id.
curl -X DELETE https://api.carom.io/users/current/assistant_memories/6976ee2b-cd22-4821-972f-39c0387f82af \
-H "Authorization: Bearer $CAROM_API_KEY"
No content