AgentDTO — 19 customer-facing fields added to the GET /agent/{id} response schema
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 was cross-referenced against the canonical schema — types, defaults, min/max bounds, and nested-object shapes were verified against the live API response.
Fields added to AgentDTO
allowInboundCall(boolean, defaulttrue) — whether the agent accepts inbound calls.phoneNumber(string array) — phone numbers attached to this agent (E.164 strings).visibleToEveryone(boolean, defaultfalse) — whether the agent is visible to all members of the organization.speechFormatting(boolean) — LLM-side speech formatting (e.g. expanding"$100"→"one hundred dollars").muteUserUntilFirstBotResponse(boolean, defaultfalse).interruptionBackoffTimer(number) — seconds to wait after an interruption before resuming.enableStyleGuide(boolean, defaulttrue).callDispositionConfig(string, default"") — free-form prompt used for call disposition classification.voiceMailDetectionConfig(object) —{ enabled, endText }.smartTurnConfig(object) —{ isEnabled, waitTimeInSecs }.voiceDetectionConfig(object) — 4 bounded numerics for VAD tuning.denoisingConfig(object) —{ isEnabled }.redactionConfig(object) —{ isEnabled }PII/PCI redaction.pronunciationDicts(array of{ word, pronunciation }) — custom pronunciation dictionary.llmIdleTimeoutConfig(object) — per-channel idle timeouts +maxRetries.sessionTimeoutConfig(object) —{ timeoutTimeInSecs }.timezone(object) —{ label, offset }.postCallAnalyticsConfig— references the existingPostCallAnalyticsConfigschema.widgetConfig(object, 24 sub-fields) — chat-widget rendering configuration (theme, copy, consent prompt).
Behavior change for SDK consumers
After the next regen lands, all 19 fields surface as typed attributes on agent responses. Existing code that read them through .dict() keeps working.
Endpoint shapes not changed
UpdateAgentRequestis intentionally restricted toname,description,avatarUrl,telephonyProductId,allowInboundCall,visibleToEveryone. Adding the other fields here would misrepresent whatPATCH /agent/{id}accepts. To update versioned fields, callers continue to go throughPATCH /agent/{id}/drafts/{draftId}/config.CreateAgentRequestalready accepted these fields._resolvedConfigalready usesadditionalProperties: true, so SDK clients can read these from the merged-config block as well.
Atoms API 5.1.0 completeness — 9 new endpoints + phone/KB SDK method names
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.
SDK method renames
x-fern-sdk-{group,method}-name annotations added across the phone_numbers and knowledge_base namespaces so the generated client uses canonical short names instead of summary-derived verbose ones.
Behavior change for SDK consumers
After the next regen, each of the 9 endpoints is callable via the auto-generated client (under client.atoms.agents.*, client.atoms.dnc.*, etc.). No changes to existing endpoint paths or request/response shapes.
Atoms API — agents, analytics, call actions, concurrency, integrations, and disposition templates
Atoms API — agents, analytics, call actions, concurrency, integrations, and disposition templates
New agent endpoints (7). New endpoints for creating, configuring, and operating agents:
Agent duplicate endpoint restructured. POST /agent/{id}/duplicate is now clearly documented at its own path. Logic is unchanged — pass targetOrganizationId (24-char hex ObjectId) to copy an agent into another org. Returns 403 if the caller is not a member of the target org, 404 if the agent or org is not found.
Draft diff response typed. The data field on GET /agent/{id}/drafts/{draftId}/diff is now typed with explicit fields: sections (keyed by section name, each with before, after, and changed) and hasChanges: boolean.
New analytics endpoints (18). A full analytics surface is now documented under the /analytics prefix:
New call actions endpoints (full CRUD). Call actions are automated behaviors fired at call lifecycle events. The action body includes a config.conditions[] array using the new CallActionCondition schema (field, operator, value):
New concurrency endpoints.
New integrations endpoints. Both endpoints return a direct JSON body rather than the standard { success, data } envelope:
New endpoint: disposition metric templates.
Python SDK 5.1.0 regen-prep — generator pin, spec field/type fixes, naming cleanup
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.
Spec field/type fixes
listAgentTemplates—_idvsid: the_id(ObjectId) and the humanidslug are distinct. Fern was aliasing_id→idand the two fields collided. Addedx-fern-property-name: object_idon_idso the generated SDK exposes.object_idand.idas separate attributes. Same fix onsinglePromptConfig._id.- Template
tools[].type: added the missing enum (end_call | transfer_call | api_call | extract_dynamic_variables | knowledge_base_search). live_transcripts.metrics: was typedobjectwithadditionalProperties: true; server actually sends an array of{processor, model, value}objects. The SDK was silently dropping 122 SSE metrics events in a 40-second call before this. Now typed as an array with the correct item shape.calls.list/calls.search—turnLatencyMetrics: brought in line withcalls.getby addingminLatency,maxLatency,transitions[], andprocessedAt.
Method-name cleanup
20 operations had verbose summary-derived method names; added explicit x-fern-sdk-group-name + x-fern-sdk-method-name annotations so the SDK surface stays readable. The worst offender — edit_draft_config_prompt_tools_post_call_metrics_voice_etc — is now agent_versioning_drafts.update_draft_config.
Renames cover: campaigns (list/create/get/delete/start_or_resume/pause), compliance (submit/resubmit), webhooks (create/delete), audience (list/get), agent_versioning_drafts (create_draft/rename_draft/discard_draft/publish_draft/update_draft_config), and agent_versioning_versions (compare_version_metrics/update_version_metadata/activate_version).
Synthesizer model enum
agent_dto.synthesizer.voiceConfig.model (and the template variant) now lists waves_lightning_v3_1 first and uses it as the default (was waves_lightning_large). The deprecated tokens (waves, waves_lightning_large, waves_lightning_large_voice_clone, waves_lightning_v2, waves_lightning_v3, waves_lightning_v2_http) remain in the enum for backwards compatibility — existing agents using them keep working — but the description flags them and notes removal once the new lineup tokens (Lightning v3.1 Pro, Pulse, Pulse Pro, Hydra) are confirmed and added.
Behavior change for SDK consumers
After the next regen lands:
agent.object_idreturns the ObjectId for an agent template (previously colliding with the slug).live_transcriptsevent handlers that readmetricsneed to iterate it as a list of objects, not look up keys on a dict.- The 4.4.x verbose method names on the operations listed above are gone — only the short names work.
No customer-facing endpoint paths or request shapes change.
Python SDK 5.1.0 — 10 new endpoints, verb-noun method renames, 19 typed agent fields
Python SDK 5.1.0 — 10 new endpoints, verb-noun method renames, 19 typed agent fields
smallestai==5.1.0 adds 10 endpoints that were already serving traffic but missing from the SDK surface, cleans up auto-generated method names across the namespaces that still had verbose summary-derived names, and surfaces 19 customer-facing fields on the agent response that the auto-generated client previously couldn’t type. Constructor signature is unchanged from 5.0.0 — SmallestAI(api_key="...") keeps working.
Update your install
New endpoints
Method renames
Verbose summary-derived method names → canonical short names. Applied across 20 operations:
The 5.0.x verbose names are removed in 5.1.0 with no deprecation alias.
Newly-typed agent response fields
GET /agent/{id} was already returning these 19 fields at runtime, but the spec didn’t include them — so the 5.0.x client couldn’t surface them as typed attributes. Each field is now a typed attribute on the agent response:
allow_inbound_call, phone_number, visible_to_everyone, speech_formatting, mute_user_until_first_bot_response, interruption_backoff_timer, enable_style_guide, call_disposition_config, voice_mail_detection_config, smart_turn_config, voice_detection_config, denoising_config, redaction_config, pronunciation_dicts, llm_idle_timeout_config, session_timeout_config, timezone, post_call_analytics_config, widget_config.
Each shape is documented in the agent response schema.
Other spec corrections
agent_templates—_id(stable identifier) andid(human-readable slug) are now distinct on the SDK side._idsurfaces astemplate.object_id;idstays astemplate.id. Previous releases aliased one over the other.live_transcripts.metrics— typed as a list of{processor, model, value}items (was untyped). The 5.0.x client silently dropped these events on deserialization.calls.list/calls.search—turn_latency_metricsnow includesmin_latency,max_latency,transitions,processed_at(parity withcalls.get).
Migration
The rename pattern is mechanical. A single repo-wide sed:
Full release notes and the SDK-side migration write-up: MIGRATION.md on smallest-python-sdk.
Revert fern-python-sdk generator pin from 4.61.3 back to 5.12.12
Revert fern-python-sdk generator pin from 4.61.3 back to 5.12.12
PR #262 pinned the Python SDK generator from 5.12.12 down to 4.61.3 to address sub-package __init__ type-export stripping under exclude_types_from_init_exports: true. An empirical regen test against 4.61.3 showed that change was the wrong fix:
- 4.61.3’s
core/is missing helpers (encode_path_param,_make_default_async_client) that our preserved /.fernignore’d files depend on — so the regen produces mypy failures it didn’t have on 5.12.12. - 4.61.3 also does not restore the sub-package type exports the downgrade was supposed to fix — the empty
__init__symptom reproduces on it.
The actual fix for preserving the sub-package import surface lives in the SDK repo itself (.fernignore the 3 sub-package __init__s with their hand-written type exports — waves is already done; webhooks and prompt_scoring will follow). That keeps the generator on a coherent 5.12.12 core/ with no version skew.
All other PR #262 / #263 spec changes (the 20 method-name renames, synthesizer enum cleanup, _id / object_id rename, live_transcripts.metrics array fix, calls turn-latency fields, 19 new AgentDTO fields) are generator-independent and stay as-is.

