List Campaign Calls
Voice Campaigns
List Campaign Calls
Get all call records for a voice campaign
GET
List Campaign Calls
Description
Returns individual call records for a campaign with full details including transcripts, sentiment, and extracted data. Cursor-paginated — for campaigns with more thanlimit calls, follow the next_pagination_key cursor returned in the response to walk through every page. The pagination contract mirrors GET /v1/voice/calls so a single client implementation works for both endpoints.
Authentication
Your Teli API key
Path Parameters
The campaign identifier
Query Parameters
Filter by call outcome:
connected, failed, voicemail, allFilter by sentiment:
Positive, Negative, Neutral, UnknownPage size — maximum results to return per request (max: 500)
Cursor for fetching the next page. Pass the
next_pagination_key value from the previous response. Omit on the first request.Response Fields
Whether the request was successful
Campaign identifier
Number of calls in this page (after any
status/sentiment filters were applied). May be less than limit when filtering — keep paging on has_more, not page size.true when more calls exist beyond this page. Continue requesting pages until this is false.Cursor to fetch the next page. Pass this value as the
pagination_key query param on the next request. null when there are no more pages.Array of call records
Always returns “Teli”
Example Request
First page
Next page (using cursor from previous response)
Example Response
200
Paginating Through All Calls
For campaigns with more calls thanlimit, loop on has_more until the server signals exhaustion:
Python
JavaScript
Status Filter Logic
| Status Value | Returns Calls Where |
|---|---|
connected | call_duration_ms > 0 AND in_voicemail = false |
voicemail | in_voicemail = true |
failed | call_duration_ms = 0 AND in_voicemail = false |
all | All calls (default) |
Fields NOT Included
| Field | Reason |
|---|---|
disconnection_reason | Use call_successful, in_voicemail, and call_duration_ms to determine outcome |
Notes
- Calls are ordered by
start_timestamp(newest first) - The cursor (
next_pagination_key) is thestart_timestampof the last call in the current page, used as a<bound on the next request - Server-side
status/sentimentfilters are applied AFTER pagination slicing. This means a page may contain fewer thanlimititems even whenhas_more=true— always loop onhas_more, never on the returned page size - A
nullor missingnext_pagination_keymeans you’ve reached the end (combined withhas_more: false) - Calling with the same
pagination_keytwice is idempotent — returns the same page - Transcripts may be large; lower
limitif you hit response size limits extracted_fieldsdepends on your agent’s extraction configuration
Related Endpoints
- Get Analytics - Aggregate statistics
- Failed Numbers - Just failed phone numbers
- Call History - Cross-campaign call history

