Overview
What Call History covers, how list vs search differ, the response envelope, and role-based field visibility.
What this reference explains
Call History is the read-only surface for assistant call logs: when a call happened, who participated, how long it lasted, a short summary, optional recording links, and (on the detail endpoint) the full transcript plus a structured conversation derived from that transcript.
This reference shows how the call-logs system works under the hood: every Call History dashboard action goes through these endpoints, with exact query parameters, response keys, storage columns, and error responses.
List vs search
GET /call-logs/listis the dashboard's default list: lightweight columns, optional filters, substring match oncall_idandsummaryonly.GET /call-logs/searchis used once the typed query is at least three characters: it also matchestranscriptand ranks by relevance (call id, then summary, then transcript).GET /call-logs(index) is a slightly older list variant that still returnscreated_atand treats status/direction"all"as "no filter". The current dashboard prefers/list.
Identifiers
The detail path uses the public call_id string (unique on call_logs), not the numeric primary key. List rows still expose both id (numeric PK) and call_id. assistant_id on every row is the local assistants table primary key.
Role-based field visibility
Callers who are not content admins never receive cost, currency, metadata, or webhook_data. On the detail endpoint they also do not receive the nested assistant object (which would otherwise include vapi_assistant_id and the brand-neutral assistant_id alias from the Assistants module). They still get joined assistant_name and assistant_phone.
Content admins receive cost fields on list/search/stats/detail, and on detail they also receive metadata, webhook_data, and the full nested assistant (including vapi_assistant_id). Raw upstream dump objects are omitted from the examples on this page — only the wire key names and the visibility rule are part of the documented contract.
Response envelope
List, search, index, and stats use the panel shape {"success": true, "data": ...}. Paginated endpoints add a sibling meta object (current_page, last_page, per_page, total, from, to) — not a pagination key. The detail endpoint returns success, data, and a sibling conversation object (not nested under data).
Feature availability
This module is gated by the call_logs feature. When disabled, every endpoint under /call-logs returns 403 with {"message":"This feature is not enabled for your account. Please contact your administrator.","feature":"call_logs"}.
Out of scope here
Squad call history (/api/squad-call-logs), admin/super-admin call-log routes, and write/delete of call logs are not part of this module. Call rows are created by inbound webhook processing, not by these endpoints.