1. webhooks
VoiceDock
  • introduction
  • configuration
    • analysis-templates
    • custom-tools
    • sip-trunks
    • tool-templates
  • core-concepts
    • assistants
    • calls
    • phone-numbers
    • webhooks
  • features
    • ai-generation
    • autonomous-silence-handling
    • call-analysis
    • call-transfers
    • campaigns-setup
    • campaigns
    • privacy-compliance
    • voicemail-detection
    • web-calls
  • get-started
    • authentication
    • quickstart
  • guides
    • data-processing-agreement
  • integrations
    • byok-setup
    • mcp-server
    • provider-pricing
    • xai-grok-integration
  • platform
    • billing
    • dashboard-security
    • eu-data-sovereignty
    • privacy-policy
    • voice-selection-psychology
    • whitelabel
  • reference
    • error-codes
    • rate-limits
    • troubleshooting
  • sdks
    • node
  • webhooks
    • assistant-request
    • end-of-call-report
    • overview
    • security
    • status-update
    • tool-calls
Book a meeting
Linkedin
Github
📄 Documentation
🔌 API Reference🤖 MCP📦 SDK🟢 Status
📄 Documentation
🔌 API Reference🤖 MCP📦 SDK🟢 Status
  1. webhooks

end-of-call-report

Called after the call ends with a summary and optional structured analysis. This is the most commonly used webhook for CRM integrations.

When It's Called#

After the call ends, HMS Sovereign:
1.
Generates an AI summary of the conversation
2.
Runs structured analysis (if analysis_plan was configured)
3.
Sends the report to your webhook

Request Payload#

{
  "message": {
    "type": "end-of-call-report",
    "timestamp": "2025-12-13T12:05:30.000Z",
    "call": {
      "id": "5c4d030f-43e3-4e65-899e-8148521e660f",
      "type": "inbound_phone_call",
      "status": "ended"
    },
    "phone_number": {
      "number": "+31850835037",
      "name": "HMS Sovereign Demo"
    },
    "customer": {
      "number": "+31612345678"
    },
    "duration_seconds": 84,
    "summary": "Customer asked about opening hours and wanted to schedule an appointment for next week.",
    "analysis": {
      "sentiment": 8,
      "primary_topic": "Schedule appointment",
      "question_answered": true,
      "conversation_quality": "Good"
    }
  }
}

Payload Fields#

FieldTypeAlways PresentDescription
duration_secondsintegerYesTotal call duration
summarystringYesAI-generated summary
analysisobjectNoStructured analysis (if configured)

Response#

The response body is ignored. Return any 2xx status code to acknowledge receipt.

Analysis Configuration#

To get structured analysis, configure analysis_plan on your assistant:
{
  "analysis_plan": {
    "structured_data_plan": {
      "enabled": true,
      "schema": {
        "type": "object",
        "properties": {
          "sentiment": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "description": "Customer sentiment score 1-10"
          },
          "intent": {
            "type": "string",
            "enum": ["support", "sales", "complaint", "other"]
          },
          "resolved": {
            "type": "boolean",
            "description": "Whether the customer's issue was resolved"
          },
          "follow_up_needed": {
            "type": "boolean"
          }
        }
      },
      "messages": [
        {
          "role": "system",
          "content": "Analyze the call transcript according to the provided schema. Return valid JSON matching the schema."
        },
        {
          "role": "user",
          "content": "Schema: {{schema}}\n\nTranscript: {{transcript}}\n\nCall ended because: {{ended_reason}}"
        }
      ]
    },
    "min_messages_threshold": 5
  }
}

Analysis Plan Fields#

FieldDescription
structured_data_plan.enabledEnable/disable analysis
structured_data_plan.schemaJSON Schema for output
structured_data_plan.messagesPrompt template with placeholders
min_messages_thresholdMin conversation messages before running

Available Placeholders#

PlaceholderDescription
{{schema}}Your JSON Schema
{{transcript}}Full call transcript
{{ended_reason}}Why the call ended

Use Cases#

Sync call summaries to CRM
Track customer sentiment over time
Identify sales opportunities
Measure call quality
Detect escalation needs
Build analytics dashboards

Example Implementation (Node.js)#

See EndOfCallReportPayload Schema and AnalysisPlan Schema for complete details.
Modified at 2026-05-04 13:09:53
Previous
assistant-request
Next
overview
Built with