Skip to content

Call logs & recordings

After a call, read what happened through client.atoms.calls (or the smallestai calls CLI).

One call

call = client.atoms.calls.get(id="CALL-...").data
print(call.status, call.duration, call.recording_url)
for turn in call.transcript or []:
    print(turn.role, ":", turn.content)

Fields on .data: status, type, duration, from_, to, transcript, events, recording_url, recording_dual_url, call_cost, disconnection_reason, call_failure_reason.

Recent calls

logs = client.atoms.calls.list(agent_ids=agent_id, limit=20).data.logs
for item in logs:
    print(item.call_id, item.type, item.status, item.duration)

CLI

smallestai calls list --agent-id <id> --limit 20
smallestai calls get CALL-...
smallestai calls transcript CALL-...
smallestai calls recording CALL-...

Live events (while a call is in progress)

Stream a call's events as they happen — transcript turns, per-turn latency, node transitions, tool calls, and errors:

smallestai calls events CALL-...               # full live event stream
smallestai calls transcript CALL-... --follow  # just the conversation, live

The call must be in progress; for a finished call use calls transcript (no --follow) or calls get. Add --json to emit one raw event per line.

Reading a transfer from the logs

A transfer produces a second transfer leg. If that leg shows status: no_answer / timeout with duration: 0, the transfer fired but the destination did not pick up — dial a number a human or agent will answer. Crew calls are recorded too (recording_url on the call).