List Phone Calls
List AI voice agent call records for a practice. Returns JSON by default; pass format=csv for a CSV batch download with the same rows.
format=csv.
Filtering
Dates areYYYY-MM-DD and inclusive on both ends — start_date=2026-04-01&end_date=2026-04-30
returns the whole month. Any other date format returns a 400.
Unknown values for direction, state, or call_classification return a 400 rather than
silently matching nothing. Pass outcome more than once (outcome[]=appointment_booked&outcome[]=task_created)
to match any of several outcomes.
Field definitions
caller_type—existingif the matched client (or one of their patients) had a visit before this call,newif the caller matched a client with no prior visit,unknownif the call was never matched to a client.booked— the call ended in a scheduling outcome (appointment_booked,appointment_rescheduled,appointment_confirmed).booking_intent— the caller wanted to book or change an appointment. True when any of: the call was classified asscheduling, the outcome was a scheduling outcome, or the AI invoked a scheduling tool (book, reschedule, cancel, or confirm an appointment) during the call. The last two conditions catch calls the classifier filed under a different intent. It is derived at read time, so it is populated for historical calls too.summary— the AI’s one-line summary of the call.remote_client_id/remote_patient_id— the client’s and patient’s ids in your practice management system, qualified with the practice’s server id when it has one. These are the same values returned by the appointments endpoints, so records line up across both.
CSV download
Addformat=csv (or send Accept: text/csv) to get the same rows as a CSV attachment:
Date is rendered in the practice timezone as YYYY-MM-DD HH:MM, Duration as m:ss, and the
yes/no columns as Yes/No.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
The location id of the practice
Query Parameters
Only return calls created on or after this date, inclusive. Interpreted as a whole day in the practice timezone.
"2026-04-01"
Only return calls created on or before this date, inclusive. Interpreted as a whole day in the practice timezone.
"2026-04-30"
Filter by call direction.
inbound, outbound Filter by the call's lifecycle state.
pending, queued, ringing, in_progress, completed, failed, no_answer, busy, voicemail, canceled Filter by call outcome. Repeat the parameter (outcome[]=a&outcome[]=b) to match any of several outcomes.
appointment_booked, appointment_rescheduled, appointment_confirmed, appointment_canceled, callback_requested, declined, do_not_call, no_answer, voicemail, forwarded, transferred, quick_abandoned, abandoned, abandoned_after_transfer, dropped, transfer_completed, transfer_no_human, transfer_caller_abandoned, task_created, resolved Filter by the AI's classification of why the caller called.
scheduling, prescription_refill, medical_question, billing, records_request, emergency, callback, general_inquiry, price_shopping, other Filter to calls where the caller did (true) or did not (false) want to book or change an appointment. See the endpoint page for how this is derived.
Only return calls matched to this Oliver client.
Page number (0-based)
Number of results per page. JSON: default 50, max 100. CSV: default 1000, max 5000.
Set to 'csv' to download the same rows as a CSV attachment instead of JSON. Sending 'Accept: text/csv' has the same effect.
csv Response
Phone calls response. Returns JSON by default, or a CSV attachment when format=csv. The CSV response also carries X-Total-Count, X-Page (0-based), X-Per-Page and X-Total-Pages headers so a wide date range can be paged through without guessing.

