Athos Developer Docs
Backend

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:

  1. the rep's NPN;
  2. your own platformAgentId — if you registered the rep under the same id your dialer sends on its calls, their real calls attribute directly;
  3. their email;
  4. 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 platformAgentId matches carry no such check.

What differs on a real call

  • source is "real_call" and drillKey is null.
  • startedAt is when the call started; endedAt is derived as startedAt + durationSec. The list's from / to window and ordering use startedAt.
  • transcript turns carry startTime / endTime in seconds from the start of the call.
  • score.overallScore is 60–100 (0 when 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 carries compliancePercent with no complianceScorecard.
  • audioUrl is a short-lived signed link to Athos's own archived copy of the dialer recording (with audioUrlExpiresAt), or null when no archive exists — never the dialer's own URL. Archived recordings are kept for 30 days. After that the call still reads normally, with audioUrl: 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 (including compliancePercent and complianceScorecard) and scoredAt without a new call.scored delivery — 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.

On this page