Logo
Search
Docs

Fields & validation

Query filters, list/detail response fields, and conversation shape.

Query filters

FieldEndpointsNotes
squad_idlist, search, index, statsLocal squads.id filter only — never returned on list/detail rows
assistant_idlist, search, index, statsMember assistant local PK
status / directionlist, search, indexLiteral all means no filter on every list endpoint
start_date / end_datelist, search, index, statswhereDate on start_time
searchlist, index (optional); search (required, min 3)list/index: call_id + summary. search: + transcript
per_page / pagelist, search, indexDefaults 20 / 15 / 20; not clamped

Status & direction values

status: initiated, ringing, in-progress, completed, failed, busy, no-answer, cancelled.

direction: inbound, outbound.

List / search row fields

FieldSourceNotes
id, call_idcolumns
assistant_idcolumnNullable member assistant
squad_idcolumnStripped from every list/detail response
squad_name, squad_external_idJOIN squadsPublic squad identity
assistant_name, assistant_phoneJOIN assistants
reseller_id, nested resellercolumn + eager loadSelected so audio URL appends resolve the tenant domain
created_attimestampsOn list/index; omitted from search select
has_recording, audio URL appendsmodel appends
cost / currencycolumnsContent admins only

Detail-only fields

  • transcript, user_id, workspace_id, updated_at.
  • metadata, webhook_data, nested assistant (with vapi_assistant_id), nested squad — content admins only.
  • Sibling conversation — same parser as assistant Call History.

No FormRequest rules

These endpoints do not use Laravel validation rule strings except the hard-coded search length check that returns 400. Invalid filter values that match no rows yield an empty page rather than 422.