For AI agents: a documentation index is available at the root level at /llms.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
LogoLogo
Atoms PlatformProduct OverviewDeveloper GuideAPI ReferenceMCPIntegrationsDeveloper ToolsChangelog
Atoms PlatformProduct OverviewDeveloper GuideAPI ReferenceMCPIntegrationsDeveloper ToolsChangelog
    • Changelog
  • Changelog
  • June 11, 2026
  • June 2, 2026
  • May 29, 2026
  • May 28, 2026
  • May 25, 2026
  • May 22, 2026
  • May 20, 2026
  • May 20, 2026
  • May 20, 2026
  • May 15, 2026
  • May 10, 2026
  • May 5, 2026
  • May 4, 2026
  • April 24, 2026
  • April 21, 2026
  • April 21, 2026
  • April 20, 2026

Changelog

June 11, 2026
June 11, 2026

June 2, 2026
June 2, 2026

May 29, 2026
May 29, 2026

May 28, 2026
May 28, 2026

May 25, 2026
May 25, 2026

May 22, 2026
May 22, 2026

May 20, 2026
May 20, 2026

May 20, 2026
May 20, 2026

May 20, 2026
May 20, 2026

May 15, 2026
May 15, 2026

Older posts

Next
Built with
Voice AgentsModels
Voice AgentsModels

Versioning lifecycle developer guide + outbound caller-ID note

A new developer-guide page documents the full create → draft → publish → activate flow against the public API in curl + Python, with the seven endpoints involved and six common pitfalls (publish does not auto-activate; activate fails inside the security-check window; etc.).

The API reference for POST /agent now points to the drafts flow instead of the deprecated PATCH /workflow/{workflowId} path.

The API reference for POST /conversation/outbound now documents the caller-ID fallback: if you omit fromProductId and the agent has no telephony product attached, the call dispatches from a Smallest-managed Plivo trunk with a default outbound number. The response is still 200 + conversationId, but the recipient sees the default number, not yours. For production traffic, pass fromProductId explicitly or attach a phone-number product to the agent.

  • Versioning Lifecycle (Developer Guide)
  • Agent Versioning (Dashboard)

New endpoint — prompt scoring

POST /atoms/v1/prompt-scoring/score scores a single-prompt agent’s system prompt across 11 quality dimensions using Gemini-based analysis and returns an overall score (0–100), grade, token-density band, estimated first-token latency overhead, and per-dimension breakdowns.

FieldDescription
overall_score0–100 quality score
overall_gradeExcellent / Good / Needs Work / Poor
bandToken density: lean (under 4K tokens) / normal (4K–9.9K) / heavy (10K–14.9K) / overweight (15K+)
estimated_ttft_overhead_msEstimated first-token latency overhead from prompt length
dimensions[]11 scored dimensions with tier, level, title, description, and evidence_span

Pass exactly one of versionId (published version) or draftId (agent draft) in the request body. The endpoint requires a minimum Member role and deducts 1 credit per call. Re-submitting an unchanged prompt returns a 400 — retrieve the cached result via GET /agent/{id} instead. Only single_prompt agents are supported; workflow-graph agents return 400.

→ Prompt Scoring reference

Atoms API reference — iteration 1 updates

Agent GET — draft and version config resolution. GET /agent/{id} now accepts ?draftId=<id> and ?versionId=<id> to resolve _resolvedConfig from a specific draft or published version instead of the active config. The response includes _configSource: "draft" | "version" | "active" when either param is used.

Richer call log fields. The List Calls and Get Call responses now include per-call latency statistics (average, median, min, max, per-turn array), auto-generated call summary, evaluated disposition metrics with confidence scores, discounted cost, agent version info (versionId, versionNumber), call type enum (telephony_inbound, telephony_outbound, webcall), and retry tracking fields (retryCallId, retryAttemptNumber).

Agent list filters expanded. GET /agent accepts type, sortField, sortOrder, and archived query parameters.

Agent templates enriched. Template objects now include industry, useCase, callType, workflowType, region, trending, and defaultLanguage fields. The list endpoint accepts a region filter.

New endpoint: archive / unarchive agent. PATCH /agent/{id}/archive toggles an agent’s archived state. Pass ?on=false to unarchive.

Campaigns — filter and enriched response. GET /campaigns now accepts status and name (search) query filters. Campaign objects include new fields: pausedAt, cancelledCalls, errorMessage, and failedAt. The start-campaign endpoint is now idempotent (“Start or resume a campaign”).

Webhooks — replace semantics and single-fetch. The webhook subscription endpoint now replaces all subscriptions for an agent (previously create-only). GET /webhooks accepts an optional ?id= param to retrieve a single webhook by ID.

Audiences — enriched response. Audience objects now include currentMemberCount, hasActiveCampaigns, and activeCampaigns. Error responses distinguish 403 (audience belongs to a different org) from 404 (not found).

Live transcripts SSE — lifecycle events documented. sse_init and sse_close events are now documented alongside the existing transcript event types. Both include event_type and event_time; all other events include event_type, event_id, timestamp, and call_id.

WebSocket query parameters clarified. sample_rate now documents its valid values (8000, 16000, 24000, 48000) and default (24000). The mode parameter (webcall | chat, default webcall) is now included in the connection reference with valid-value enforcement. Connection error codes (401, 503) are documented.

Compliance — 502 errors documented. All compliance endpoints now document a 502 Bad Gateway response for cases where Plivo’s compliance API is unavailable.

→ Realtime Agent reference

STT billing feature IDs restructured, Pulse Pro pricing live

