Timeline
The timeline is a feed of recent activity, newest first, drawn from several kinds of record: comments, tags being applied, email threads, files, tasks, and deals moving between stages. Use it to show what has happened lately with a person, a company, or a deal.
You choose whose activity to include. A scope selects a set of contacts, such as the ones you have pinned. A record narrows the feed to the contacts of one organization or space, to a single contact, or to one deal’s stage history. A request with neither returns an empty timeline.
#The timeline item object
One event in the feed. Every item has the same attributes; which ones are filled in depends on its type, and the rest are null.
Attributes
-
typestringWhat happened.
commenttaggingthreadfiletaskdeal -
idstring · uuidId of the underlying record: the comment, the tagging, the thread, the attachment that carried the file, the task, or the deal’s stage change.
-
kindstring · nullableFor
dealitems, what the stage change was: the deal was created, moved to another open stage, or closed. Null for other types.startedstage_movedwonlost -
timestampstring · date-timeWhen it happened. For a thread, the time of its latest message; for a task, when it was last updated; for a file, when the message carrying it was sent.
-
titlestring · nullableA short heading: the thread’s subject, the task’s assignment, or the deal’s name.
CommentandTaggedfor those types. Null for files. -
descriptionstring · nullableA line of detail: the comment’s text, the tag that was applied, the thread’s snippet, the task’s description, or the stage change, such as
Moved from Proposal sent to Negotiation. Null for files. -
contactcontact · nullableThe contact a comment, tagging, or task is attached to.
-
useruser · nullableWho wrote the comment, applied the tag, or moved the deal.
-
tagtag · nullableFor
taggingitems, the tag that was applied. -
fileobject · nullableFor
fileitems, the file.Show 5 child attributesHide child attributes
idstring · uuidnamestring · nullablefile_namestring · nullableextensionstring · nullabledescriptionstring · nullable
-
dealobject · nullableFor
dealitems, the deal and the stages it moved between.Show 7 child attributesHide child attributes
idstring · uuidnamestringamountnumber · nullablecurrencystringpipeline_idstring · uuidfrom_stageobject · nullableThe stage the deal left, with its
id,name, andposition. Null when the deal was created.to_stageobjectThe stage the deal entered, with the same three attributes.
-
agentstring · nullableFor
dealitems, the agent whose proposal produced the stage change, such asauto_deal. Null when a person made the change, including a change they asked Carom’s chat assistant to make. -
proposal_idstring · uuid · nullableThe proposal behind an agent’s stage change. Look it up with Retrieve a proposal. Only the proposal’s approver can retrieve it; for anyone else that returns 404.
{
"type": "deal",
"id": "b5d7f9b1-3d5f-4b7d-9f1b-7d9f1b3d5f08",
"kind": "stage_moved",
"timestamp": "2026-09-17T15:42:10.038Z",
"title": "Wildgrove portfolio renewal",
"description": "Moved from Proposal sent to Negotiation",
"deal": {
"id": "8f2b6d4a-1c9e-4a7b-b3d5-0e6f8a2c4d17",
"name": "Wildgrove portfolio renewal",
"amount": 48000.0,
"currency": "USD",
"pipeline_id": "5e8a1c3f-7b2d-4f6e-a9c0-3d1b7e4f2a86",
"from_stage": {
"id": "8b3d5f7a-9c1e-4a2b-b4d6-0e8f1a3c5b77",
"name": "Proposal sent",
"position": 2
},
"to_stage": {
"id": "4f6a8c0e-2b4d-4c6e-8f0a-3b5d7e9f1c28",
"name": "Negotiation",
"position": 3
}
},
"agent": "auto_deal",
"proposal_id": "c3e5a7b9-1d3f-4a5b-9c7e-2f4a6b8d0e61",
"contact": null,
"user": {
"id": "9c41d2e8-3f6a-4b7c-8d1e-5a2f7b9c0d3e",
"first_name": "Dana",
"last_name": "Whitfield",
…
},
"tag": null,
"file": null
}
#List timeline items
Returns up to 50 items, newest first, for the scope or record you name. Name at most one record: contact_id, organization_id, space_id, or deal_id. A record outranks scope.
To fetch the next page, pass the response’s oldest_timestamp as before.
A deal’s timeline holds only that deal’s stage changes. To read the comments on a deal, use its discussion.
Query parameters
-
scopestringWhich contacts to include: every contact visible to your key, the contacts your key’s user has corresponded with, or the contacts they have pinned.
allinteractedpinned -
contact_idstring · uuidOnly this contact’s activity.
-
organization_idstring · uuidActivity for the contacts employed at this organization that your key can see, plus stage changes on the organization’s deals.
-
space_idstring · uuidActivity for the contacts in this space that your key can see.
-
deal_idstring · uuidOnly this deal’s stage changes.
-
typesstringComma-separated kinds of activity to include. Omit to include all of them. The names are plural, unlike the singular
typeon each item.commentstaggingsthreadsfilestasksdeals -
beforestring · date-timeReturn only items older than this time. To fetch the next page, pass the previous response’s
oldest_timestamp.
Returns
-
itemsarray of timeline itemsUp to 50 items, newest first.
-
has_morebooleanTrue when this page is full, meaning older items may exist. Fetch them by passing
oldest_timestampasbefore. -
oldest_timestampstring · date-time · nullableThe time of the last item, with microsecond precision. Pass it as
beforefor the next page; use it rather than the item’stimestamp, which has only millisecond precision. Null whenitemsis empty.
Errors
- 400
invalid_requestscopeisn’t one of the listed values,beforeisn’t a valid time, or more than one record is named. - 404
record_not_foundThe contact, organization, space, or deal you named isn’t visible to your key.
curl "https://api.carom.io/timeline?organization_id=6b0e2d9a-4c31-4f8e-a7d2-90c4e1b7f5a3&types=comments,deals" \
-H "Authorization: Bearer $CAROM_API_KEY"
{
"items": [
{
"type": "deal",
"id": "b5d7f9b1-3d5f-4b7d-9f1b-7d9f1b3d5f08",
"kind": "stage_moved",
"timestamp": "2026-09-17T15:42:10.038Z",
"title": "Wildgrove portfolio renewal",
"description": "Moved from Proposal sent to Negotiation",
…
},
{
"type": "comment",
"id": "a9b8c7d6-e5f4-4a3b-9c2d-1e0f9a8b7c6d",
"kind": null,
"timestamp": "2026-09-03T18:44:12.885Z",
"title": "Comment",
"description": "Priya wants the renewal numbers before the 15th. She's out the week after.",
"deal": null,
"agent": null,
"proposal_id": null,
"contact": {
"id": "1f3c9a52-7b0e-4d4a-9c1e-2a6f0d8b3e41",
"name": "Priya Natarajan",
…
},
"user": {
"id": "9c41d2e8-3f6a-4b7c-8d1e-5a2f7b9c0d3e",
"first_name": "Dana",
"last_name": "Whitfield",
…
},
"tag": null,
"file": null
}
],
"has_more": false,
"oldest_timestamp": "2026-09-03T18:44:12.885417Z"
}