List All Calls

Get a paginated list of all calls across campaigns for the authenticated user.

GET/api/v1/calls
Calls represent individual phone calls made or received as part of a campaign. Each call includes status tracking, duration, and AI-powered analysis. Use the campaignId query parameter to filter calls to a specific campaign.

Authorization

ParameterTypeDescription
x-api-keyrequired
string

Your API key

Example: dk_...

Query Parameters

ParameterTypeDescription
page
number

Page number for pagination

Default: 1

pageSize
number

Number of items per page (max 100)

Default: 50

status
string

Filter by call status (queued, completed, failed, cancelled, in-progress)

campaignId
string

Filter calls to a specific campaign

direction
string

Filter by call direction (outbound, inbound)

dateFrom
string

Filter calls created on or after this date (ISO 8601)

dateTo
string

Filter calls created on or before this date (ISO 8601)

minDuration
number

Minimum call duration in seconds

maxDuration
number

Maximum call duration in seconds

search
string

Search by contact name or phone number

Responses

{
"data": {
"calls": [
{
"id": "5bbdd475-38f6-4211-9361-de482d105b8c",
"campaignId": "357b188c-c618-4f95-84b1-cbe26b8ce3e0",
"phoneNumber": "+15551234567",
"calleeName": "Dr. John Smith",
"status": "completed",
"direction": "outbound",
"duration": 245,
"createdAt": "2024-01-20T10:30:00Z",
"endedAt": "2024-01-20T10:34:05Z"
}
],
"pagination": {
"page": 1,
"pageSize": 50,
"total": 150,
"totalPages": 3
},
"summary": {
"total": 150,
"completed": 120,
"failed": 10,
"active": 5,
"queued": 15
}
}
}
GET /api/v1/calls
curl -X GET "https://voice.evryhealth.com/api/v1/calls" \
-H "x-api-key: YOUR_API_KEY"
Response200
{
"data": {
"calls": [
{
"id": "5bbdd475-38f6-4211-9361-de482d105b8c",
"campaignId": "357b188c-c618-4f95-84b1-cbe26b8ce3e0",
"phoneNumber": "+15551234567",
"calleeName": "Dr. John Smith",
"status": "completed",
"direction": "outbound",
"duration": 245,
"createdAt": "2024-01-20T10:30:00Z",
"endedAt": "2024-01-20T10:34:05Z"
}
],
"pagination": {
"page": 1,
"pageSize": 50,
"total": 150,
"totalPages": 3
},
"summary": {
"total": 150,
"completed": 120,
"failed": 10,
"active": 5,
"queued": 15
}
}
}

Additional Endpoints

List Campaign Calls

GET/api/v1/campaigns/{id}/calls

Get a paginated list of calls for a specific campaign. Supports the same query parameters as List All Calls (except campaignId).

Queue Calls

POST/api/v1/campaigns/{id}/calls

Queue calls for specific contacts or all pending contacts in a campaign.

// Queue specific contacts
{
"contactIds": [
"contact_abc123",
"contact_def456"
],
"priority": 5,
"scheduledFor": "2024-01-21T09:00:00Z"
}
// Or queue all pending contacts
{
"queueAllPending": true,
"priority": 3
}

Queue Options

FieldTypeDescription
contactIdsstring[]Specific contact IDs to call
queueAllPendingbooleanQueue all contacts with pending status
prioritynumberPriority 1-10 (higher = more urgent)
scheduledForstringISO date string for scheduled calls

Get Call Details

GET/api/v1/calls/{callId}

Get detailed information about a specific call including a natural-language summary and the full analysis breakdown.

// Response
{
"data": {
"id": "5bbdd475-38f6-4211-9361-de482d105b8c",
"campaignId": "357b188c-c618-4f95-84b1-cbe26b8ce3e0",
"phoneNumber": "+15551234567",
"calleeName": "Dr. John Smith",
"direction": "outbound",
"status": "completed",
"duration": 245,
"summary": "The agent reached Dr. Smith and successfully scheduled an annual review appointment for next Tuesday...",
"analysis": {
"analyzedAt": "2024-01-20T10:35:00Z",
"sentiment": {
"overallSentiment": "positive",
"confidence": 0.85,
"summary": "The conversation was friendly and productive.",
"emotionalTone": { "caller": "professional", "recipient": "cooperative" },
"communicationQuality": { "clarity": 8, "effectiveness": 9, "rapport": 8 }
},
"humanContact": {
"reachedHuman": true,
"confidence": 0.98,
"reachedVoicemail": false,
"leftMessage": false
},
"objectives": {
"schedule_appointment": {
"status": "True",
"confidence": 0.95,
"reasoning": "Appointment confirmed for next Tuesday"
}
},
"callback": {
"callbackRequested": false,
"humanTransferRequested": false,
"urgency": "low",
"summary": "No callback requested.",
"confidence": 0.99
},
"doNotCall": { "requested": false, "confidence": 0.99, "requestType": "none" },
"legal": { "threatened": false, "confidence": 0.99, "threatType": "none", "severity": null },
"crisis": { "detected": false, "confidence": 0.99, "severity": null, "indicatorType": "none" },
"resolution": {
"resolved": true,
"resolutionType": "full",
"escalated": false,
"followUpRequired": false,
"confidence": 0.95,
"summary": "Appointment successfully scheduled."
}
},
"createdAt": "2024-01-20T10:30:00Z",
"endedAt": "2024-01-20T10:34:05Z"
}
}
The summary field is a natural-language description of the conversation and is only available on the single call detail endpoint, not in list responses.

