Skip to main content

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

Use ProcessVapiOptions to customize the conversation and user identifiers:
If not provided, 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-report events
Call appears with no turns?
  • 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.messages or a transcript array
Transcript not captured?
  • 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.