Skip to main content
List call detail records

Authorizations

Authorization
string
header
required

Every request sends Authorization: Bearer <token>. The token is either a panel session (a JWT from /auth/login, 12 hours) or an API key ft_<id>_<secret>. An API key is accepted only from an address on its IP allowlist (403 ip_not_allowed otherwise; 403 ip_allowlist_required for an old key that has none), is limited to its rate per minute (429 rate_limited with Retry-After; X-RateLimit-Limit/Remaining/Reset on every response), and at most 60 call placements a minute.

Query Parameters

extension_id
string<uuid>

Filter on the extension the call was on.

did
string

Filter on the number dialled, matched as a case-insensitive SUBSTRING: "7231" finds every call to a number ending 7231. A % or _ in the value is matched literally, not as a wildcard. For an inbound call the number dialled is the DID it arrived on; it also matches an outbound call to that number, so pair it with direction=inbound for arrivals only.

campaign_id
string<uuid>

Calls placed by one campaign. The column has been on the CDR since the campaign tables were created and was neither returned nor filterable, so "what did this campaign cost" -- in minutes or in tokens -- could not be asked here.

from
string

Inclusive lower bound on started_at. RFC3339 timestamp or YYYY-MM-DD.

to
string

Exclusive upper bound on started_at. RFC3339 timestamp or YYYY-MM-DD.

team_id
string<uuid>

Filter on team.

agent_id
string<uuid>

Filter on agent.

direction
string

Filter on direction: inbound or outbound.

limit
integer
default:50
Required range: x <= 500
offset
integer
default:0
organisation_id
string<uuid>

Narrow to one organisation. Outside your scope returns 403.

sort
string

Sort key. Each list accepts its own allow-list of keys, given in that endpoint's description; anything else is a 400. ORDER BY cannot be parameterised, so the key is looked up rather than interpolated. Every sort carries a tiebreak on the primary key, so paging stays disjoint when the sort column has duplicates.

order
enum<string>

Sort direction. Defaults to ascending, except the call log, which reads newest first.

Available options:
asc,
desc
q
string

Free-text search across the list's searchable columns (case-insensitive substring). % and _ in the term match themselves.

transport
string

Filter on transport.

hangup_cause
string

Filter on hangup cause.

transcoded
boolean

Only transcoded calls.

trunk_id
string<uuid>

Filter on trunk.

min_billsec
integer

Only calls billed at least this many seconds.

Response

OK

items
object[]
required
limit
integer
required
offset
integer
required
total
integer
required