Call Analytics API documentation

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

FieldTypeDescription
overall_score *integer 0–100The headline quality grade for the call.
score_breakdown *objectMap 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 *stringOne-paragraph human summary of the call.
call_outcome *stringOutcome label, e.g. follow_up_scheduled, closed_won, no_decision.
close_likelihood *integer 0–100Estimated probability the deal closes.
manager_review_requiredbooleanTrue if a human manager should review this call.
customer_needsstring[]Needs the customer expressed.
pain_pointsstring[]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 *objectActionable coaching guidance for the rep.
rep_strengths *string[]What the rep did well.
rep_weaknesses *string[]Where the rep needs to improve.
recommended_trainingstring[]Suggested training topics.
suggested_follow_up *stringRecommended next action / follow-up.
crm_note *stringA 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_highlightsobject[]Notable quotes with speaker, label and timestamp.
timeline *object[]Call structure over time — phase markers with timestamps.
confidence_level *enumThe 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.