Fields & validation
Query filters, list/detail response fields, and conversation shape.
Query filters
| Field | Endpoints | Notes |
|---|---|---|
assistant_id | list, search, index, stats | Local assistants.id |
status | list, search, index | Enum values below. On search/index, literal all means no filter |
direction | list, search, index | inbound or outbound. On search/index, literal all means no filter |
start_date / end_date | list, search, index, stats | Applied with whereDate on start_time |
search | list, index (optional); search (required, min 3) | list/index: call_id + summary. search: + transcript |
per_page / page | list, search, index | Defaults 20 / 15 / 20 respectively; not clamped here |
Status & direction values
status column enum: initiated, ringing, in-progress, completed, failed, busy, no-answer, cancelled.
direction column enum: inbound, outbound.
List / search row fields
| Field | Source | End-user |
|---|---|---|
id | call_logs.id | yes |
call_id | call_logs.call_id | yes |
assistant_id | call_logs.assistant_id | yes (local PK) |
phone_number | call_logs.phone_number | yes — number used on this call |
caller_number | call_logs.caller_number | yes |
duration | call_logs.duration | yes (seconds) |
status / direction | enums | yes |
start_time / end_time | timestamps | yes |
summary | call_logs.summary | yes |
call_record_file_name | column | yes |
created_at | timestamps | index only (not /list or /search) |
assistant_name / assistant_phone | JOIN assistants | yes |
has_recording, public_audio_url, public_audio_player_url | model appends | yes |
cost / currency | columns | content admins only |
Detail-only fields
transcript— full stored transcript text.user_id,reseller_id,workspace_id,updated_at— present on the modeltoArray()for detail.metadata,webhook_data, nestedassistant(withvapi_assistant_id) — content admins only.- Sibling
conversation— structured messages; see the show endpoint notes.
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 do not match any rows simply yield an empty page rather than 422.