List call logs
Returns the team’s call history, newest first, with filters, sorting and pagination. Read-only.
page, limit and sort are top-level query parameters. Every filter goes under filters[...]; a filter sent without that prefix, such as search=Acme, is ignored and the unfiltered history comes back. Send list filters as filters[name][]=value, once per value; a single value can also be sent as filters[name]=value. A value that does not fit its filter, such as an unknown outcome or a date that does not parse, fails with 400.
Date filters compare against createdAt, the time the call was logged, and include both ends. With filters[search], results are ordered by relevance and sort is ignored. The pagination object is { total, page, limit, next } when no filter is sent and { total, page, limit, pages } when any filter is.
Calls from every team member are included, as are calls with is_completed: false, which analytics leave out. Use Get a call log for one call, List dispositions and List CRM sequences for filter values, and Get the current team for user IDs. Rate limit: the heavy-reads bucket, 120 requests per minute per team (see Rate limits).
How to send filters
page, limit and sort are top-level query parameters. Every filter is nested under
filters[...]. A filter sent without the prefix, such as search=Acme, is ignored, and the
unfiltered history comes back.
curl reads square brackets in a URL as a range, so pass --globoff, or percent-encode them as
%5B and %5D.
Examples
Gotchas
- Dates are inclusive and filter on
createdAt, the time the call was logged. A date with no time means midnight UTC, sofilters[end_date]=2026-09-30leaves out 30 September. Send2026-09-30T23:59:59.999Zto include the whole day. filters[exclude_negative_dispositions]is on whenever it is present, even as=false. Omit it to include every disposition, and do not combine it withfilters[disposition_ids].- Search sets the order. With
filters[search], results come back by relevance andsortis ignored. paginationhas two shapes. Without filters it is{ total, page, next }. With any filter it is{ total, page, limit, pages }. Both carrytotalandpage, so you can always work out the page count astotal / limit, rounded up.- Unfinished calls are included. An attempt the rep moved on from to dial another of the
contact’s numbers, and an inbound call answered in the app that the rep has not logged yet, both
have
is_completed: false. Analytics leave these out; addfilters[is_completed]=trueto do the same. - Invalid IDs are dropped silently. In
filters[user_ids][]andfilters[contact_list_ids][], values that are not 24-character hex IDs are skipped. If none is valid, the filter is not applied and every call comes back. connectedandconversationdiffer from analytics.filters[status][]uses simpler rules than the metrics of the same names on Get analytics overview, so the counts will not match.crm_idis filterable but not returned.filters[crm_ids][]matches the contact’scrm_id, which thecontactobject in the response leaves out.
Paging through everything
This list counts toward the heavy-reads rate limit of 120 requests per minute, so use the largest page size and stop on the last page:contact_list and source
contact_list and source. contact_list is the dialing-queue
list the call was placed from (its _id is the queue ID, the value filters[contact_list_ids][]
matches). source identifies the original source list the call came from. For CSV lists,
source.id is the CSV list ID, which differs from the queue ID. source.id and source.name are
null for non-CSV lists. contact_list is unchanged and remains fully backward compatible.Authorizations
Team-scoped API key generated in the Salesfinity dashboard under Settings → Connections → API & Webhooks. A missing or invalid key returns HTTP 403.
Query Parameters
Items per page. Default 10. Above 100 is treated as 100.
1 <= x <= 100Page number, 1-based.
x >= 1Comma-separated field names; prefix - for descending. Default: -createdAt. Ignored when filters[search] is set.
Earliest createdAt to include, as an ISO 8601 timestamp. A date with no time means midnight UTC.
Latest createdAt to include, as an ISO 8601 timestamp. A date with no time means midnight UTC, so 2026-09-30 stops at the start of that day; send 2026-09-30T23:59:59.999Z to include all of it.
Only calls that ended this way.
answered, no-answer, cancelled Only outbound or only inbound calls.
inbound, outbound Shortest call to include, in seconds, inclusive.
x >= 0Longest call to include, in seconds, inclusive.
x >= 0true for calls with a recording_url, false for calls without one.
Only calls answered by a person (human) or by voicemail or an answering machine (machine_start).
human, machine_start true leaves out calls that do not count as finished: attempts the rep moved on from to dial another of the contact's numbers, and inbound calls answered in the app that are not logged yet. false returns only those.
Disposition id values from List dispositions, matched against disposition.internal_id, so a default's custom variants are included. Send each value as its own filters[...][]= parameter; one value can also be sent without [].
Returns only calls with a positive disposition: IDs 1, 4, 6, 7 and 8 (Meeting Set, Referral, Call back later, Reach out in 6 months, Send an email). false, or leaving it out, includes every disposition. Do not combine it with filters[disposition_ids].
Reps' user _id values from Get the current team. Send each value as its own filters[...][]= parameter; one value can also be sent without []. Values that are not 24-character hex IDs are dropped, and if none is valid the filter is not applied.
List IDs, matched against contact_list._id (the dialing-queue ID, which for CSV lists differs from source.id). Send each value as its own filters[...][]= parameter; one value can also be sent without []. Values that are not 24-character hex IDs are dropped, and if none is valid the filter is not applied.
Contact IDs, matched against contact._id. Send each value as its own filters[...][]= parameter; one value can also be sent without [].
CRM record IDs, matched against the contact's crm_id, which the response does not include. Send each value as its own filters[...][]= parameter; one value can also be sent without [].
Sequence id values from List CRM sequences, matched exactly against contact.external_relations.sequence.id. Send each value as its own filters[...][]= parameter; one value can also be sent without [].
Numbers the calls were placed from, matched exactly as stored in from. Send each value as its own filters[...][]= parameter; one value can also be sent without [].
Numbers called, matched exactly as stored in to. Send each value as its own filters[...][]= parameter; one value can also be sent without [].
Case-insensitive search across the contact's name, company, account, title and email, the to/from and dialed numbers, and the call notes, summary and disposition, call purpose and call sentiment names. Call transcripts are not searched. Results are ordered by relevance.
Call log _id values to fetch. Send each value as its own filters[...][]= parameter; one value can also be sent without []. A value that is not a valid ID fails with 400.
connected: answered, by a person or with no answering-machine result, with a disposition ID below 10. conversation: answered, by a person or with no answering-machine result, and lasting at least 60 seconds. Send both for either. These rules differ from the analytics metrics of the same names. Do not combine conversation with the duration filters. Send each value as its own filters[...][]= parameter; one value can also be sent without [].
connected, conversation