Billing feature IDs for Pulse and Pulse Pro have been restructured to namespace by model and transport. The old single-bucket IDs (feature-waves-stt, feature-waves-stt-pro, feature-waves-stt-pro-rpm) are retired; replacements are model + transport specific (for example feature-waves-stt-pulse-non-streaming, feature-waves-stt-pulse-streaming).

Per-minute customer rates on the Standard plan:

ModelTransportRate
PulseStreaming (WebSocket)$0.006 / min
PulseNon-streaming (HTTP)$0.0035 / min
Pulse ProNon-streaming (HTTP)$0.004 / min
Pulse ProStreamingNot available; endpoint returns 400

Standard plan defaults: 25 RPM per model on non-streaming, 100 concurrent WebSocket sessions. Enterprise: unlimited, configurable per-customer.

The Pulse Pro entitlement is gated by plan; Standard customers who need access can upgrade in the console or contact support.

  • Pulse Pro model card
  • Unified STT endpoint changelog

Default voice activity detection — releaseTimeInSeconds tuned for cleaner turn handoff

The default for releaseTimeInSeconds in DEFAULT_VOICE_DETECTION_CONFIG has been retuned based on transcript-level analysis of how often the model and the user step on each other.

What this affects:

  • Agents created after this change pick up the new default automatically.
  • Agents created before are unchanged — their explicit value lives on the saved config. Re-saving the agent config in the console refreshes them to the new default.
  • The change reduces premature turn handoffs (agent cutting off the user mid-sentence) without noticeably increasing agent response latency.

Migration: no action. To opt existing agents into the new default, re-save their config in the Atoms console.

Agent config screen — redesigned layout

The agent configuration screen in the Atoms console has been redesigned. Same fields, same data model — clearer layout, faster editing, inline validation.

What’s new in the UI:

  • Configuration is grouped into focused panels (Identity, Voice, LLM, Tools, Webhooks, Compliance) instead of one long form.
  • Inline validation surfaces errors as you type instead of after submit.
  • Help text and links to the relevant docs page live next to each field.
  • Mobile / narrow-viewport layout is now usable end-to-end.

Migration: no action — existing agents are unchanged. Open any agent in the console to see the new layout.

Agent SDK — agent_log and agent_error events are now persisted and visible on call detail

Two new event types are now first-class on Atoms calls:

EventWhat it carries
agent_logCustom log messages your agent emits during the call (severity, message, optional tags). Useful for tracing what happened inside a turn.
agent_errorStructured errors your agent decides to raise (error code, message, optional details). Useful for catching tool / integration failures without crashing the call.

Where they show up:

  • Persisted via the Atoms relay into the call event log.
  • Rendered on the Call Detail page next to the transcript timeline, so you can see exactly when each log / error fired in the conversation.
  • Available via the existing webhook subscriptions if you’re consuming events programmatically.

Migration: no action — additive. Emit agent_log / agent_error from your agent code to start using them.

Python SDK — SmallestAI(api_key=...) (was token=...) and SMALLEST_API_KEY env var

The SmallestAI and AsyncSmallestAI constructors in the Python SDK now take api_key= (was token=) and default to reading SMALLEST_API_KEY from the environment (was SMALLEST_AI_TOKEN). This aligns the auto-generated client with everything else in the ecosystem:

  • The hand-written helpers (smallestai.atoms.helpers.{call,campaign,audience,kb}) already take api_key= and read SMALLEST_API_KEY.
  • Every cookbook .env.sample exports SMALLEST_API_KEY.
  • The dashboard at app.smallest.ai/dashboard/api-keys calls the value an “API key”.

Before:

1from smallestai import SmallestAI
2client = SmallestAI(token="sk_…") # or set SMALLEST_AI_TOKEN

After:

1from smallestai import SmallestAI
2client = SmallestAI(api_key="sk_…") # or set SMALLEST_API_KEY

Breaking change. SmallestAI(token=…) and SMALLEST_AI_TOKEN are no longer accepted. Both names shipped only in 4.4.x and were undocumented in any user-facing page, so they’re dropped without a deprecation window. Any in-flight 4.4.x code calling SmallestAI(token=…) needs a one-line rename to api_key=….

Spec update: fern/apis/unified/generators.yml — the bearer-auth token.env value is now SMALLEST_API_KEY, so the next Python SDK regen produces a client with the new kwarg/env var natively (the SDK PR is a hand-patch on top of the Fern-generated client.py that lands the change immediately as 4.4.5).

Realtime Agent — per-call prompt variables

The Realtime Agent WebSocket now accepts a variables query parameter — a URL-encoded JSON object that overrides the agent’s defaultVariables for that session, matching the variables field already exposed on the Start Outbound Call REST endpoint. Each connection scopes its own variables.

Reserved keys (call_id, conversation_type, user_number, agent_number) are stripped server-side.

→ Realtime Agent reference

Pro voices in the agent voice picker — 39 voices across American, British, and Indian accents

The agent voice picker now has a Pro filter chip alongside V3.1 / Others. Selecting it shows the new Lightning v3.1 Pro catalog — 39 voices across American, British, and Indian accents (both Male and Female) running on a dedicated inference pool.

How it works: pick any Pro voice in your agent’s voice configuration and save. Atoms transparently routes that agent’s TTS to the Lightning v3.1 Pro pool. No changes to your code, your webhook handlers, or how you place a call.

Languages: Indian Pro voices speak English and Hindi (with mid-utterance code-switching). British and American Pro voices speak English. The voice picker shows the supported languages per voice.

Switching between Pro and standard voices: changing voice on an existing agent (e.g., Meher → Aarush) updates the routing automatically — the agent reverts to the default Lightning v3.1 pool.

See the Lightning v3.1 Pro launch entry on the models changelog for the full catalog and underlying TTS API details.