Observability & Analytics

Call Logging

By Vadim Kouznetsov, Founder of BubblyPhone · Last updated April 5, 2026

Call logging is the process of recording structured metadata about every call that passes through a phone system — who called whom, when, for how long, and with what outcome — without necessarily recording the audio itself. The result is a Call Detail Record (CDR), a structured row of data that forms the foundation of billing, compliance, and analytics for any telephony system.

Call logging is not call recording

These two terms are often used interchangeably, and they should not be. Call logging captures metadata: timestamps, phone numbers, durations, status codes, costs, which agent handled the call. Call recording captures content: the actual audio of the conversation, and often a transcript derived from it. The distinction matters for three reasons.

  • Compliance. Metadata and audio are regulated differently. A CDR log is typically required for billing and tax purposes in most jurisdictions. Audio recording is often subject to wiretap laws, consent rules, and sector-specific regulations (HIPAA, PCI-DSS, MiFID II).
  • Storage.Metadata is cheap and small — a CDR row is under a kilobyte. Audio is expensive — a 5-minute call in Opus is ~1.5 MB, and 30,000 calls per month is ~45 GB.
  • Access patterns. You query metadata constantly (billing, dashboards, reports). You access audio only when investigating a specific call. Good systems store them in different places with different retention policies.

What goes into a call log

The minimum set of fields in a modern call log, inherited from telecom CDR standards and extended for AI-era workflows:

  • Call ID— a unique identifier for the call
  • From / To numbers— the caller and callee in E.164 format
  • Direction — inbound or outbound
  • Start time, answer time, end time— precise timestamps for each stage
  • Duration— total call length and billable duration (usually rounded up to the minute)
  • Status— completed, no-answer, busy, failed, cancelled
  • Hangup cause— who ended the call and why
  • Cost— per-call charge based on destination rate
  • Carrier and route— which telephony provider carried the call

For AI phone agents specifically, the log is usually extended with:

  • Model ID— which LLM handled the call
  • Mode— webhook or streaming
  • Tool invocations— which tools the AI called during the conversation
  • Transfer target — if the call was transferred, to whom
  • Outcome— structured label for what the call accomplished

From SS7 to REST APIs

Call logging dates back to the 1960s when telephone exchanges started generating Automatic Message Accounting (AMA) tapes to support billing. The format evolved into the Call Detail Record as we know it: a single fixed-format row emitted by a switch whenever a call ended. In the SS7 era, CDRs were the only visibility most operators had into what their network was doing.

Modern telephony APIs return call logs as JSON from a REST endpoint. The underlying data model is the same CDR, just expressed differently. If you know what fields a 1980s PBX logged, you can predict 90% of what a 2026 voice API returns.

Retention requirements vary by industry

Call log retention is not optional for most businesses. Healthcare providers in the US subject to HIPAA must retain call logs for at least 6 years. Financial services firms regulated by FINRA need 3 years. Airlines retain CDRs for billing reconciliation. Tax authorities in most jurisdictions treat CDRs as business records that must be kept for 5 to 7 years.

The good news is that metadata retention is easy — a decade of CDRs for a busy AI phone agent system fits comfortably in a few gigabytes of database storage. The hard part is making sure the logs are immutable and auditable, not that they take up space.

Call logs in BubblyPhone Agents

Every call made or received through BubblyPhone Agents automatically generates a full call log, queryable via the REST API. The endpoint returns all CDR fields plus AI-specific metadata:

GET /api/v1/calls returns a paginated list of calls with filters for direction, status, date range, phone number, and model ID.

GET /api/v1/calls/{id} returns a single call log with every field, including tool invocations and transfer history.

For deeper analysis, pair the call log with the call analysis pipeline to extract structured outcomes from the transcript.

Further reading