Skip to main content
These read-only endpoints return what your workspace has said and heard: calls (with transcripts, tags and audio recordings), texts, emails, and the people on the other end. Reads are free, never billed. The same reads are available to agents as MCP tools: list_calls, get_call, get_call_recording, list_messages, list_emails, list_contacts and get_contact (see MCP server).

Recent activity

Leave out the person to get the whole account, newest first:
Both take the same filters:
Each text carries a direction and a sender: Texts on the shared LumisReach lines that Quick Agent Actions send from are included, so replies to a Quick Text show up as inbound too.

Everyone you’ve been in touch with

contact_id is null for someone you reached who has no contact record yet.

A contact’s full record

The contact id also arrives on every inbound SMS webhook as data.contact.id. crm is set when the contact is synced with a CRM, and holds the provider and its record id.

Your history with one person

Pass one of contact_id or their address: phone_number (E.164) for calls and texts, email for email. Email always needs one.
Emails carry a source of inbox or quick (sent with Quick Email).

Call details: transcripts, tags and recordings

Each call from GET /v1/calls (or one call from GET /v1/calls/{id}) carries:

Tags

Tags come from the AI’s review after the call ends, so a call that just finished may have none for a few seconds.

Download the recording

recording_url needs the same API key as every other request:
The response is the raw audio (usually audio/mpeg), never cached. It returns 404 when the call has no recording, when recording was turned off for it by your compliance settings, or when the call is not in your workspace. Every download is written to your compliance audit log, attributed to the API key’s owner.

Pagination

Results come newest first. Pass meta.cursor from one response as cursor on the next request; there are no more pages when meta.cursor is absent. limit defaults to 20 and caps at 100 (50 for calls, since each one carries a full transcript).

Keeping up to date

To sync, poll GET /v1/calls or GET /v1/messages with created_after set to the newest created_at you have seen. To hear about new activity the moment it happens instead, register an inbound SMS webhook (or open the text stream) and a call webhook, which sends each call’s full transcript as soon as it ends.