Skip to main content

Read and export the unified contact timeline

Every time a customer texts, calls, joins a video room, triggers a campaign step, or talks to an AI agent, the contact record collects a touchpoint. Before the Timeline tab, reconstructing one customer’s history meant paging Conversations, Call logs, and campaign logs separately and merging them by hand. The contact-detail Timeline tab merges all of those sources into a single reverse-chronological feed you can filter with chips, page through, and export. Use the timeline when you need the whole picture for one contact:
  • Customer support — answer “what has this person touched so far” without switching screens.
  • Compliance review — AI decisions and tool calls appear alongside the operational activity, which satisfies record-keeping requirements across the pillars in one per-person view.
  • Handoff to an auditor — export the filtered slice to CSV, or run the full GDPR data-export flow when a data subject exercises access rights.
Open it from the dashboard sidebar under Contacts → Audience → Contacts, pick a contact, and switch to the Timeline tab of the contact-detail page.

The ten event buckets

The top of the tab renders ten channel buckets as filter chips. Each chip maps to one underlying source, so enabling a bucket narrows the feed to the touchpoints that belong to it: Enabling a chip narrows the feed to that bucket only. Leaving all chips unselected is the open default and returns every bucket. Unknown chip values are ignored, not rejected, so a stale chip from a previous rollout never fails the query.

How chips map to API filters

The dashboard chips translate directly onto query parameters on GET /api/v1/contacts/{id}/timeline. Each filter axis is additive — AND semantics across axes, OR semantics within one axis.
For the deep journey-timeline variant (GET /api/v1/contacts/{id}/journey), the same channel/type/direction axes widen to richer event types — message, call, agent_chat, agent_handoff, consent, note, sdk_event, lifecycle_change, campaign_enrolled, campaign_completed, survey_response — plus date bounds (after, before) and a cursor page size of up to 100 rows.

CSV export

The Export CSV button on the timeline downloads the same filtered view as a file. The export runs through GET /api/v1/contacts/{id}/journey.csv and is capped at 5,000 rows — enough for an ad-hoc review, bounded so a browser can’t accidentally pull a multi-million-row history. Use CSV when:
  • The export is one bounded slice of the contact’s history — the same filters you applied on screen, packaged for a spreadsheet.
  • A colleague or auditor needs the record and you already know which chips to narrow.
Use the GDPR data-export flow when:
  • A data subject requests a complete access export. GDPR export traverses the full journey history, not just the 5,000-row view.
  • You need a complete, legally-compliant handover rather than a working slice.
The 5,000-row ceiling is the CSV guardrail; GDPR export is the complete-export path. Pick CSV for the day-to-day review, GDPR for the subject-access response.

Walk the dashboard

  1. Open Contacts → Audience → Contacts and pick a contact.
  2. Switch the detail pane to the Timeline tab.
  3. Click a chip to narrow the feed; click it again to widen back. Chips combine with AND semantics across axes (channel AND direction), OR semantics within one axis.
  4. Set the From / To date range if the feed is too long.
  5. Select Export CSV to download the filtered view, or Clear (N) to reset all filters at once.

Troubleshooting an empty timeline

Work top-down — each check eliminates one class of empty feed:
  1. Stale chip — a channel bucket left selected from a previous session filters everything out. Hit Clear (N) to remove all filters and re-test.
  2. Date range covers nothing — a narrow From / To range or an accidental one-day window hides older touchpoints. Widen the range or remove it.
  3. Bucket source is genuinely empty — if the contact has no video or agent sessions, that chip returns zero rows even though other buckets have data.
  4. Permission scope too narrow — the timeline respects the caller’s role. Viewer and supervisor roles get PII-masked summaries; confirm your role can read the contact row at all.
  5. Wrong contact picked — the feed is per contact id. Verify the detail pane shows the same contact you searched for.
If none of these checks resolve the empty feed, the contact may simply have no recorded activity yet.

See also