Get contact timeline
/contacts/{contactId}/timelineA single, chronological cross-channel activity feed for a contact, unifying every conversation the contact takes part in — both 1:1 chats keyed on the contact's identities and group chats where the contact is a current member — across all channel types. After a merge, the survivor's timeline includes the absorbed contact's history automatically. Each entry is a polymorphic envelope tagged by type; ordered newest-first by occurred_at. By default only message entries are returned; pass include_events=true to interleave lifecycle and chat events.
Path parameters
contactIdRequiredstringUnique identifier of the contact, prefixed with ct_. Returned when you create a contact or by the List contacts endpoint.
Headers
AuthorizationRequiredstringYour API key, sent as a bearer token: Authorization: Bearer <api_key>. Editing this stays in sync with the API key box on the right.
Query parameters
limitoptionalintegerMaximum number of items to return per page. Must be between 1 and 200; defaults to 50. Combine with cursor to paginate.
cursoroptionalstringOpaque pagination cursor. Pass the next_cursor value from a previous response to fetch the next page; omit it on the first request.
include_eventsoptionalbooleanWhen true, interleaves non-message activity (delivery/read receipts, reactions, chat/group/typing changes) from the events ledger into the feed as message_event / chat_event entries. Defaults to false (messages only).
Returns
dataoptionalTimelineItem[]
dataoptionalTimelineItem[]Array of TimelineItem
typeoptionalstringmessage: a message the contact sent or received. message_event: a lifecycle event for a message (sent/delivered/read/failed/reaction). chat_event: any other chat/group/typing event. Event entries only appear when include_events=true.
"message""message_event""chat_event"occurred_atoptionalintegerEpoch-millisecond timestamp the entry occurred at; the feed is ordered by this descending.
idoptionalstringThe underlying object id — a msg_ message id for message entries, an evt_ event id otherwise. Also the pagination sort key within a given occurred_at.
chat_idoptionalstring | nullchannel_idoptionalstring | nullchannel_typeoptionalstring | nullThe channel type this entry occurred on. Always set for message entries; may be null for channel-agnostic events.
objectoptionalobjectThe full entry payload. For message entries: id, chat_id, channel_id, channel_type, direction, type, text, status, created_at. For event entries: id, type, chat_id, channel_id, channel_type, data, occurred_at.
has_moreoptionalbooleannext_cursoroptionalstring | nullResponse codes
Sends a live request with your values and shows the real response below. Your key is stored only in this browser.
curl -X GET https://api.blooio.com/v4/contacts/ct_a1b2c3d4/timeline?limit=50&cursor=string&include_events=false \{ "data": [ { "type": "message", "occurred_at": 0, "id": "obj_a1b2c3d4", "chat_id": "chat_a1b2c3d4", "channel_id": "ch_a1b2c3d4", "channel_type": "string", "object": {} } ], "has_more": true, "next_cursor": "string"}