Voice Agents: Account, Web Call, and Campaign export endpoints on the API reference
Six previously undocumented Voice Agents endpoints now render on the API reference:
Account
GET /account/get-account-details: user profile plus the orgs the user belongs toPUT /account/update-org-name: rename the org scoped by the API key (owner role)
Web Call
Voice Agents: Subscription and plan-limits endpoint on the API reference
One previously undocumented Voice Agents endpoint now renders on the API reference:
User
GET /user/subscription: the org’s plan id, credit balance, per-planlimits(agents, campaigns, numbers, daily and concurrent calls, knowledge-base sizes), and thefeaturesflags that gate capabilities
SDK 5.5.0: typed errors, waves helpers, CLI expansion, crew custom-LLM gotcha, warm/cold transfer clarified
Docs updates for the smallestai 5.5.0 release, plus the sibling platform fix for crew transfer audio.
Typed errors with actionable hints. Plan or entitlement-gated requests (HTTP 400 with “…upgrade to a higher plan…”) now raise PlanNotEntitledError (subclass of BadRequestError), importable from smallestai or the new smallestai.errors module. Error messages carry an actionable hint: 401 points at SMALLEST_API_KEY, plan-gated 400 points at upgrading, org-gated 403 points at the account team.
New docs: smallestai agents CLI, expanded SDK overview, quickstart env + layout FAQs
Three updates under Developer → Get Started.
Agents CLI reference. New page walking every command under smallestai agents (create, list, get, dashboard, phone-status, call) with argument and option tables, an end-to-end example, and the SMALLEST_API_KEY / SMALLEST_BASE_URL env-var contract.
SDK overview expanded. What is Atoms Agent Crews SDK? now covers the full picture in one page. The crew, node, and crew-code term model. The two independent versioning axes (config vs builds) with a summary table. An eight-step lifecycle from create to live call. A versioning API sample. A working end-to-end sample (server.py, assistant.py, requirements.txt). A six-item FAQ that names the common gotcha: agent-crew links to an existing agent, it doesn’t create one.
Billing read APIs available via user API key
Five billing read endpoints are now callable with your user API key (Authorization: Bearer <key>). Previously these were UI-only; use them to build credit-balance dashboards, ledger exports, or invoice pipelines outside the console.
New guide: Build your agent
New page under Create Agent → Build your agent that orders every agent configuration field by priority so you know what to fill in first.
Four tiers:
- Required. Name, prompt, voice, language, model. The minimum to hold a real conversation.
- Recommended. First message, phone number, knowledge base. Every production agent has these.
- Advanced. VAD, denoising, voicemail detection, timeouts, turn-taking, pronunciation. Reach for these when tuning a live agent.
- Publish and activate. The two-step gate that promotes changes to live traffic.
Python SDK 5.3.0 - unified speech-to-text namespace (breaking), voice cloning, Electron LLM, webhook update
smallestai==5.3.0 retires the legacy Waves STT methods and moves both file and live transcription under one client.waves.speech_to_text namespace. It also adds voice cloning, the Electron LLM completion client, and a webhook-update method. Constructor signature is unchanged: SmallestAI(api_key="...") keeps working.
Update your install
Webhooks docs: signature verification, standard variables, deletion gate
The Webhooks guide now documents behaviors previously only discoverable from the wire or from the platform source.
What’s new
- Signature verification. New section names the
X-Signatureheader, the HMAC-SHA256 (hex) algorithm, and the raw-body input rule, with runnable Python and Node samples that use constant-time comparison. - Standard variables in
metadata.variables. The platform always injectscall_id,user_number,agent_number,conversation_type,agent_gender,default_language,supported_languages,current_date,current_time,current_day, andtimezone. Custom keys from the agent’s config stack alongside these. - Signing secret via API.
GET /webhookandGET /webhook?webhookId=<id>return the secret in thedecryptedSecretKeyfield, so integrations can fetch it without opening the dashboard. - Deletion behavior.
DELETE /webhook/{id}returns 400 while the webhook is still assigned to any agent. Clear assignments viaDELETE /agent/{agentId}/webhook-subscriptions, then retry the delete. PATCH /webhook/{id}scope. Onlyendpoint,description, andheaderscan be updated in place; event subscriptions must be changed through the webhook-subscriptions endpoints or the agent editor.
smallestai SDK - STT moves to the unified /waves/v1/stt endpoints; voice cloning + Electron LLM added
The smallestai Python SDK is switching its Waves-side generator input from the legacy pulse-stt specs to the unified stt-* specs, and picking up two Waves surfaces that were sitting in the repo unwired.
What changes on the next SDK regen
- STT.
client.waves.transcribe(model="pulse"|"pulse-pro", ...)onPOST /waves/v1/stt/. Supersedes the previoustranscribe_pulsemethod, which hitPOST /waves/v1/pulse/get_textand had nomodelparameter, so it could not reach Pulse Pro. Existing production traffic on the legacy endpoint keeps working. - STT streaming. Live transcription is now surfaced from the unified
WSS /waves/v1/stt/live?model=pulsespec. - Voice cloning.
client.waves.voice_cloning.create_voice_clone(...)andlist_voice_clones(...)are generated from the voice-cloning spec. - Electron LLM.
client.electron.complete(...)onPOST /waves/v1/chat/completionswithmodel="electron". OpenAI-compatible request/response shape - you can also point any OpenAI SDK athttps://api.smallest.ai/waves/v1unchanged.
DNC endpoint restored in the OpenAPI spec
GET /dnc is back in the Atoms OpenAPI spec. The endpoint has been serving production traffic uninterrupted; the regression was spec-side only.
Background
The endpoint was originally added to the spec in the 5.1.0 completeness pass, and the Python SDK was regenerated at that point - client.atoms.dnc.list(...) has been in every shipped SDK from 5.1.0 onwards. A follow-on spec PR shortly after accidentally dropped the /dnc path block from openapi.yaml, so the API reference page stopped rendering it and any tooling that consumes the spec started missing it.
Agent Versioning v2: branch and revision API (PRO-1789)
Agent Versioning moves from the linear drafts + versions model to a branch + draft + revision model. Every editable copy of an agent is now a branch; each branch has one open draft and its own revision history; exactly one branch per agent is live and serves production traffic.
New endpoints under /agent/{id}/branches and /agent/{id}/diff. Base tags: Agent Versioning - Branches and Agent Versioning - Revisions. Full list on the migration guide.
Agent Locking retired - superseded by Agent Versioning
The Agent Locking feature is retired. Its use case (protecting a production agent from accidental edits) is fully covered by Agent Versioning: keep production traffic on a published version, iterate on a draft, and only promote when you are ready to switch traffic over.
Docs changes
- The
platform/analytics/locking.mdxpage has been removed. - The Monitor > Locking sidebar entry is gone. Monitor now matches the platform sidebar: Analytics + Evaluations.
- Any inbound links to the old Locking URLs redirect to the Versioning page.
Voice Agents docs URL migration - atoms → voice-agents, atoms-platform → platform
The Voice Agents product now lives under /voice-agents/ on the docs site, replacing the older /atoms/ prefix. The main tab’s URL also drops the brand doubling: /atoms/atoms-platform/* becomes /voice-agents/platform/*. All other tabs move too. /atoms/developer-guide/* becomes /voice-agents/developer-guide/*. Same for api-reference, mcp, integrations, developer-tools, and changelog.
SIP termination URL - automatic normalization + corrected format guidance
Importing your own phone number (POST /product/import-phone-number) is now forgiving about the SIP Termination URL format. The expected value is your provider’s bare hostname or IP, optionally with a port (for example sip.telnyx.com or 203.0.113.10:5081) - but full SIP URIs are now accepted and automatically normalized: the sip:/sips: scheme, URI parameters (such as ;transport=udp), and any user info are stripped before the trunk is created. Previously a pasted SIP URI failed the import with a provider-side error.
Realtime Agent - register-call token flow + streamed transcripts
The Realtime Agent WebSocket reference now documents the recommended token flow for browser and client-side apps: call the new POST /conversation/register-call endpoint server-side to mint a short-lived, single-use access token (30-second TTL), then open the WebSocket with that token so your API key never reaches the browser. Connecting with a raw API key directly is still fully supported for server-side and trusted clients.
Realtime Agent - text-only chat mode
The Realtime Agent WebSocket now supports a text-only session: open the connection with ?mode=chat to run a conversation with no STT, TTS, or audio. The client sends user turns via input_text.send and receives the agent’s replies as transcript events. It works for any agent and is ideal for non-browser/server-side clients and automated prompt testing.
AgentDTO - 19 customer-facing fields added to the `GET /agent/{id}` response schema
The GET /atoms/v1/agent/{id} response was already returning these 19 fields at runtime (via the platform’s response transformer), but the OpenAPI AgentDTO schema did not include them - so the auto-generated Python SDK couldn’t surface them as typed attributes, and customers had to fall through to .dict() / raw-dict access.
Each field below is documented with its type, default, min/max bounds, and nested-object shape.
Atoms API 5.1.0 completeness - 9 new endpoints + phone/KB SDK method names
Adds 9 customer-facing endpoints that the Atoms backend already serves but were not exposed in the OpenAPI spec, plus an x-fern-sdk-method-name cleanup pass on the phone-numbers and knowledge-base namespaces.
New endpoints
POST /agent/with-ai- create an agent from a natural-language brief.GET /agent/{id}/call-logs- fetch conversation logs for an agent.GET /agent/{id}/widget-config- read the chat-widget configuration for an agent.PATCH /agent/{id}/widget-config- update the chat-widget configuration for an agent.GET /agent/prompt-config- fetch prompt-config metadata (question definitions + labels) used by the agent builder.GET /dnc- list DNC entries for the organization.GET /account/get-account-details- get the authenticated user + organizations they belong to.PATCH /account/update-org-name- update the organization’s display name.GET /user/subscription- get the caller’s subscription, plan limits, and feature flags.GET /campaign/{id}/logs/export- export a campaign’s call logs as a JSON file.
Atoms API - agents, analytics, call actions, concurrency, integrations, and disposition templates
New agent endpoints (7). New endpoints for creating, configuring, and operating agents:
Python SDK 5.1.0 regen-prep - generator pin, spec field/type fixes, naming cleanup
Spec changes that prepare the next Python SDK regen so the auto-generated client (a) preserves the 4.4.7 sub-package import surface that customers still rely on and (b) picks up several missing or mistyped fields from the live API.
Generator pin
fern-python-sdk is pinned to 4.61.3 (the version 4.4.x was generated with). 5.12.12 combined with exclude_types_from_init_exports: true strips type exports from every package __init__, not just the top-level one - Fern’s own auto-generated wire tests do from smallestai.atoms.<ns> import <Type> and ImportError out. The pin is the proper fix until Fern ships a 5.x build that scopes the exclusion to top-level only.

