Skip to main content
GET
/
v1
/
voice
/
campaigns
/
{campaign_id}
/
calls
List Campaign Calls
curl --request GET \
  --url https://api.example.com/v1/voice/campaigns/{campaign_id}/calls \
  --header 'X-API-Key: <x-api-key>'
{
  "success": true,
  "campaign_id": "<string>",
  "count": 123,
  "calls": [
    {
      "call_id": "<string>",
      "to_number": "<string>",
      "from_number": "<string>",
      "call_successful": true,
      "in_voicemail": true,
      "call_status": "<string>",
      "user_sentiment": "<string>",
      "call_duration_ms": 123,
      "start_timestamp": "<string>",
      "end_timestamp": "<string>",
      "transcript": "<string>",
      "extracted_fields": {}
    }
  ],
  "powered_by": "<string>"
}

Description

Returns all individual call records for a campaign with full details including transcripts, sentiment, and extracted data.

Authentication

X-API-Key
string
required
Your Teli API key

Path Parameters

campaign_id
string
required
The campaign identifier

Query Parameters

status
string
default:"all"
Filter by call outcome: connected, failed, voicemail, all
sentiment
string
Filter by sentiment: Positive, Negative, Neutral, Unknown
limit
integer
default:"100"
Maximum results to return (max: 500)

Response Fields

success
boolean
Whether the request was successful
campaign_id
string
Campaign identifier
count
integer
Number of calls returned
calls
array
Array of call records
powered_by
string
Always returns “Teli”

Example Request

cURL
curl -X GET "https://api.teli.ai/v1/voice/campaigns/voice_campaign_abc123/calls?status=connected&limit=50" \
  -H "X-API-Key: YOUR_API_KEY"

Example Response

200
{
  "success": true,
  "campaign_id": "voice_campaign_abc123",
  "calls": [
    {
      "call_id": "call_xyz789",
      "to_number": "+15559876543",
      "from_number": "+15551234567",
      "call_successful": true,
      "in_voicemail": false,
      "call_status": "ended",
      "user_sentiment": "Positive",
      "call_duration_ms": 45000,
      "start_timestamp": "2026-01-28T10:30:00.000000",
      "end_timestamp": "2026-01-28T10:30:45.000000",
      "transcript": "Agent: Hi John, how are you today?\nUser: I'm doing well, thanks for calling...",
      "extracted_fields": {
        "interest_level": "high",
        "callback_requested": true
      }
    }
  ],
  "count": 1,
  "powered_by": "Teli"
}

Status Filter Logic

Status ValueReturns Calls Where
connectedcall_duration_ms > 0 AND in_voicemail = false
voicemailin_voicemail = true
failedcall_duration_ms = 0 AND in_voicemail = false
allAll calls (default)

Fields NOT Included

FieldReason
disconnection_reasonUse call_successful, in_voicemail, and call_duration_ms to determine outcome

Notes

  • Calls are ordered by start_timestamp (newest first)
  • Transcripts may be large - use pagination for large campaigns
  • extracted_fields depends on your agent’s extraction configuration