Reports
Rep performance
GET /v1/reports/reps reports:read
Per rep: calls handled (inbound and outbound), talk time, average handle time, wrap-up, missed offers, occupancy and time per state.
Query
fromstringStart of the range (inclusive), ISO 8601. Default: 7 days before
to. At most 92 daystostringEnd of the range (exclusive), ISO 8601. Default: now
repIdstring | string[]Only these reps (
rep_…)queuestring | string[]Only these queues, by name
campaignstring | string[]Only these campaigns, by name. Only the campaign report reads it
direction"inbound" | "outbound"Only inbound or outbound calls
format"json" | "csv"csv: answer with CSV, likeAccept: text/csv
Responses
- 200
The report, or its rows as CSV
Fields
-
dataRepReportRow[] requiredFields
-
repIdstring required -
namestring required -
emailstring required -
handledinteger requiredCalls connected: inbound + outbound
-
inboundinteger requiredQueue calls the rep answered
-
outboundinteger requiredThe rep's outbound calls the customer answered
-
talkSecondsnumber requiredConnect to hang-up, hold included
-
wrapUpSecondsnumber requiredWrap-up after the handled calls
-
ahtSecondsnumber | null requiredAverage handle time: (talk + wrap-up) ÷ handled
-
avgWrapUpSecondsnumber | null required -
missedOffersinteger requiredOffers the rep let expire
-
occupancynumber | null required(on call + wrap-up) ÷ (available + on call + wrap-up) 0 to 1.
-
statesRepStateSeconds requiredSeconds in each rep state within the range
-
-
totalsobject requiredFields
-
handledinteger requiredCalls connected: inbound + outbound
-
inboundinteger requiredQueue calls the rep answered
-
outboundinteger requiredThe rep's outbound calls the customer answered
-
talkSecondsnumber requiredConnect to hang-up, hold included
-
wrapUpSecondsnumber requiredWrap-up after the handled calls
-
ahtSecondsnumber | null requiredAverage handle time: (talk + wrap-up) ÷ handled
-
avgWrapUpSecondsnumber | null required -
missedOffersinteger requiredOffers the rep let expire
-
occupancynumber | null required(on call + wrap-up) ÷ (available + on call + wrap-up) 0 to 1.
-
statesRepStateSeconds requiredSeconds in each rep state within the range
-
-
rangeReportRange requiredFields
-
fromstring required -
tostring required -
timezonestring requiredThe workspace's time zone: buckets use it
-
environment"live" | "test" required
-
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code
Queue performance
GET /v1/reports/queues reports:read
Per queue, from the visits that entered it: offered, answered, abandoned, overflowed, service level, average speed of answer and longest wait. repId does not apply.
Query
fromstringStart of the range (inclusive), ISO 8601. Default: 7 days before
to. At most 92 daystostringEnd of the range (exclusive), ISO 8601. Default: now
repIdstring | string[]Only these reps (
rep_…)queuestring | string[]Only these queues, by name
campaignstring | string[]Only these campaigns, by name. Only the campaign report reads it
direction"inbound" | "outbound"Only inbound or outbound calls
format"json" | "csv"csv: answer with CSV, likeAccept: text/csv
Responses
- 200
The report, or its rows as CSV
Fields
-
dataQueueReportRow[] requiredFields
-
queuestring required -
offeredinteger requiredVisits that entered the queue, leaving out
outsideHours -
answeredinteger required -
abandonedinteger requiredThe caller hung up while waiting
-
abandonmentRatenumber | null requiredabandoned ÷ offered 0 to 1.
-
overflowedinteger requiredLeft by overflow, or nobody was on
-
outsideHoursinteger requiredTurned away by the queue's business hours: in no other count
-
answeredWithininteger requiredAnswered within the threshold
-
serviceLevelnumber | null requiredansweredWithin ÷ (answered + abandoned + overflowed) 0 to 1.
-
asaSecondsnumber | null requiredAverage speed of answer
-
longestWaitSecondsnumber | null required -
serviceLevelSecondsinteger requiredThe queue's threshold (
serviceLevel.seconds, default 20) -
serviceLevelTargetnumber required
-
-
totalsobject requiredFields
-
offeredinteger requiredVisits that entered the queue, leaving out
outsideHours -
answeredinteger required -
abandonedinteger requiredThe caller hung up while waiting
-
abandonmentRatenumber | null requiredabandoned ÷ offered 0 to 1.
-
overflowedinteger requiredLeft by overflow, or nobody was on
-
outsideHoursinteger requiredTurned away by the queue's business hours: in no other count
-
answeredWithininteger requiredAnswered within the threshold
-
serviceLevelnumber | null requiredansweredWithin ÷ (answered + abandoned + overflowed) 0 to 1.
-
asaSecondsnumber | null requiredAverage speed of answer
-
longestWaitSecondsnumber | null required
-
-
rangeReportRange requiredFields
-
fromstring required -
tostring required -
timezonestring requiredThe workspace's time zone: buckets use it
-
environment"live" | "test" required
-
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code
Outbound performance
GET /v1/reports/outbound reports:read
From the dial attempts of reps, campaigns and the API: dials, connects, connect rate, talk, Do Not Call blocks and dispositions, per rep, with calls the API placed with no rep in a row of their own (noRep). queue and direction do not apply.
Query
fromstringStart of the range (inclusive), ISO 8601. Default: 7 days before
to. At most 92 daystostringEnd of the range (exclusive), ISO 8601. Default: now
repIdstring | string[]Only these reps (
rep_…)queuestring | string[]Only these queues, by name
campaignstring | string[]Only these campaigns, by name. Only the campaign report reads it
direction"inbound" | "outbound"Only inbound or outbound calls
format"json" | "csv"csv: answer with CSV, likeAccept: text/csv
Responses
- 200
The report, or its rows as CSV
Fields
-
dataOutboundReportRow[] requiredFields
-
repIdstring | null required -
namestring | null required -
noRepboolean requiredThe row of calls placed through the API with no rep. Another row with a null
repIdis dials whose rep is gone, or a campaign's that no rep ended up on. -
dialsinteger requiredDial attempts placed
-
connectsinteger requiredPlaced calls the customer answered
-
connectRatenumber | null requiredconnects ÷ dials 0 to 1.
-
avgTalkSecondsnumber | null required -
blockedDncinteger requiredRefused: on the Do Not Call list
-
refusedinteger requiredAll refused dials
-
dispositionsobject required
-
-
totalsobject requiredFields
-
dialsinteger requiredDial attempts placed
-
connectsinteger requiredPlaced calls the customer answered
-
connectRatenumber | null requiredconnects ÷ dials 0 to 1.
-
avgTalkSecondsnumber | null required -
blockedDncinteger requiredRefused: on the Do Not Call list
-
refusedinteger requiredAll refused dials
-
dispositionsobject required
-
-
rangeReportRange requiredFields
-
fromstring required -
tostring required -
timezonestring requiredThe workspace's time zone: buckets use it
-
environment"live" | "test" required
-
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code
Campaign performance
GET /v1/reports/campaigns reports:read
Per campaign: dials, connects, right-party conversations, machines, no answers, talk and dispositions, from the dials placed in the range; and the leads that left in the range, why, and the goal rate. Only campaign filters it: repId, queue and direction do not apply.
Query
fromstringStart of the range (inclusive), ISO 8601. Default: 7 days before
to. At most 92 daystostringEnd of the range (exclusive), ISO 8601. Default: now
repIdstring | string[]Only these reps (
rep_…)queuestring | string[]Only these queues, by name
campaignstring | string[]Only these campaigns, by name. Only the campaign report reads it
direction"inbound" | "outbound"Only inbound or outbound calls
format"json" | "csv"csv: answer with CSV, likeAccept: text/csv
Responses
- 200
The report, or its rows as CSV
Fields
-
dataCampaignReportRow[] requiredFields
-
campaignstring required -
dialsinteger requiredDial attempts placed in the range
-
connectsinteger requiredDialed calls answered, and not by a machine
-
connectRatenumber | null requiredconnects ÷ dials 0 to 1.
-
rightPartyConversationsinteger requiredConnects that were a real conversation: not ones that found no rep. A machine nobody asked the carrier about counts, so a flow with no
onVoicemailcan overstate this -
machineinteger requiredDialed calls a machine answered
-
voicemailsLeftinteger requiredThe machines
onVoicemailleft a message on: part ofmachine -
noAnswerinteger requiredDialed calls nobody answered
-
avgTalkSecondsnumber | null requiredConnect to the call's end, per connect
-
dispositionsobject requiredThe dispositions of the range's dialed calls
-
leadsLeftinteger requiredLeads that left in the range
-
exitReasonsobject requiredLeads that left in the range, per reason
-
conversionsinteger requiredLeads that left with reason
goal -
goalRatenumber | null requiredconversions ÷ leadsLeft 0 to 1.
-
-
totalsobject requiredFields
-
dialsinteger requiredDial attempts placed in the range
-
connectsinteger requiredDialed calls answered, and not by a machine
-
connectRatenumber | null requiredconnects ÷ dials 0 to 1.
-
rightPartyConversationsinteger requiredConnects that were a real conversation: not ones that found no rep. A machine nobody asked the carrier about counts, so a flow with no
onVoicemailcan overstate this -
machineinteger requiredDialed calls a machine answered
-
voicemailsLeftinteger requiredThe machines
onVoicemailleft a message on: part ofmachine -
noAnswerinteger requiredDialed calls nobody answered
-
avgTalkSecondsnumber | null requiredConnect to the call's end, per connect
-
dispositionsobject requiredThe dispositions of the range's dialed calls
-
leadsLeftinteger requiredLeads that left in the range
-
exitReasonsobject requiredLeads that left in the range, per reason
-
conversionsinteger requiredLeads that left with reason
goal -
goalRatenumber | null requiredconversions ÷ leadsLeft 0 to 1.
-
-
rangeReportRange requiredFields
-
fromstring required -
tostring required -
timezonestring requiredThe workspace's time zone: buckets use it
-
environment"live" | "test" required
-
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code
Dispositions per rep and queue
GET /v1/reports/dispositions reports:read
Calls with a disposition, counted per disposition, rep and queue.
Query
fromstringStart of the range (inclusive), ISO 8601. Default: 7 days before
to. At most 92 daystostringEnd of the range (exclusive), ISO 8601. Default: now
repIdstring | string[]Only these reps (
rep_…)queuestring | string[]Only these queues, by name
campaignstring | string[]Only these campaigns, by name. Only the campaign report reads it
direction"inbound" | "outbound"Only inbound or outbound calls
format"json" | "csv"csv: answer with CSV, likeAccept: text/csv
Responses
- 200
The report, or its rows as CSV
Fields
-
dataDispositionReportRow[] requiredFields
-
dispositionstring required -
repIdstring | null requiredWho recorded it, or the call’s rep
-
namestring | null required -
queuestring | null requiredThe call's last queue
-
countinteger required
-
-
totalsobject requiredFields
-
countinteger required -
byDispositionobject required
-
-
rangeReportRange requiredFields
-
fromstring required -
tostring required -
timezonestring requiredThe workspace's time zone: buckets use it
-
environment"live" | "test" required
-
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code
A metric over time
GET /v1/reports/timeseries reports:read
Hourly or daily buckets in the workspace's time zone; every bucket of the range is present. Hourly series cover at most 31 days.
Query
fromstringStart of the range (inclusive), ISO 8601. Default: 7 days before
to. At most 92 daystostringEnd of the range (exclusive), ISO 8601. Default: now
repIdstring | string[]Only these reps (
rep_…)queuestring | string[]Only these queues, by name
campaignstring | string[]Only these campaigns, by name. Only the campaign report reads it
direction"inbound" | "outbound"Only inbound or outbound calls
metric"calls" | "service_level" | "wait_time" | "handled" | "dials" | "states" requiredinterval"hour" | "day"
Responses
- 200
The series
Fields
-
dataTimeseriesPoint[] requiredFields
-
bucketstring requiredThe bucket's start
-
-
metric"calls" | "service_level" | "wait_time" | "handled" | "dials" | "states" required -
interval"hour" | "day" required -
targetnumberservice_level: the queues’ (lowest) target -
rangeReportRange requiredFields
-
fromstring required -
tostring required -
timezonestring requiredThe workspace's time zone: buckets use it
-
environment"live" | "test" required
-
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code
Headline numbers, against the previous period
GET /v1/reports/summary reports:read
Calls, service level, abandonment rate, average speed of answer, average handle time and connect rate for the range, and for the range of the same length right before it.
Query
fromstringStart of the range (inclusive), ISO 8601. Default: 7 days before
to. At most 92 daystostringEnd of the range (exclusive), ISO 8601. Default: now
repIdstring | string[]Only these reps (
rep_…)queuestring | string[]Only these queues, by name
campaignstring | string[]Only these campaigns, by name. Only the campaign report reads it
direction"inbound" | "outbound"Only inbound or outbound calls
Responses
- 200
The KPIs
Fields
-
dataobject requiredFields
-
currentReportKpis required -
previousReportKpis required -
previousRangeobject required
-
-
rangeReportRange requiredFields
-
fromstring required -
tostring required -
timezonestring requiredThe workspace's time zone: buckets use it
-
environment"live" | "test" required
-
-
- 400
Invalid request
- 401
Missing or invalid API key
- 404
Not found
- 429
rate_limited, or another limit named byerror.code