Calls
Every conversation the platform has had, and what came out of it.
A call is one conversation. It carries its status while it is happening and its transcript, recording and analysis once it is over.
Analysis is not immediate. A call ends, then it is analysed, so analysis is absent until it has run; analysis.analyzedAt says when it did. A call that ended thirty seconds ago will usually not have it yet.
Recording audio is streamed through the API itself, from audioUrl on the recording.
List calls#
Every call the key can reach in its organization, across campaigns, newest first. `summary` counts the whole filtered set.
/api/v1/callsQuery parameters
pagenumber- Page number.
- Default
1 pageSizenumber- Calls per page, up to 100.
- Default
50 statusstring- queued, in-progress, completed, failed, cancelled, unjoined, or any exact call status.
dateFromstring- ISO date, inclusive.
dateTostring- ISO date, inclusive.
minDurationnumber- Seconds, inclusive.
maxDurationnumber- Seconds, inclusive.
searchstring- Match a callee name or a phone number.
campaignIdstring- Only calls from this campaign.
directionstring- outbound or inbound.
Responses
A page of calls.
curl -X GET "https://voice.evryhealth.com/api/v1/calls" \-H "Authorization: Bearer YOUR_API_KEY"
{"calls": [{"id": "5bbdd475-38f6-4211-9361-de482d105b81","campaignId": "357b188c-c618-4f95-84b1-cbe26b8ce3e0","campaignName": "Q1 Provider Outreach","phoneNumber": "+14155551234","calleeName": "Dr. John Smith","direction": "outbound","status": "completed","createdAt": "2026-01-20T10:30:00.000Z","initiatedAt": "2026-01-20T10:30:02.000Z","connectedAt": "2026-01-20T10:30:09.000Z","endedAt": "2026-01-20T10:34:05.000Z","duration": 236,"endReason": "hangup","analysis": {"analyzedAt": "2026-01-20T10:35:12.000Z","sentiment": {"overallSentiment": "positive","confidence": 0.86,"summary": "Friendly and cooperative."},"humanContact": {"reachedHuman": true,"confidence": 0.97,"reachedVoicemail": false},"objectives": {"confirm": {"status": "achieved","confidence": 0.9,"reasoning": "Confirmed renewal."}}}}],"pagination": {"page": 1,"pageSize": 50,"total": 150,"totalPages": 3},"summary": {"total": 150,"completed": 120,"failed": 10,"active": 5,"queued": 15}}
List campaign calls#
The calls belonging to one campaign, newest first. `summary` counts every call on the campaign, ignoring filters.
/api/v1/campaigns/{id}/callsPath parameters
idstringrequired- Campaign id.
Query parameters
pagenumber- Page number.
- Default
1 pageSizenumber- Calls per page, up to 100.
- Default
50 statusstring- queued, in-progress, completed, failed, cancelled, unjoined, or any exact call status.
dateFromstring- ISO date, inclusive.
dateTostring- ISO date, inclusive.
minDurationnumber- Seconds, inclusive.
maxDurationnumber- Seconds, inclusive.
searchstring- Match a callee name or a phone number.
runIdstring- Only calls placed under this run.
Responses
A page of the campaign's calls.
curl -X GET "https://voice.evryhealth.com/api/v1/campaigns/{id}/calls" \-H "Authorization: Bearer YOUR_API_KEY"
{"calls": [{"id": "5bbdd475-38f6-4211-9361-de482d105b81","campaignId": "357b188c-c618-4f95-84b1-cbe26b8ce3e0","campaignName": "Q1 Provider Outreach","phoneNumber": "+14155551234","calleeName": "Dr. John Smith","direction": "outbound","status": "completed","createdAt": "2026-01-20T10:30:00.000Z","initiatedAt": "2026-01-20T10:30:02.000Z","connectedAt": "2026-01-20T10:30:09.000Z","endedAt": "2026-01-20T10:34:05.000Z","duration": 236,"endReason": "hangup"}],"pagination": {"page": 1,"pageSize": 50,"total": 500,"totalPages": 10},"summary": {"total": 500,"completed": 420,"failed": 30,"active": 5,"queued": 45}}
Queue calls#
Calls contacts already on the campaign, under its current run (opening one if none is running), through the same queue the product uses: the campaign's schedule decides when they are released. Name contacts with `contactIds`, or set `queueAllPending` to call every contact whose status is in `filter.callStatus` (default `not_called` and `failed`). Contacts already `queued` are never queued again. Contacts sharing a number are dialled once. Not for inbound campaigns.
/api/v1/campaigns/{id}/callsPath parameters
idstringrequired- Campaign id.
Body
application/jsoncontactIds- string[] (or queueAllPending)
queueAllPending- boolean
filter- { callStatus?: (not_called | called | reached | failed)[], maxAttempts?: number }
options- { maxCalls?: number, priority?: 1-10 (1 dials first), scheduledFor?: ISO date-time in the future }
Responses
Queued. `skippedCount` counts contact ids not on the campaign and contacts with no number. `scheduledFor` is set when a call is held for later.
curl -X POST "https://voice.evryhealth.com/api/v1/campaigns/{id}/calls" \-H "Authorization: Bearer YOUR_API_KEY" \-H "Content-Type: application/json" \-d '{"queueAllPending": true,"filter": {"callStatus": ["not_called","failed"],"maxAttempts": 3},"options": {"maxCalls": 100,"priority": 1}}'
{"message": "1 calls queued successfully","queuedCount": 1,"skippedCount": 0,"campaignRunId": "9f8e7d6c-5b4a-4321-8fed-cba987654321","calls": [{"callId": "5bbdd475-38f6-4211-9361-de482d105b81","contactId": "e3c9a1b7-2d4f-4a6e-8b0c-1f2e3d4c5b6a","phoneNumber": "4155551234","status": "queued"}]}
Get a call#
One call in full, with `summary` when one has been produced and `analysis` once the call has been analysed.
/api/v1/calls/{callId}Path parameters
callIdstringrequired- Call id.
Responses
The call.
curl -X GET "https://voice.evryhealth.com/api/v1/calls/{callId}" \-H "Authorization: Bearer YOUR_API_KEY"
{"id": "5bbdd475-38f6-4211-9361-de482d105b81","campaignId": "357b188c-c618-4f95-84b1-cbe26b8ce3e0","campaignName": "Q1 Provider Outreach","phoneNumber": "+14155551234","calleeName": "Dr. John Smith","direction": "outbound","status": "completed","createdAt": "2026-01-20T10:30:00.000Z","initiatedAt": "2026-01-20T10:30:02.000Z","connectedAt": "2026-01-20T10:30:09.000Z","endedAt": "2026-01-20T10:34:05.000Z","duration": 236,"endReason": "hangup","summary": "The member confirmed they will renew before March.","analysis": {"analyzedAt": "2026-01-20T10:35:12.000Z","sentiment": {"overallSentiment": "positive","confidence": 0.86,"summary": "Friendly and cooperative."},"humanContact": {"reachedHuman": true,"confidence": 0.97,"reachedVoicemail": false},"objectives": {"confirm": {"status": "achieved","confidence": 0.9,"reasoning": "Confirmed renewal."}}}}
Get a call transcript#
The conversation as messages in order. `role` is `agent`, `user` or `unknown`; `medium` is `voice` or `text`. A call that never connected has no messages.
/api/v1/calls/{callId}/transcriptPath parameters
callIdstringrequired- Call id.
Responses
The transcript. `duration` is the call's length in seconds.
curl -X GET "https://voice.evryhealth.com/api/v1/calls/{callId}/transcript" \-H "Authorization: Bearer YOUR_API_KEY"
{"callId": "5bbdd475-38f6-4211-9361-de482d105b81","messages": [{"role": "agent","text": "Hello, is this Dr. Smith?","medium": "voice","ordinal": 0},{"role": "user","text": "Speaking.","medium": "voice","ordinal": 1}],"messageCount": 2,"duration": 236}
Get a call recording#
The call's recordings. `audioUrl` is the API path that streams the audio; it is absent when there is nothing to play.
/api/v1/calls/{callId}/recordingPath parameters
callIdstringrequired- Call id.
Responses
The recordings. `duration` is in seconds.
curl -X GET "https://voice.evryhealth.com/api/v1/calls/{callId}/recording" \-H "Authorization: Bearer YOUR_API_KEY"
{"callId": "5bbdd475-38f6-4211-9361-de482d105b81","recordings": [{"sid": "RE0123456789abcdef0123456789abcdef","duration": 236,"status": "completed","createdAt": "2026-01-20T10:34:06.000Z"}],"recordingCount": 1,"audioUrl": "/api/v1/calls/5bbdd475-38f6-4211-9361-de482d105b81/recording/audio"}
Download the recording audio#
Streams the audio itself. Recordings of calls over the phone network come as MP3 by default or WAV with `format=wav`. Recordings the platform stores itself are only available as `audio/ogg`; naming a format for them is a 422.
/api/v1/calls/{callId}/recording/audioPath parameters
callIdstringrequired- Call id.
Query parameters
recordingSidstring- Which recording, when a call has several. Defaults to the first.
formatstring- mp3 or wav. Only for calls over the phone network.
- Default
mp3
Responses
The audio itself: `audio/mpeg` by default, `audio/wav` with `format=wav`, or `audio/ogg` for recordings stored by the platform.
curl -X GET "https://voice.evryhealth.com/api/v1/calls/{callId}/recording/audio" \-H "Authorization: Bearer YOUR_API_KEY"
{"contentType": "audio/mpeg","note": "Binary response, not JSON."}
Cancel a call#
Cancels a call that is `queued`, `initiated` or `ringing`. A call that has connected or ended cannot be cancelled.
/api/v1/calls/{callId}/cancelPath parameters
callIdstringrequired- Call id.
Responses
Cancelled.
curl -X POST "https://voice.evryhealth.com/api/v1/calls/{callId}/cancel" \-H "Authorization: Bearer YOUR_API_KEY"
{"message": "Call cancelled successfully","callId": "5bbdd475-38f6-4211-9361-de482d105b81","previousStatus": "queued","newStatus": "cancelled"}