Reports
How reps, queues, outbound dialing and campaigns performed, computed from your calls when you ask (no rollups to wait for), in your workspace's time zone. The API key picks the environment: a test key reports test calls only.
const range = { from: '2026-10-01T00:00:00-04:00', to: '2026-11-01T00:00:00-04:00' };
const { data: queues, totals } = await hcc.reports.queues(range);
// [{ queue: 'sales', offered: 412, answered: 380, abandoned: 25, overflowed: 7,
// serviceLevel: 0.81, serviceLevelSeconds: 20, asaSeconds: 14.2, longestWaitSeconds: 190, ... }]
const reps = await hcc.reports.reps({ ...range, repId: ['rep_…', 'rep_…'] });
// handled, talkSeconds, ahtSeconds, avgWrapUpSeconds, missedOffers, occupancy, states
const outbound = await hcc.reports.outbound(range); // dials, connects, connectRate, blockedDnc
const dispositions = await hcc.reports.dispositions({ ...range, queue: 'sales' });
const { data: campaigns } = await hcc.reports.campaigns({ ...range, campaign: 'renewals' });
// [{ campaign: 'renewals', dials: 900, connects: 210, connectRate: 0.23, rightPartyConversations: 180,
// machine: 300, voicemailsLeft: 250, noAnswer: 320, avgTalkSeconds: 94, dispositions: { meeting_booked: 40, ... },
// leadsLeft: 400, conversions: 40, goalRate: 0.1,
// exitReasons: { goal: 40, exit: 140, finished: 200, removed: 15, do_not_call: 5 } }]
const daily = await hcc.reports.timeseries({ ...range, metric: 'service_level', interval: 'day' });
const { data } = await hcc.reports.summary(range); // data.current vs data.previous (same length)
const csv = await hcc.reports.exportCsv('reps', range); // RFC 4180, header row first- Filters:
fromandto(default: the last 7 days; at most 92 days, hourly buckets at most 31),repIdandqueue(one or a list),direction(inboundoroutbound). The queues report ignoresrepId; outbound ignoresqueueanddirection. The campaigns report takescampaign(one or a list, by name) and ignores the other three. metricfortimeseries:calls,service_level(with the queues' lowesttarget),wait_time,handled,dialsorstates. Every bucket of the range is present, empty ones included.- Without the SDK, send
Accept: text/csvor?format=csvto any of/v1/reports/{reps,queues,outbound,campaigns,dispositions}. - Talk includes hold. Rep states (occupancy, time per state) are workspace-wide: a rep is one person in live and test.
- In the campaigns report, dials, talk and dispositions go by when the dial was placed, and leads by when they left, so a conversion can land in a later range than its calls. A late goal counts when it was reached.
rightPartyConversationsare answered calls the carrier didn't call a machine, leaving out a lead who found no rep, so a flow with noonVoicemailcounts a machine too.voicemailsLeftis the part ofmachinethatonVoicemailleft a message on.- The campaigns report has no breakdown by sequence step: dials don't record their step.