Call Statuses

StatusDescription
queuedCall is waiting to be initiated
initiatedCall has been started
ringingPhone is ringing
in_progressCall is active
completedCall finished successfully
failedCall could not be completed
cancelledCall was cancelled before completion

Call Analysis

Completed calls include AI-powered analysis. The analysis object contains the following fields:

FieldDescription
sentimentSentiment analysis with overall sentiment, key moments, emotional tone, communication quality scores, summary text, and recommendations
objectivesCampaign objective outcomes keyed by objective ID, with status (True/False/Unknown), sub-objectives, reasoning, and confidence
humanContactWhether a human was reached, with voicemail detection and message delivery tracking
callbackCallback and human transfer requests with urgency, preferred contact method, timeframe, reason, and summary
doNotCallDo-not-call request detection with request type (explicit/implicit) and confidence
legalLegal threat detection with threat type (lawsuit, lawyer, regulatory) and severity
crisisCrisis/distress detection with severity, indicator type, and recommended action
ivrIVR navigation analysis: whether IVR was encountered, stuck detection, escape status, and navigation path
informationUpdatesContact information corrections detected during the call (field, original value, corrected value)
communicationPromisesPromises made to send documents, follow up, or communicate via email/text/fax
callerIntentInbound call intent analysis with primary intent, urgency, keywords, and summary
resolutionCall resolution status (full/partial/unresolved), escalation tracking, follow-up requirements, and summary

Get Call Transcript

GET/api/v1/calls/{callId}/transcript

Get the full conversation transcript for a call. Messages are returned in chronological order with role labels.

// Response
{
"data": {
"callId": "5bbdd475-38f6-4211-9361-de482d105b8c",
"messages": [
{
"role": "agent",
"text": "Hello, this is Sarah from Acme Health. Am I speaking with Dr. Smith?",
"ordinal": 0
},
{
"role": "user",
"text": "Yes, this is Dr. Smith. How can I help you?",
"ordinal": 1
},
{
"role": "agent",
"text": "I'm calling to schedule your annual review. Would next Tuesday work?",
"ordinal": 2
}
],
"messageCount": 3,
"duration": 245
}
}
Transcripts are only available for calls that were processed through the AI voice agent. If a call has no transcript data, the messages array will be empty.

Get Call Recording

GET/api/v1/calls/{callId}/recording

Get recording metadata for a call. Includes recording duration, status, and a link to download the audio.

// Response
{
"data": {
"callId": "5bbdd475-38f6-4211-9361-de482d105b8c",
"recordings": [
{
"sid": "RE1234567890abcdef",
"duration": 245,
"status": "completed",
"createdAt": "2024-01-20T10:30:00Z"
}
],
"recordingCount": 1,
"audioUrl": "/api/v1/calls/5bbdd475-38f6-4211-9361-de482d105b8c/recording/audio"
}
}
Recordings are only available for calls with telephony recording enabled. If no recordings exist, the recordings array will be empty.

Download Call Recording Audio

GET/api/v1/calls/{callId}/recording/audio

Download the recording audio file. Returns the audio stream directly with appropriate content headers.

ParameterTypeDescription
formatstringAudio format: mp3 (default) or wav
recordingSidstringSpecific recording SID (uses first recording if omitted)
# Download as MP3
curl -H "x-api-key: YOUR_API_KEY" \
/api/v1/calls/{callId}/recording/audio \
--output recording.mp3
# Download as WAV
curl -H "x-api-key: YOUR_API_KEY" \
"/api/v1/calls/{callId}/recording/audio?format=wav" \
--output recording.wav

Cancel Call

POST/api/v1/calls/{callId}/cancel

Cancel a queued or scheduled call. Calls that are already in progress cannot be cancelled.

Only calls with status queued can be cancelled. Calls that have already been initiated will complete normally.