Get a conversation
Returns metadata for a single conversation the caller can access, including its title, mode (standard or fast), originating channel, surface type, whether it is read-only, the associated agent (id, slug, display name, avatar), and a directory of participants referenced in the thread. Scoped to the caller’s own workspace and the conversations they participate in. Workspace admins may pass view=admin to read another member’s conversation, which is reflected in the returned viewing_as field. Returns 404 if the conversation is not found.
Authorizations
Personal Access Token. Send as Authorization: Bearer hq_pat_....
Path Parameters
Conversation id
Query Parameters
?view=admin opts into "see every conv in tenant", honored
only when the caller is workspace_users.is_admin = true.
Falls back silently to participant view otherwise so a
crafted URL from a non-admin doesn't leak the existence of
admin mode via a 403.
Free-text filter. Case-insensitive substring match over the conv title, the agent display name, and the latest-message preview (the three things a row shows). Empty/blank = no filter.
1-based page index. Clamped to >= 1.
Rows per page. Clamped to 1..=100; defaults to 25.
recent (default, newest activity first), oldest, or
title (A-Z, untitled convs sink to the end).
Which lane: fast lists only the no-VM "ask" threads; anything
else (default) lists the standard agent threads. The two lanes are
surfaced as separate tabs in Studio.
Optional channel filter. When set to a known channel kind (e.g.
email) the list returns ONLY threads of that kind - this backs the
admin Email > Threads tab. When unset, the default list EXCLUDES
email so external-correspondence threads don't bleed into the main
Home conversation list (they live under the Email section instead).
Unknown values yield an empty set rather than an error.
Response
Conversation metadata
Origin channel: web / slack / teams / schedule. Studio
renders schedule threads read-only (a record of a scheduled run,
not a live chat) and offers "start a fresh conversation" instead.
standard (sandbox agent thread) or fast (no-VM "ask" thread).
Studio shows a "Convert to agent" affordance on fast threads.
Directory of every user the thread references (message authors +
<@U…> mentions), keyed by UID -> { name, avatar_url }. The SPA renders
<@U…> mention chips from this. {} for single-party (web/DM) convs.
True when this conversation is read-only from web/extension: a multi-party Slack/Teams channel thread (owned by Slack/Teams). The SPA disables the composer + shows a "happening in the channel" hint. The API enforces this independently (prepare_turn refuses such turns).
Conversation surface: channel (multi-party Slack/Teams thread) /
dm / web / extension. Drives read_only.
"participant" (default) or "admin" when the caller
elevated via ?view=admin AND is workspace_users.is_admin.
The SPA renders an "Admin view" banner when this is admin
so the user knows they're looking at someone else's conv.
Display label for the conversation. User-set (Studio rename) or auto-derived (title.derive worker); NULL until one exists, in which case the SPA falls back to a message preview / "Untitled".