Real-call analysis
Have an agency's real dialer calls scored by Athos, delivered by the same webhook and readable from the same endpoints as practice calls.
Athos scores two kinds of call: practice calls your reps run through the SDK, and real calls
an agency's reps make on their dialer. Real calls are ingested from the dialer, scored by the same
engine, and surface in this API exactly like practice calls — same call.scored webhook, same
GET /v1/calls and GET /v1/calls/:callId, same ids, same shapes. They carry
source: "real_call", and you list them with GET /v1/calls?source=real_call.
Switching it on
There is nothing for your code to call. Real-call analysis is arranged with Athos, per agency:
tell your Athos contact which agency and which dialer, and an Athos operator sets up the dialer's
feed into Athos for that agency (the dialer gets its own connection details — this is unrelated to
your call.scored endpoint, which needs no change). Bringing a second agency onto real calls is a
second arrangement.
Once an agency is live, its reps' real calls appear in GET /v1/calls?source=real_call and fire
call.scored with the same signed body, once per call (success: false when the call was kept but
could not be scored — see Webhooks). Their minutes count
toward the same monthly allowance as practice calls (the one TENANT_QUOTA_EXCEEDED reports). An
agency that has not been switched on ingests nothing, is scored for nothing and is billed for
nothing.
Register your reps first
A real call from a rep you never registered is dropped, not scored. Register reps before the dialer goes live. Athos attributes each call to a registered agent by trying, in order:
- the rep's NPN;
- your own
platformAgentId— if you registered the rep under the same id your dialer sends on its calls, their real calls attribute directly; - their email;
- their full name.
Your own id is enough only when your platform is the dialer. If the agency dials through a third-party platform, its agent ids are in a namespace you never registered — register that rep's email or NPN as well, the same values the dialer sends, or their calls will not find them.
Two more rules of attribution:
- The rep must be registered in the agency the dialer connection belongs to. Attribution only looks inside that agency, so a rep registered under one of your other agencies is not found.
- A match on email additionally requires the name you registered to agree with the name the
dialer sends — at least one of the rep's first or last name must appear in it. This keeps a shared
mailbox from attributing one rep's calls to another. NPN and
platformAgentIdmatches carry no such check.
What differs on a real call
sourceis"real_call"anddrillKeyisnull.startedAtis when the call started;endedAtis derived asstartedAt+durationSec. The list'sfrom/towindow and ordering usestartedAt.transcriptturns carrystartTime/endTimein seconds from the start of the call.score.overallScoreis 60–100 (0when no headline score could be produced).score.compliancePercent— the 0–100 compliance percentage — is present whenever the call was assessed for compliance.score.complianceScorecard, the default Medicare rubric's section-by-section detail, is present only on a Medicare Advantage call that ended in a sale: a Final Expense real call never carries one, and an agency graded by its own compliance scorecard carriescompliancePercentwith nocomplianceScorecard.audioUrlis a short-lived signed link to Athos's own archived copy of the dialer recording (withaudioUrlExpiresAt), ornullwhen no archive exists — never the dialer's own URL. Archived recordings are kept for 30 days. After that the call still reads normally, withaudioUrl: null; fetch and store the recording within that window if you need it longer.- Not every real call produces a delivery. A call dropped before Athos persisted it — too short
to assess, no usable audio, a transcript that could not be produced, or a rep who is not
registered — fires nothing at all. A call that was persisted but could not be scored arrives as
success: false. - A real call can be re-dispositioned — the dialer changes the call's recorded outcome (a sale,
a callback, …) after the fact. That can change
score(includingcompliancePercentandcomplianceScorecard) andscoredAtwithout a newcall.scoreddelivery — re-read real calls on a schedule if you cache them.
Everything else — the ids, verifying the webhook signature, paging, reading the score object — is
identical to practice calls. See Webhooks and
Reading calls.