Skip to main content
These read-only endpoints return everything your workspace knows about each person and has said to them: their contact details, calls (with transcripts, tags and audio recordings), texts and emails. Reads are free, never billed. The same reads are available to agents as MCP tools: list_contacted_people, get_contact, get_call_transcripts, get_text_history and get_email_history (see MCP server).

1. Find the person

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

2. Get their details

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.

3. Read the conversation

Name the person with exactly one of contact_id or their address: phone_number (E.164) for calls and texts, email for emails.
Each text carries a sender: Emails carry a source of inbox or quick (sent with Quick Email).

4. Calls: transcripts, tags and recordings

Each call from GET /v1/history/calls (or one call from GET /v1/history/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

Rather than polling /v1/history/texts, register an inbound SMS webhook to be told the moment someone texts you, then fetch the thread when you need context. Likewise, a call webhook sends you each call’s full transcript as soon as the call ends, so you never need to poll /v1/history/calls for new calls.