Use the Customer-360 workspace (and fetch the snapshot)
Reconstructing one customer’s picture used to mean paging the Conversations list, Call logs, the Knowledge base, and whatever CRM you run on separate tabs. The Customer-360 workspace collapses all of those sources into one three-column screen per contact, and it is backed by a single API endpoint you can also call from your own tools. Open the workspace from Contacts → Audience → Contacts, pick a contact, and visit the/360 view of its detail page (for example /<locale>/audience/contacts/<id>/360). The inbox contact drawer shows the same snapshot as an inline panel, so you can jump straight from a conversation to the full view.
Check these prerequisites before you read empty sections as bugs:
- Knowledge base populated — the knowledge card shows your most recently updated ready documents. With an empty knowledge base it correctly shows No knowledge articles found.
- CRM connected — Salesforce, HubSpot, or Zendesk must be linked under Integrations → Connected apps (via Nango). Until one is linked, the CRM card shows a connect a CRM hint and every
crm.*field in the snapshot returnsnull. - Some activity — a contact with no conversations yet sees the journey-replay tab plus a friendly empty state, while the right rail still shows calls, journeys, surveys, and notes that do exist.
- Role — the workspace and the snapshot endpoint are available to the
owner,admin,developer, andviewerroles. Viewers see the screen with phone and email masked by default.
The three-column layout
The page splits into a left identity rail (~25%), a center conversation area (~50%), and a right context rail (~25%). Left — identity and stats. The identity card (avatar, name, phone, email, country), the lifecycle stage, per-channel consent and frequency-cap status, a channel-send launcher for SMS, WhatsApp, RCS, email, voice, push, fax, video, journey enrollment, and ticket creation, plus voice-biometrics enrollment and a link to the full profile. Below that, a compact stats block: 24-hour and 7-day message volumes with channel mix, and counts of conversations, calls, open tickets, active journeys, and goal conversions. Contact notes live at the bottom of the right rail, next to this identity context. Center — conversation tabs. One tab per recent conversation, with channel icon, latest-message preview, status badge, an Active marker when the thread is open with a message in the last 24 hours, and an Open in inbox link for the full thread. A static Journey replay tab always sits first, rendering the unified contact timeline even while a conversation is live. Right — context rail. Communication-preferences chips, the recommended-channel card, next-best-action suggestions, AI suggested replies and suggested actions (call, send template, escalate, schedule follow-up) that launch the matching compose surface, recent calls with missed indicators, top-3 knowledge articles, CRM sections (Salesforce opportunities/cases, HubSpot deals, Zendesk tickets), native inbox tickets, goal conversions, active journey enrollments, answered survey responses, and the notes thread.One request, one response
The workspace renders from a single GET:[] or null) instead of failing the request. The response always carries the full envelope shape, so your UI (and ours) can render partial results with an empty section rather than an error page.
A second request for the same contact within 30 seconds is served from a per-tenant cache. Agents can refresh the workspace on every keystroke without putting a load spike on your CRM upstream — the cached shape is built once and re-masked per caller on each read.
Roles owner, admin, developer, and viewer may call it. On workspaces that opt into PII redaction, viewer callers get phone and email (including numbers nested in call rows) masked by default; privileged roles can pass ?reveal=true to unmask, and each reveal is written to the audit log.
Read the envelope
Top-level fields, all always present — an empty section is an empty array or a null, never a missing key:
Recordings are never exposed as raw storage URIs — a
has_recording: true flag tells you to exchange for a signed playback URL through GET /api/v1/calls/{id}/recording.
Partial rendering is by design
When a tile shows an empty state, separate two cases:- The source is genuinely empty. No conversations, no calls, no tickets — the field returns its empty sentinel and the section renders its No … placeholder. This is the normal case.
- The source degraded. A CRM timeout or a slow query collapses that one field to its sentinel while everything else still renders. The endpoint reports the degraded outcome on its metrics, so a recurring empty CRM or knowledge section across many contacts is worth treating as a source-health signal, not a UI bug.
crm.salesforce as a failed request, and keep rendering the sections that did return data.
Build your own 360 view
For an internal ops surface, poll the snapshot on a 30-second-or-longer cadence. Cache hits are answered by the API’s own cache, so a slower poll only ever burns one origin fetch per window per contact. Cache the response per contact id on your side if you embed it in a list view, and pass the reveal flag only from privileged operator contexts — reveal requests are audit-logged.Act on it
The workspace is a launchpad, not a dead end:- Send — the left-rail channel menu deep-links into the SMS, WhatsApp, RCS, email, fax, or push compose surface with the contact pre-filled; video opens a video-room link, and journey enrollment or ticket creation open their matching flows.
- Call — the Call contact suggested action and the voice option in the send menu both launch the softphone with the number pre-dialed.
- Enroll in voice biometrics — the left rail carries an enrollment action, disabled with an explanation when the contact has no phone.
- Open the thread — every conversation tab links into the inbox for the full message history and the richer reply coach.
See also
- Contact timeline — the per-contact event feed that powers the journey-replay tab.
- Connected apps — link Salesforce, HubSpot, or Zendesk so CRM sections populate.
- Knowledge base lifecycle — populate the documents the knowledge card surfaces.
- Events API — the event stream factored into the contact’s journey.