Skip to main content

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 by operationId. 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 previewslistInboxThreads 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 mailboxeslistCommunicationChannels 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:
To also block calls to the same number, send a second request with "medium": "VOICE". Full variable schemas, response shapes, and worked examples for every operation are available from the discovery endpoint.