Skip to main content
When a client asks “what happened to my leads?”, the answer is on this page. Every call the platform places or answers writes a call record: the timestamp, the agent, the outcome, the recording, the transcript and the cost. Nothing is inferred and nothing is summarised away. You can pull the record for any lead and show it.

What one record holds

GET /api/call-history returns one row per call. The row is the same shape the dashboard’s Call History page reads.

The full record

The two detail endpoints return everything above plus the conversation itself:
  • transcript: the full text of the call. An empty string means nobody spoke. null means no transcript could be sourced.
  • segments: the same conversation cut into turns, each marked agent or lead with the seconds it starts and ends at, so you can follow the text against the recording. null when timings were not available.
  • fields: the AI-generated fields the agent recorded on this call, as key and value pairs. An empty array means the agent captured none. null means they could not be sourced.
  • transcriptSource: where the transcript came from. stored is our own record. live means it was fetched from the voice platform for this request. unavailable means neither had it, and transcript and fields are both null.
A transcript with fields: null is a valid partial answer: we held the text, and the voice platform could not be reached for the rest.

Finding the calls you want

Every filter on GET /api/call-history is a query parameter. Combine as many as you need. Sort with sort as field.direction, for example dateTime.desc or duration.asc. Page with page and limit. The response carries pagination with page, limit, total and totalPages. The filters are the query parameters on GET /api/call-history; project ids come from GET /api/v2/projects. For one contact’s history, GET /api/contacts/{phoneNumber} with idType=phone, the locationId and include=calls returns their calls with an outcome summary. See Contacts. Use Transcript search for words and phrases across saved calls. It returns short evidence excerpts without fetching every detail.

Test calls in the record

A call to a contact you have marked with Mark as internal still appears here. The mark removes it from the performance figures on the dashboard and in Analytics, not from the record, and its cost still counts. See Test your agent.

Boundaries

  • Two ids, one lookup. id goes to GET /api/call-history/{callId} as is; callId goes to the same path with idType=call. idType is auto by default and accepts either; send record or call to insist on one.
  • cost is viewer-safe: an agency sees the agency price, a project user sees the project price, and a rep sees no cost.
  • Records answer with id and agentType. No other spelling of either field is part of the response.
  • The list does not carry the transcript. Fetch the detail for that.

In the API

  • List calls; its query parameters are the filters, and project ids come from List projects
  • Get call by record id, or by the voice platform’s callId with idType=call
  • Get contact with include=calls for one person’s calls
  • Every field above is defined in the Glossary