Notifications
A notification tells a user that something involving them happened: a task or deal was assigned to them, a colleague shared a record or mentioned them in a comment, an agent made a proposal. Use this resource to read the notifications of your key’s user and to mark them read, unread, or dismissed.
Each notification has three independent states for its recipient. It is new until the user next opens their notifications in Carom. It is unread until it is marked read. It stays in the list until it is dismissed, and undismissing it puts it back.
#The notification object
Returned by List notifications, by the endpoints that mark a single notification read or unread, and by Undismiss a notification. The state fields describe the notification for your key’s user.
Attributes
-
idstring · uuidUnique identifier for the notification.
-
eventstring · nullableWhat happened, such as
task_assigned,comment_mentioned, orcontact_shared. Every event is listed undersliceon List notifications. -
payloadobject · nullableThe record the notification is about, as it was when the notification was created: its
id, itsrecord_type(such astask,contact, ordeal), and a few identifying fields such asnameorsubject. When the notification is about a comment or a share on that record, the comment or share is nested under its own key,commentorshare. Adraft_failedpayload is about a draft and carries itssubjectandlast_error, an object with acodeand amessageyou can show the user, as on the draft itself. -
prompting_user_idstring · uuid · nullableThe user whose action caused the notification. Null when Carom or an agent caused it.
-
newbooleanTrue when the notification arrived after the user last opened their notifications in Carom.
-
read_atstring · date-time · nullableWhen the notification was marked read. Null while it is unread.
-
dismissed_atstring · date-time · nullableWhen the notification was dismissed. Dismissed notifications aren’t listed, so this is null in list responses.
-
created_atstring · date-time · nullable
{
"id": "c433e00a-df4a-4cd7-a89f-4431d8aa07e8",
"payload": {
"id": "1f3c9a52-7b0e-4d4a-9c1e-2a6f0d8b3e41",
"record_type": "contact",
"name": "Priya Natarajan",
"email_address": "priya@wildgrove.example",
"comment": {
"id": "a9b8c7d6-e5f4-4a3b-9c2d-1e0f9a8b7c6d",
"text": "@Dana Whitfield can you send Priya the renewal numbers before the 15th?"
}
},
"event": "comment_mentioned",
"prompting_user_id": "44c3f6da-393b-4664-9bfa-3c14e76b8cb8",
"created_at": "2026-09-03T18:44:12.507Z",
"dismissed_at": null,
"read_at": null,
"new": true
}
#List notifications
Returns the notifications of your key’s user, newest first, 50 per page unless you set limit. Dismissed notifications are left out. Filter by event or to unread notifications only, and page forward with a cursor.
Query parameters
-
slicestringComma-separated events. Only notifications for these events are returned.
task_assignedtask_shareddeal_assigneddeal_wondeal_stage_moveddeal_sharedcomment_addedcomment_mentionedinteraction_share_requestedmilestone_sharedfile_sharedthread_sharedcontact_sharedorganization_sharedcalendar_event_sharedspace_sharedmailbox_shareddraft_failedmailbox_lockedmailbox_unlockedproposal_createdproposal_applied -
statusstringSet to
unreadto return only unread notifications. Omit to include read ones.unread -
limitintegerdefault50Page size, at most 100.
-
next_cursorstringOpaque token from the previous page’s
page_info.next_cursor. Omit to start from the newest notification. See Pagination.
Returns
-
collectionobjectA page of notifications and the cursor to the next one.
Show 4 child attributesHide child attributes
-
recordsarray of notifications -
page_infopage infoWhere this page sits in the full list. Pass
next_cursorback to fetch the next page whilehas_more_afteris true. -
slice_keystring · nullableThe
sliceyou sent, echoed back. -
filtersobject · nullableThe
statusfilter, echoed back.
-
Errors
- 400
invalid_requestslicenames an event not in the list above, orstatusisn’tunread. - 400
invalid_cursorThe cursor is unreadable, or came from another list or sort. - 400
unsupported_cursor_directionAprev_cursorwas sent. This list pages forward only.
curl "https://api.carom.io/notifications?status=unread&limit=20" \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"collection": {
"slice_key": null,
"filters": { "status": "unread" },
"page_info": {
"limit": 20,
"next_cursor": "q7Rn2Kx9vTf4LmWc8HdZ",
"prev_cursor": null,
"has_more_after": true,
"has_more_before": false
},
"records": [
{
"id": "c433e00a-df4a-4cd7-a89f-4431d8aa07e8",
"event": "comment_mentioned",
"prompting_user_id": "44c3f6da-393b-4664-9bfa-3c14e76b8cb8",
"created_at": "2026-09-03T18:44:12.507Z",
"read_at": null,
"new": true,
…
},
{
"id": "f9152af0-797b-47d9-9588-285e43241ac2",
"event": "deal_won",
"payload": {
"id": "7e64838f-be70-4490-9284-e526155e1dac",
"record_type": "deal",
"name": "Wildgrove portfolio renewal"
},
"prompting_user_id": "722d227f-631b-4a8a-8579-629fd96250a5",
"created_at": "2026-09-02T21:05:40.118Z",
"read_at": null,
"new": false,
…
}
]
}
}
#Count notifications
Counts the notifications that List notifications would return for the same filters, without fetching them.
Query parameters
-
slice,statusAs on List notifications.
Returns
The count object, wrapped in count. Notifications are always counted exactly, so exact is true and cap is null.
Errors
- 400
invalid_requestslicenames an unknown event, orstatusisn’tunread.
curl "https://api.carom.io/notifications/count?status=unread&slice=comment_mentioned,task_assigned" \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"count": {
"total": 3,
"exact": true,
"capped": false,
"cap": null
}
}
#Mark all notifications read
Marks every unread notification of the user read, not only those on a page you have loaded, and clears new on all of them. Returns the recalculated counts.
Returns
-
new_countintegerNotifications with
newset. Zero after this call. -
unread_countintegerUnread notifications. Zero after this call.
-
unread_countsobjectUnread notifications per event, keyed by event. Events with none are omitted, so this is empty after this call.
curl -X POST https://api.carom.io/notifications/read \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"new_count": 0,
"unread_counts": {},
"unread_count": 0
}
#Mark a notification read
Marks one notification read and returns it with its new read_at.
Path parameters
-
idstring · uuidrequiredThe notification’s id.
Returns
The notification object, wrapped in notification.
Errors
- 404
record_not_foundYour key’s user isn’t a recipient of a notification with that id.
curl -X POST https://api.carom.io/notifications/c433e00a-df4a-4cd7-a89f-4431d8aa07e8/read \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"notification": {
"id": "c433e00a-df4a-4cd7-a89f-4431d8aa07e8",
"event": "comment_mentioned",
"read_at": "2026-09-18T15:02:33.810Z",
"dismissed_at": null,
"new": false,
…
}
}
#Mark a notification unread
Clears a notification’s read_at so it counts as unread again, and returns it.
Path parameters
-
idstring · uuidrequiredThe notification’s id.
Returns
The notification object, wrapped in notification.
Errors
- 404
record_not_foundYour key’s user isn’t a recipient of a notification with that id.
curl -X POST https://api.carom.io/notifications/c433e00a-df4a-4cd7-a89f-4431d8aa07e8/unread \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"notification": {
"id": "c433e00a-df4a-4cd7-a89f-4431d8aa07e8",
"event": "comment_mentioned",
"read_at": null,
"dismissed_at": null,
"new": false,
…
}
}
#Dismiss a notification
Removes one notification from the user’s list and counts. To dismiss several at once, use Dismiss notifications.
Path parameters
-
idstring · uuidrequiredThe notification’s id.
Returns
The ok object, {"ok": "ok"}.
Errors
- 404
record_not_foundYour key’s user isn’t a recipient of a notification with that id.
curl -X POST https://api.carom.io/notifications/c433e00a-df4a-4cd7-a89f-4431d8aa07e8/dismiss \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"ok": "ok"
}
#Dismiss notifications
Dismisses several notifications at once: a list of ids, every notification for some events, or all of them. Send one of ids, slice, or global. If you send more than one, global wins over slice, and slice wins over ids. Ids the user isn’t a recipient of are ignored. To dismiss one notification, use Dismiss a notification.
Request body application/json
-
idsarray of strings · uuidThe notifications to dismiss.
-
slicestringComma-separated events, such as
task_assigned, from the list on List notifications. Dismisses every notification of the user for those events. -
globalbooleantruedismisses every notification of the user.
Returns
The ok object, {"ok": "ok"}.
Errors
- 400
invalid_requestidsisn’t an array of UUIDs,slicenames an event not in the list, orglobalisn’t a boolean.
curl https://api.carom.io/notifications/dismiss \
-H "Authorization: Bearer $CAROM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"ids": [
"c433e00a-df4a-4cd7-a89f-4431d8aa07e8",
"f9152af0-797b-47d9-9588-285e43241ac2"
]
}'
{
"ok": "ok"
}
#Undismiss a notification
Clears a notification’s dismissed_at, which puts it back in the user’s list and counts, and returns it. Its read state is unchanged. Undismissing a notification that isn’t dismissed changes nothing and still returns it.
Path parameters
-
idstring · uuidrequiredThe notification’s id.
Returns
The notification object, wrapped in notification.
Errors
- 404
record_not_foundYour key’s user isn’t a recipient of a notification with that id.
curl -X POST https://api.carom.io/notifications/c433e00a-df4a-4cd7-a89f-4431d8aa07e8/undismiss \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"notification": {
"id": "c433e00a-df4a-4cd7-a89f-4431d8aa07e8",
"event": "comment_mentioned",
"read_at": "2026-09-18T15:02:33.810Z",
"dismissed_at": null,
"new": false,
…
}
}