Overview
Moda tracks your Vapi voice AI calls by processing end-of-call report webhooks. Each call is captured with full detail, including conversation turns, tool calls, squad transfers, call analysis, and cost breakdowns.Setup
Usage
Point your Vapi webhook URL to your server and pass the payload to Moda:Supported Features
Configuration
UseProcessVapiOptions to customize the conversation and user identifiers:
conversationId defaults to call.id and userId defaults to call.customer.number.
What Moda Captures
For each Vapi call, Moda captures a structured hierarchy of data:Call-Level Data
Turn-Level Data
Troubleshooting
No data appearing?- Ensure
Moda.init()is called before processing webhooks - Call
Moda.flush()before your process exits to ensure all data is sent - Verify your Vapi webhook is configured to send
end-of-call-reportevents
- Moda handles both the
message-wrapped format (real Vapi webhooks) and the legacy flat format - If you see a call with no turns, check that your payload contains conversation data in
call.artifact.messagesor atranscriptarray
- Vapi uses
[{role, message}]format for transcripts. Moda automatically normalizes this for display.
For full SDK documentation, see the Python SDK or Node.js SDK guides.