Reports
When analysis completes, every call gets a structured report: a single JSON object
with a fixed, strict schema. The same shape is used to constrain the model's output and to document
what you can rely on. Fetch it from GET /v1/calls/{id}/report.
The report is a strict object — unknown top-level keys are not added. The fields below in bold are always present; the rest may be present depending on what the call contained.
Annotated example
{
"overall_score": 78, // integer 0–100, the headline grade
"score_breakdown": { // per-category integers, each 0–10
"rapport": 8,
"discovery": 7,
"needs_analysis": 7,
"value_articulation": 8,
"objection_handling": 5,
"active_listening": 8,
"talk_ratio": 6,
"next_steps": 7,
"qualification": 7,
"pricing_confidence": 5,
"closing": 6,
"compliance": 9
},
"summary": "Strong discovery and rapport; a pricing objection was raised late and left unresolved. Clear next step booked.",
"call_outcome": "follow_up_scheduled", // free-text outcome label
"close_likelihood": 62, // integer 0–100, deal-close probability
"manager_review_required": false, // boolean (optional)
"customer_needs": ["faster onboarding", "SOC 2 evidence"],
"pain_points": ["manual call review takes hours"],
"objections": [ // array of objects
{ "objection": "Price is higher than incumbent",
"raised_by": "customer",
"handled": false,
"suggested_response": "Anchor on time saved per rep per week." }
],
"buying_signals": [ // array of objects
{ "signal": "Asked about contract start dates", "strength": "high" }
],
"missed_opportunities": [ // array of strings
"Did not ask for the economic buyer to join the next call"
],
"coaching_notes": { // object, keyed coaching guidance
"priority": "Practice the pricing-objection reframe",
"detail": "Reps lose momentum when price comes up late; pre-empt it during value articulation."
},
"rep_strengths": ["Excellent rapport", "Asked layered discovery questions"],
"rep_weaknesses": ["Avoided the pricing conversation"],
"recommended_training": ["Objection handling: price"], // array of strings (optional)
"suggested_follow_up": "Email a one-page ROI summary and propose a buyer-present call Thursday.",
"crm_note": "Acme — warm. Pricing objection open. Next: ROI summary + buyer-present call.",
"compliance_alerts": [ // array of objects (empty when clean)
{ "type": "missing_disclosure", "severity": "low",
"detail": "Call recording disclosure not clearly stated." }
],
"transcript_highlights": [ // array of objects (optional)
{ "speaker": "customer", "quote": "If this saves my team Fridays, that's huge.",
"label": "buying_signal", "t": 742 }
],
"timeline": [ // array of objects, call structure over time
{ "t": 0, "phase": "rapport" },
{ "t": 180, "phase": "discovery" },
{ "t": 900, "phase": "pricing" }
],
"confidence_level": "high" // "low" | "medium" | "high"
}
Fields
| Field | Type | Description |
|---|---|---|
overall_score * | integer 0–100 | The headline quality grade for the call. |
score_breakdown * | object | Map of category → integer 0–10. Covers the ~12 evaluation categories (rapport, discovery, needs analysis, value articulation, objection handling, active listening, talk ratio, next steps, qualification, pricing confidence, closing, compliance). |
summary * | string | One-paragraph human summary of the call. |
call_outcome * | string | Outcome label, e.g. follow_up_scheduled, closed_won, no_decision. |
close_likelihood * | integer 0–100 | Estimated probability the deal closes. |
manager_review_required | boolean | True if a human manager should review this call. |
customer_needs | string[] | Needs the customer expressed. |
pain_points | string[] | Problems the customer is trying to solve. |
objections * | object[] | Each objection raised, who raised it, whether it was handled, and a suggested response. |
buying_signals * | object[] | Positive intent signals with a strength. |
missed_opportunities * | string[] | Things the rep should have done but didn't. |
coaching_notes * | object | Actionable coaching guidance for the rep. |
rep_strengths * | string[] | What the rep did well. |
rep_weaknesses * | string[] | Where the rep needs to improve. |
recommended_training | string[] | Suggested training topics. |
suggested_follow_up * | string | Recommended next action / follow-up. |
crm_note * | string | A short note ready to write back into your CRM. |
compliance_alerts * | object[] | Compliance issues detected (empty array when clean). Each has a type, severity, and detail. |
transcript_highlights | object[] | Notable quotes with speaker, label and timestamp. |
timeline * | object[] | Call structure over time — phase markers with timestamps. |
confidence_level * | enum | The model's confidence in the analysis: low, medium, or high. |
* Always present.
Building an agent on top of these fields? See AI agents for which fields to act on and a ready-to-use tool schema.