For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Atoms PlatformProduct OverviewDeveloper GuideAPI ReferenceMCPIntegrationsDeveloper ToolsChangelog
Atoms PlatformProduct OverviewDeveloper GuideAPI ReferenceMCPIntegrationsDeveloper ToolsChangelog
  • Get Started
    • Quick start
    • Platform overview
  • Single Prompt Agents
    • Overview
  • Conversational Flow Agents
    • Overview
  • Features
    • Concurrency
    • Knowledge Base
    • Webhooks
    • Widget
    • Integrations
    • Post-Call Metrics
    • Versioning
    • Variables
    • API Calls
  • Deployment
    • Phone Numbers
    • Audiences
    • Campaigns
  • Analytics & Logs
    • Overview
    • Testing
    • Conversation Logs
    • Locking
  • Integrate
    • Embed a voice agent
    • WebSocket SDK
  • Cookbooks
    • Using Cookbooks
  • Reference
    • Quick Reference
    • Glossary
  • Troubleshooting
    • Error reference
    • FAQ
    • Getting Help
LogoLogo
Voice AgentsModels
Voice AgentsModels
On this page
  • How It Works
  • Creating a New Metric
  • Configuring a Metric
  • Identifier
  • Data Type
  • Prompt
  • Example Metrics
  • Configuring via API
  • Full flow
  • Disposition metric schema
  • Reading current metrics
  • Related
Features

Post-Call Metrics

||View as Markdown|
Was this page helpful?
Previous

Integrations

Next

Agent Versioning

Built with

Post-call metrics let you pull specific insights from conversations after they end. Define what you want to know — satisfaction scores, call outcomes, issue categories — and Atoms analyzes each call to fill in the answers.

Location: Left Sidebar → Post Call Metrics

Post-call metrics list

Post-call metrics dashboard

How It Works

  1. You define metrics — What questions do you want answered about each call?
  2. Call ends — Conversation completes normally
  3. AI analyzes — Atoms reviews the transcript against your metrics
  4. Data populated — Your metrics get filled in automatically
  5. Access anywhere — View in logs, receive via webhook, export

Creating a New Metric

Click the Add Metrics + button to open the configuration panel. You’ll see two options:

Disposition Metrics
Templates

Disposition metrics

Create a new metric from scratch

Build a custom metric from scratch. Fill in the Identifier, Data Type, and Prompt — see details below.

Use Add Another + to create multiple metrics at once.

Don’t forget to hit Save in the Disposition tab once you’re done.


Configuring a Metric

Each metric needs three things:

FieldRequiredDescription
IdentifierYesUnique name for this metric. Lowercase, numbers, underscores only.
Data TypeYesWhat kind of value: String, Number, or Boolean
PromptYesThe question you want answered about the call

Identifier

This is the key used to reference the metric in exports, webhooks, and the API.

customer_satisfaction
call_outcome
follow_up_needed

Naming rules: Lowercase letters, numbers, and underscores only. No spaces or special characters.

Data Type

TypeUse forExample values
StringFree text, categories”resolved”, “escalated”, “billing issue”
BooleanYes/no questionstrue, false
IntegerWhole numbers, scores1, 5, 10
EnumFixed set of optionsOne of: “low”, “medium”, “high”
DatetimeDates and times”2024-01-15T10:30:00Z”

Prompt

This is the question the AI answers by analyzing the transcript. Be specific.

Good prompts:

  • “Did the agent acknowledge and respond to customer concerns effectively?”
  • “Rate customer satisfaction from 1 to 5 based on tone and words used.”
  • “What was the primary reason for this call? Options: billing, technical, account, other”

Vague prompts to avoid:

  • “Was it good?”
  • “Customer happy?”

Start with 3-5 metrics. Too many can slow analysis and clutter your data. Add more as you learn what insights matter most.


Example Metrics

