Search every conversation and call in one list
The Interactions page answers one question — “Search every conversation and call across messaging and voice in one recency-ordered, exportable list.” Before this page, reconstructing a customer’s full history meant paging Conversations for messaging and Call logs for voice separately and merging the two timelines by hand. Interactions merges both into a single list you can filter, page through, and export. Use Interactions when you need the whole picture:- Customer support — pull up every touchpoint for a contact by name, phone, or email, regardless of channel.
- Incident review — isolate one interaction type (conversations only or calls only), one channel, or a status window.
- Regulatory or QA sampling — export a filtered slice to CSV and hand it to an auditor.
Permissions
Search and export have deliberately different gates:- Search — owner, admin, developer, and viewer can all run the search. It reads the same rows the conversations list and call log expose to those roles individually, so it inherits the same read posture as global search.
- CSV export — gated to owner, admin, and developer roles holding the
contacts:readpermission scope. A bulk, org-wide pull of contact-linked history has a larger blast radius than a single-page view, so the lift is tighter. A viewer who selects Export CSV receives a friendly toast explaining the 403 rather than a raw error page — ask an owner or admin to run the export or request the role change.
Filters and query syntax
All filters combine with AND semantics. The dashboard exposes them as chips and a search box; the API accepts the same parameters as query strings onGET /interactions.
Unknown channel or type values are ignored rather than rejected, matching the tolerant posture of the inbox filters — a stale chip never fails the whole query.
Example API call:
Recency ordering and pagination
Rows are ordered bylast_activity_at descending — the most recent customer touch first, mixed across channels and interaction types. A conversation row’s timestamp is its latest message; a call row’s timestamp is the call start.
Pagination is cursor-based, the same shape as every other Orbit list:
limitdefaults to 25, maximum 100.- The response carries
meta.pagination.cursorandmeta.pagination.has_more. Pass the cursor back as?cursor=to fetch the next page; stop whenhas_moreisfalse. - The dashboard’s Load more button walks the same cursor chain.
CSV export
Select Export CSV in the page header to download the currently filtered result set. The export applies the same filters you see on screen, so narrow first, then export.- Columns, in order:
id,type,channel,status,contact_id,contact_name,contact_phone,contact_email,direction,preview,last_activity_at. - Filename:
<stem>-YYYY-MM-DD.csv,attachmentdisposition,Cache-Control: no-store. The API accepts an optionalfilenamestem (sanitised to[A-Za-z0-9._-], capped at 80 characters, defaultinteractions). - Row ceiling: 20,000 rows per export. If the result set is larger, the CSV is truncated at the cap and the response carries an
X-Export-Truncated: trueheader — narrow the date range or channel filter and re-export. - Rate limit: 5 exports per minute, matching the ad-hoc audience export ceiling.
- Audit: every export writes an audit entry with the row count, whether the result was truncated, and the applied cap.
PII redaction applies to both doors
If your organisation has opted into transcript PII redaction under Settings → Privacy, masked values (contact_name, contact_phone, contact_email, preview) are masked identically on the on-screen list and inside the CSV. Redacting only the export would be no protection — a viewer could read the same columns on the search page. One redaction gate covers both surfaces.
Troubleshooting
- Empty results — Loosen one filter at a time. A status value from one arm (a conversation status against calls, or vice versa) matches zero rows on the other; dropping the status chip is the fastest check. Also confirm the date range presets — a 24h window on a quiet workspace returns nothing.
- 403 on export — You hold a viewer role or lack the
contacts:readscope. Search is unaffected. Request an owner/admin/developer run the export or grant the scope. - A channel is missing from the list — The channel vocabulary matches the inbox filter list. Voice rows only appear when the
voicechannel is included (or no channel filter is set); filtering to only messaging channels strips calls and vice versa viatypes. - CSV has fewer rows than the list shows — The 20,000-row ceiling. Narrow the filters; the
X-Export-Truncatedheader confirms truncation.
See also
- Conversation archive — natural-language search plus the per-conversation bulk export
- Export conversations as signed vCon containers — the per-thread, tamper-evident counterpart to this bulk CSV
- Search message history — fielded single-message lookups by provider reference
- Inbox setup — the operator surface the channel filters mirror