About
Read the key owner’s inbox, full text and email threads, call recordings and meeting transcripts; mark inbox rows read, star or handle text threads; suppress channels for your organization; and render content templates (spintax + merge tokens). Outbound sending — SMS and email — happens in the app, not through the API. Sending requires a per-contact consent attestation that only a person in the app can make, so there is no send operation in the catalog. All operations go through the developer API gateway — one endpoint, called byoperationId. If you haven’t set up a key yet, start with the
Developer API Overview.
Operations
Reading channels and conversations (READ scope)
Inbox rows are previews
listInboxThreads returns one preview row per conversation. Follow a MESSAGE
row’s id with getTextThreadMessages, an EMAIL row’s emailThreadId with
getEmailThread, and a CALL row’s id (or a groupedCallIds member) with
getCallRecording. An empty or null detail result deliberately does not reveal
whether an inaccessible resource exists.listInboxThreads with channel: NEEDS_RESPONSE returns conversations where
the contact spoke last, excluding text threads a teammate has since marked
handled. A new inbound text makes a handled thread need a response again.
optedOut defaults to INCLUDE, retaining opted-out text threads for
integrations. Use EXCLUDE to hide threads suppressed by an opt-out or
Do Not Contact state as the app does, or ONLY to read just those threads.
starredOnly: true returns starred text threads. MESSAGE rows carry
isStarred and isNeedsReplyHandled; inbox and text-detail line ids are
named phoneLineId.
replySentiments: [POSITIVE] includes threads that had a positive reply and
have not opted out since. respondedOnly and replySentiments exclude calls;
sentBy applies to calls, but WORKFLOW matches no calls because calls carry
no campaign linkage. Without userIds, this is the key owner’s inbox.
Reading a teammate’s inbox requires VIEW_ALL_PHONES.
Page the whole meeting before concludingA full page from
getMeetingTranscript (as many utterances as you asked for)
means more remain — request again with offset advanced by the count you
received, until a short page arrives. Action items cluster near the end of
a meeting, so an unpaged first window is exactly the wrong place to stop.The meeting notetaker is feature-flag gated per organization. Where the flag is
off, this operation is refused — and no summary notes exist to point it at.Inbox triage (WRITE scope)
Dismissing inbox items (ADMIN scope)
Use
markInboxThreadsRead to clear an unread badge. Confirm before
dismissing: the row disappears from future listInboxThreads results.
Suppressions (WRITE scope)
Organization guardAn optional
contactId you pass to renderContentTemplate is org-guarded —
a contact belonging to another organization returns 403 forbidden.
suppressChannel takes no contact id: the suppression is written to the
calling key’s own organization.Phone lines and mailboxes
listCommunicationChannels returns the organization’s phone lines (with the
assigned user and canSendSms) and the key owner’s connected mailboxes.
Buying a number or connecting a mailbox happens in the app — see
getIntegrationSetupUrls on the Account API for
the settings links to hand a user.Creating and editing templatesThis API only renders content templates. Creating, updating, and deleting
templates lives in the
Content Templates / Workflows API.
Example
Opt a phone number out of SMS for your whole organization. Suppression is keyed on the normalized value, so it covers every contact carrying that number:"medium": "VOICE".
Full variable schemas, response shapes, and worked examples for every
operation are available from the
discovery endpoint.