6.7 WhatsAppTimelineController
Route: api/v{version:apiVersion}/whatsapp/timeline · Class attributes: [Authorize] · 1 endpoint
— a full audit trail of every lifecycle event on a conversation (assignment, transfer, close/reopen,
archive/pin, tag add/remove, note add), used for the conversation's "Activity" tab.
GET GetTimeline/{conversationId}
Purpose: the full event history for a conversation, newest first.
Permission: WhatsAppInbox.Timeline · Request: route conversationId:Guid
Response data:
[
{ "id": "e1...", "conversationId": "c1...", "eventType": 3, "eventTypeName": "ConversationAssigned",
"description": "Assigned to Sara Al-Harbi", "triggeredByUserId": "...", "triggeredByUserName": "Ahmed (Admin)",
"triggeredOn": "2026-07-05T10:15:00Z", "jsonMetadata": "{\"assignedToUserId\":\"...\"}" },
{ "id": "e2...", "conversationId": "c1...", "eventType": 7, "eventTypeName": "TagAdded",
"description": "Tag 'VIP' added", "triggeredByUserId": "...", "triggeredByUserName": "Sara Al-Harbi",
"triggeredOn": "2026-07-05T10:16:00Z", "jsonMetadata": "{\"tagId\":\"t1...\"}" }
]
Backend: WhatsAppTimelineService.GetTimelineAsync — reads events written as side effects by
WhatsAppInboxController's assign/transfer/close/reopen/archive/pin actions,
WhatsAppNoteController.AddNote, and WhatsAppTagController.AssignTag/RemoveTag. See
§16 Appendix for the full WhatsAppConversationEventType enum.
Calls Meta API: No.
Angular/Flutter: the conversation's "Activity"/"History" tab, rendered as a vertical timeline.
