Skip to main content
GET
cURL
Batch access to AI voice agent call records for a single practice, for pulling into your own analytics. Returns JSON by default, or a CSV batch download with format=csv.
Archived calls are included. Archiving is an internal Oliver UI concept and does not remove rows from a partner pull.

Filtering

Dates are YYYY-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_typeexisting if the matched client (or one of their patients) had a visit before this call, new if the caller matched a client with no prior visit, unknown if 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 as scheduling, 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

Add format=csv (or send Accept: text/csv) to get the same rows as a CSV attachment:
Columns are:
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.
CSV pages are larger than JSON pages — per_page defaults to 1000 and allows up to 5000. The paging metadata comes back in response headers (X-Total-Count, X-Page, X-Per-Page, X-Total-Pages) so you can page through a wide date range without guessing how many pages there are. page is zero-based in both formats.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

X-Client-Id
string
required

The location id of the practice

Query Parameters

start_date
string<date>

Only return calls created on or after this date, inclusive. Interpreted as a whole day in the practice timezone.

Example:

"2026-04-01"

end_date
string<date>

Only return calls created on or before this date, inclusive. Interpreted as a whole day in the practice timezone.

Example:

"2026-04-30"

direction
enum<string>

Filter by call direction.

Available options:
inbound,
outbound
state
enum<string>

Filter by the call's lifecycle state.

Available options:
pending,
queued,
ringing,
in_progress,
completed,
failed,
no_answer,
busy,
voicemail,
canceled
outcome
enum<string>[]

Filter by call outcome. Repeat the parameter (outcome[]=a&outcome[]=b) to match any of several outcomes.

Available options:
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
call_classification
enum<string>

Filter by the AI's classification of why the caller called.

Available options:
scheduling,
prescription_refill,
medical_question,
billing,
records_request,
emergency,
callback,
general_inquiry,
price_shopping,
other
booking_intent
boolean

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.

client_id
string

Only return calls matched to this Oliver client.

page
integer
default:0

Page number (0-based)

per_page
integer
default:50

Number of results per page. JSON: default 50, max 100. CSV: default 1000, max 5000.

format
enum<string>

Set to 'csv' to download the same rows as a CSV attachment instead of JSON. Sending 'Accept: text/csv' has the same effect.

Available options:
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.

success
boolean
required
data
object
required
message
string