Atoms webhooks — full 3-event field reference now in docs
Atoms webhooks — full 3-event field reference now in docs
The Atoms webhooks documentation now contains the full field-level schema for all three lifecycle events: pre-conversation, post-conversation, and analytics-completed. Previously the feature page listed only two of the three events and gave bullet-point payload summaries instead of complete examples.
What’s now documented per event:
- Common envelope (
url,description,event,metadata,id) and the commonmetadatafields. - Per-event
metadatafield tables with types and descriptions. - Full, copy-pasteable JSON example bodies.
- The
metadata.callDatashape (E.164 numbers,callDurationas float seconds, ISO 8601 timestamps). - The
metadata.transcript[]turn schema. - The dynamic
metadata.variablesobject with guidance to store it as JSON. - The
metadata.analytics.dispositionMetrics/successMetricsarray schema (identifier,value,confidence,reasoning,dispositionMetricPrompt,dispositionMetricType). - Event lifecycle and ordering diagram.
- Integration notes covering the
toPhone/fromPhonevstoNumber/fromNumbernormalization gotcha, dynamicvariableswarning, and unit conventions.
API spec update: eventType enum on the subscription endpoints (POST /webhooks/{id}/subscribe, WebhookAgentSubscription schema, etc.) now includes analytics-completed alongside pre-conversation and post-conversation — was 2 values, now 3.
Surfaces updated:
fern/products/atoms/pages/platform/features/webhooks.mdx— full rewrite of the canonical reference page.fern/products/atoms/pages/deep-dive/webhooks/webhooks.mdx— corrected JSON examples (fixed callDuration unit error,successMetrics→dispositionMetrics/successMetricssplit, dynamic-variables note), cross-link added to the feature page for full schema.fern/apis/atoms/openapi/openapi.yaml— 4eventTypeenum sites updated.
Agent draft-config — 14 missing fields documented + synthesizer sampleRate
Agent draft-config — 14 missing fields documented + synthesizer sampleRate
The PATCH /atoms/v1/agent/{id}/drafts/{draftId}/config request body now documents the conversation-control, voice-detection, timeout, and pronunciation fields that were already accepted by the platform but missing from the spec:
firstMessage— first message the agent sends; max 500 charactersmuteUserUntilFirstBotResponse,allowInterruptions,waitForUserToSpeakFirstinterruptionBackoffTimer(0–10 seconds)smartTurnConfig— smart turn detection withisEnabled+waitTimeInSecs(0–10)voiceDetectionConfig— VAD tuning (confidence,minVolume,triggerTimeInSecs,releaseTimeInSecs)voiceMailDetectionConfig— voicemail detection with customendText(max 200 chars)denoisingConfig,redactionConfig(PII redaction in transcripts)pronunciationDicts— array of{word, pronunciation}overridesllmIdleTimeoutConfig— separate timeouts for chat/webcall/telephony (1–300s) plusmaxRetriessessionTimeoutConfig—timeoutTimeInSecs(max 3600, default 1800)timezone— IANAlabelplusoffsetin minutes from UTC
The synthesizer schema also gains sampleRate (8000, 16000, 24000, 44100).
All fields are optional — a draft save may include any subset. Existing drafts and the POST /campaign request body shape are unchanged.
The deleteAgent operation now points to its real path: DELETE /agent/{id}/archive. The previously documented DELETE /agent/{id} returned 404 because the route does not exist. SDK method name (deleteAgent) is unchanged.
A new CI workflow (api-spec-live-test) now runs on every PR that touches fern/apis/atoms/**, fern/apis/waves/openapi/lightning-v3.1*, or fern/apis/waves/openapi/pulse-stt*. It creates a dummy agent, PATCHes every documented CreateAgentRequest field, asserts the platform’s diff endpoint reports the change, then exercises deleteAgent — catching the same class of silent drift this PR fixed.
Compliance endpoints — phone-number rentals with Plivo identity verification
Compliance endpoints — phone-number rentals with Plivo identity verification
Five new endpoints under /atoms/v1/compliance/* document the regulatory-compliance flow for renting phone numbers in countries that require identity verification (India, UAE, etc.). Submit an end-user’s documents, track approval status, and resubmit on rejection.
Three new schemas back the responses: ComplianceApplication, ComplianceRequirement, RequiredDocumentType. All endpoints require a Bearer token and are scoped to the calling organization. Rentals in countries that don’t require compliance are unaffected.
Drop-in mobile voice widgets for iOS, Android, React Native, and Flutter
Drop-in mobile voice widgets for iOS, Android, React Native, and Flutter
Every mobile stack now has a drop-in voice widget. One component call renders a floating “Ask AI” pill on your host screen and opens a bottom-sheet voice session on tap. Same agent ID across platforms, same pipecat pipeline behind the scenes.
The widgets are thin clients over the public Realtime Agent WebSocket. No WebRTC dependency, no LiveKit SDK, no framework lock-in.
- Embed a voice agent. Per-platform widget cookbooks with screenshots and consumer snippets.
- React Native widget
- iOS Swift widget
- Android Kotlin widget
- Flutter widget
Campaign scheduling, retries, and flat disposition metrics
POST /campaign now accepts scheduledAt (ISO-8601, must be in the future), maxRetries (0–10, default 3), retryDelay (1–1440 minutes, default 15), and phoneNumberIds for outbound caller-ID rotation. Campaigns created with scheduledAt start in scheduled status and auto-dial at the specified time.
Disposition metrics on postCallAnalyticsConfig now use a flat dispositionMetricType field instead of the nested dispositionValues.type shape. Both the spec and docs reflect this; existing payloads with the nested shape continue to work but the flat form is the documented one going forward.
Realtime Agent WebSocket API and WebSocket SDK
The public WebSocket protocol for talking to an Atoms agent is now documented as an AsyncAPI spec and rendered in the API reference. Connect at wss://api.smallest.ai/atoms/v1/agent/connect. Exchange input_audio_buffer.append, output_audio.delta, agent_start_talking, agent_stop_talking, and interruption events.
A JavaScript SDK for embedding the same flow in a web page is published on npm as @smallest-ai/agent-sdk. It wraps the WebSocket, microphone capture, and audio playback.
Agent versioning and post-call metrics
Agent versioning and post-call metrics
Every agent now has immutable published versions. Configuration changes flow through drafts; publishing a draft creates a new version that can be activated or rolled back. The prior in-place config mutation via PATCH /agent/{id} returns 400 on config-level fields.
Post-call disposition metrics are now a first-class field on the agent draft config. The backend extracts structured metric values from each call transcript and surfaces them on the call log.

