Skip to main content
GET
List call logs

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, so filters[end_date]=2026-09-30 leaves out 30 September. Send 2026-09-30T23:59:59.999Z to 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 with filters[disposition_ids].
  • Search sets the order. With filters[search], results come back by relevance and sort is ignored.
  • pagination has two shapes. Without filters it is { total, page, next }. With any filter it is { total, page, limit, pages }. Both carry total and page, so you can always work out the page count as total / 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; add filters[is_completed]=true to do the same.
  • Invalid IDs are dropped silently. In filters[user_ids][] and filters[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.
  • connected and conversation differ 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_id is filterable but not returned. filters[crm_ids][] matches the contact’s crm_id, which the contact object 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

Each call log includes both 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

x-api-key
string
header
required

Team-scoped API key generated in the Salesfinity dashboard under Settings → Connections → API & Webhooks. A missing or invalid key returns HTTP 403.

Query Parameters

limit
integer
default:10

Items per page. Default 10. Above 100 is treated as 100.

Required range: 1 <= x <= 100
page
integer
default:1

Page number, 1-based.

Required range: x >= 1
sort
string

Comma-separated field names; prefix - for descending. Default: -createdAt. Ignored when filters[search] is set.

filters[start_date]
string<date-time>

Earliest createdAt to include, as an ISO 8601 timestamp. A date with no time means midnight UTC.

filters[end_date]
string<date-time>

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.

filters[outcome]
enum<string>

Only calls that ended this way.

Available options:
answered,
no-answer,
cancelled
filters[direction]
enum<string>

Only outbound or only inbound calls.

Available options:
inbound,
outbound
filters[min_duration]
number

Shortest call to include, in seconds, inclusive.

Required range: x >= 0
filters[max_duration]
number

Longest call to include, in seconds, inclusive.

Required range: x >= 0
filters[has_recording]
boolean

true for calls with a recording_url, false for calls without one.

filters[answered_by]
enum<string>

Only calls answered by a person (human) or by voicemail or an answering machine (machine_start).

Available options:
human,
machine_start
filters[is_completed]
boolean

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.

filters[disposition_ids]
integer[]

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 [].

filters[exclude_negative_dispositions]
boolean

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].

filters[user_ids]
string[]

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.

filters[contact_list_ids]
string[]

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.

filters[contact_ids]
string[]

Contact IDs, matched against contact._id. Send each value as its own filters[...][]= parameter; one value can also be sent without [].

filters[crm_ids]
string[]

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 [].

filters[sequences]
string[]

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 [].

filters[from]
string[]

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 [].

filters[to]
string[]

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.

filters[ids]
string[]

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.

filters[status]
enum<string>[]

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 [].

Available options:
connected,
conversation

Response

One page of call logs, newest first unless sort or filters[search] says otherwise.

data
object[]
pagination
object

Paging details. Without any filters[...] parameter the object is { total, page, next }; with one or more it is { total, page, limit, pages }.