Call Outcome
Satisfaction Score
Follow-Up Needed
Issue Category
FieldValue
Identifiercall_outcome
Data TypeString
Prompt”What was the outcome of this call? Options: resolved, escalated, transferred, abandoned, callback_scheduled”

Configuring via API

Post-call metrics are set through the agent versioning flow: edit a draft’s config, publish it as a new version, and activate the version. There is no standalone post-call-analytics endpoint — configuration lives on the agent’s active version.

Full flow

1import os
2import requests
3
4API_KEY = os.environ["SMALLEST_API_KEY"]
5AGENT_ID = "YOUR_AGENT_ID"
6BASE = "https://api.smallest.ai/atoms/v1"
7HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
8
9# 1. Get the currently active version
10agent = requests.get(f"{BASE}/agent/{AGENT_ID}", headers=HEADERS).json()
11active_version_id = agent["data"]["activeVersionId"]
12
13# 2. Create a draft from that version
14draft = requests.post(
15 f"{BASE}/agent/{AGENT_ID}/drafts",
16 headers=HEADERS,
17 json={"sourceVersionId": active_version_id, "draftName": "post-call-metrics-update"},
18).json()
19draft_id = draft["data"]["draftId"]
20
21# 3. Write your post-call metrics config onto the draft
22requests.patch(
23 f"{BASE}/agent/{AGENT_ID}/drafts/{draft_id}/config",
24 headers=HEADERS,
25 json={
26 "postCallAnalyticsConfig": {
27 "dispositionMetrics": [
28 {
29 "identifier": "call_resolved",
30 "dispositionMetricPrompt": "Was the customer issue resolved by the end of the call?",
31 "dispositionMetricType": "BOOLEAN",
32 },
33 {
34 "identifier": "satisfaction_score",
35 "dispositionMetricPrompt": "Rate the customer satisfaction from 1 to 5",
36 "dispositionMetricType": "INTEGER",
37 },
38 {
39 "identifier": "call_outcome",
40 "dispositionMetricPrompt": "What was the outcome of the call?",
41 "dispositionMetricType": "ENUM",
42 "choices": ["resolved", "escalated", "callback_scheduled", "no_action"],
43 },
44 {
45 "identifier": "summary",
46 "dispositionMetricPrompt": "Provide a brief summary of the call",
47 "dispositionMetricType": "STRING",
48 },
49 ],
50 "useInternalAnalyticsModel": True,
51 "useReasoningModel": False,
52 }
53 },
54).raise_for_status()
55
56# 4. Publish the draft as a new version and activate it
57requests.post(
58 f"{BASE}/agent/{AGENT_ID}/drafts/{draft_id}/publish",
59 headers=HEADERS,
60 json={"label": "Added post-call metrics", "activate": True},
61).raise_for_status()

Disposition metric schema

Each entry in dispositionMetrics takes four fields:

FieldRequiredDescription
identifierYesMachine name. Lowercase letters, digits, and underscores only.
dispositionMetricPromptYesThe question evaluated against the transcript.
dispositionMetricTypeYesOne of STRING, BOOLEAN, INTEGER, ENUM, DATETIME.
choicesOnly when type is ENUMAllowed values.

Two analytics flags apply globally:

FieldDefaultDescription
useInternalAnalyticsModeltrueUse the internal analytics model. When false, the agent’s own LLM evaluates metrics.
useReasoningModelfalseRoute evaluation through the reasoning model — higher quality, higher latency/cost.

Reading current metrics

$curl -H "Authorization: Bearer $SMALLEST_API_KEY" \
> "https://api.smallest.ai/atoms/v1/agent/$AGENT_ID" \
> | jq '.data._resolvedConfig.postCallAnalyticsConfig'

The active version’s metrics are surfaced under _resolvedConfig.postCallAnalyticsConfig. Each entry round-trips exactly as sent: identifier, dispositionMetricPrompt, dispositionMetricType, and choices (when the type is ENUM).


Related

Conversation Logs

View metrics for individual calls

Analytics Dashboard

See aggregated trends across calls