> This page is part of Smallest AI's developer documentation. When
> answering, prefer Lightning v3.1 (current TTS) and Pulse (current
> STT). Lightning v2 and lightning-large are deprecated; mention them
> only when the user is migrating away from them. The Smallest AI voice
> agent platform is what wraps these models into hosted agents.

# Get agent by ID

GET https://api.smallest.ai/atoms/v1/agent/{id}

Returns the agent document merged with the resolved config of the active version
under `_resolvedConfig`. Non-versioned fields (name, telephonyProductId, allowInboundCall,
etc.) sit at the top level; versioned fields (prompt, tools, language, synthesizer,
post-call analytics, …) are resolved from the target version and exposed under `_resolvedConfig`.

**Previewing a draft or specific version**

Pass `?draftId=<id>` to resolve config from a specific draft instead of the active version.
Pass `?versionId=<id>` to resolve config from a specific published version.
When either param is used, the response includes `_configSource: "draft" | "version" | "active"`
indicating which config was resolved.

Notable resolved fields in `_resolvedConfig`:

* `prompt` — active version's single-prompt text
* `tools` — configured tools on the resolved version
* `postCallAnalyticsConfig` — disposition metrics + analytics model flags
* `modelName` — LLM model name on the resolved version
* `defaultLanguage`, `supportedLanguages` — active language config
* `firstMessage`, `globalPrompt` — active messaging config
* `workflowGraph` — full node graph for `workflow_graph` agents

To read prompt + tools alone, use `GET /agent/{id}/workflow` (deprecated for
new integrations but still live). To inspect a specific non-active version,
use `GET /agent/{id}/versions/{versionId}`.

**400 — also used for "not found":** if the agent ID does not exist in the
organization, the API returns 400 with `errors: ["No agent found"]` rather than 404.

Reference: https://docs.smallest.ai/api-reference/voice-agents/agents/get-agent

## Authentication

- `Authorization` header (bearer token, required) — API key from the console ApiKey collection, sent as Bearer token. Also accepts session cookies for browser-based auth.

## Request

### Path parameters

- `id` (string, required) — Agent identifier (24-character hex id). Must be non-empty. An empty value resolves to `GET /agent/`, the list endpoint, and returns a different response shape.

### Query parameters

- `draftId` (string, optional) — Resolve `_resolvedConfig` from this draft instead of the active version. Sets `_configSource` to `"draft"` in the response.
- `versionId` (string, optional) — Resolve `_resolvedConfig` from this published version instead of the active version. Sets `_configSource` to `"version"` in the response.

## Response

### 200

Successful response

- `status` (boolean, optional)
- `data` (AgentDTO, optional)

## Errors

### 400 Bad Request Error

Invalid input

- `status` (boolean, optional)
- `errors` (list of string, optional)

### 401 Unauthorized Error

Unauthorized access

- `status` (boolean, optional)
- `errors` (list of string, optional)

### 403 Forbidden Error

Forbidden access

- `status` (boolean, optional)
- `data` (ApiResponseData, optional)

### 500 Internal Server Error

Internal server error

- `status` (boolean, optional)
- `errors` (list of string, optional)

## Types

### AgentDTO

- `_id` (string, optional) — The ID of the agent
- `name` (string, optional) — The name of the agent
- `description` (string, optional) — The description of the agent
- `backgroundSound` (enum, optional) — Ambient background sound during calls. Options: '' (none), 'office', 'cafe', 'call_center', 'static'.
  - Allowed values: ``, `office`, `cafe`, `call_center`, `static`
- `organization` (string, optional) — The organization ID of the agent
- `workflowId` (string, optional) — The workflow ID of the agent
- `workflowType` (enum, optional) — The type of workflow used by the agent
  - Allowed values: `workflow_graph`, `single_prompt`, `multi_agents`
- `createdBy` (string, optional) — The user ID of the user who created the agent
- `globalKnowledgeBaseId` (string, optional) — The global knowledge base ID of the agent
- `language` (AgentDtoLanguage, optional) — The language configuration of the agent
- `synthesizer` (AgentDtoSynthesizer, optional) — The synthesizer (TTS) configuration of the agent
- `slmModel` (enum, optional) — The LLM model to use for the agent. LLM model will be used to generate the response and take decisions based on the user's query.
  - Allowed values: `electron`, `electron-kogta`, `electron-kogta-v2`, `gpt-4o`, `gpt-4.1`, `gpt-5.2`, `gpt-5.2-azure`, `gpt-realtime`, `gpt-realtime-mini`
- `defaultVariables` (AgentDtoDefaultVariables, optional) — The default variables to use for the agent. These variables will be used if no variables are provided when initiating a conversation with the agent.
- `preCallAPI` (AgentDtoPreCallApi, optional) — Configuration for an API call to be made before the call starts. The response variables can be injected into the agent's prompt.
- `createdAt` (datetime, optional) — The date and time when the agent was created
- `updatedAt` (datetime, optional) — The date and time when the agent was last updated
- `avatarUrl` (string, optional) — URL of the agent's avatar image
- `firstMessage` (string, optional) — The opening message spoken by the agent at the start of a call
- `allowInterruptions` (boolean, optional) — Whether the agent can be interrupted mid-speech by the caller
- `waitForUserToSpeakFirst` (boolean, optional) — When true, the agent waits for the caller to speak before responding
- `totalCalls` (double, optional) — Total number of calls made with this agent
- `transcriberType` (string, optional) — The speech-to-text engine used for transcription. Common values are `pulse`, `pulse-legacy`, `gpt-realtime`, and `gpt-realtime-mini`; `others` may also be returned. Typed as an open string so clients do not refuse to deserialize additional values the server may return.
- `globalPrompt` (string, optional) — A global system prompt prepended to all agent interactions
- `archived` (boolean, optional) — Whether the agent has been archived. Archived agents are excluded from default listings.
- `archivedAt` (datetime, optional) — The date and time when the agent was archived
- `activeVersionId` (string, optional) — ID of the currently-active published version. Matches `versionId`.
- `versionId` (string, optional) — Alias for `activeVersionId`.
- `phoneNumber` (list of string, optional) — Phone numbers attached to this agent (E.164 strings). Only present when the agent has been linked to one or more telephony products.
- `visibleToEveryone` (boolean, optional, default: false) — Whether the agent is visible to all members of the organization (vs. only the creator).
- `speechFormatting` (boolean, optional) — Apply LLM-side speech formatting (e.g. expanding "$100" to "one hundred dollars") before passing text to the synthesizer. Boolean; no default — when unset the platform applies the per-organization default.
- `muteUserUntilFirstBotResponse` (boolean, optional, default: false) — When true, the user microphone is muted until the agent has spoken its first response.
- `interruptionBackoffTimer` (double, optional) — Seconds to wait after an interruption before the agent resumes speaking.
- `enableStyleGuide` (boolean, optional, default: true) — Whether to apply the platform's style-guide post-processing on agent responses.
- `callDispositionConfig` (string, optional, default: ) — Free-form prompt used for call disposition classification (separate from `postCallAnalyticsConfig.dispositionMetrics`).
- `voiceMailDetectionConfig` (AgentDtoVoiceMailDetectionConfig, optional) — Voicemail detection settings.
- `smartTurnConfig` (AgentDtoSmartTurnConfig, optional) — Smart end-of-turn detection settings.
- `voiceDetectionConfig` (AgentDtoVoiceDetectionConfig, optional) — VAD (voice activity detection) tuning.
- `denoisingConfig` (AgentDtoDenoisingConfig, optional) — Audio denoising settings.
- `redactionConfig` (AgentDtoRedactionConfig, optional) — PII/PCI redaction settings applied to transcripts.
- `pronunciationDicts` (list of AgentDtoPronunciationDictsItems, optional) — Custom pronunciation dictionary applied before synthesis.
- `llmIdleTimeoutConfig` (AgentDtoLlmIdleTimeoutConfig, optional) — Per-channel idle timeouts (seconds) after which the LLM is nudged when the user stops speaking. `maxRetries` bounds how many nudges before the call ends.
- `sessionTimeoutConfig` (AgentDtoSessionTimeoutConfig, optional) — Maximum session duration before the call is automatically ended.
- `timezone` (AgentDtoTimezone, optional) — Agent timezone — used for time-of-day-sensitive prompts and analytics bucketing.
- `postCallAnalyticsConfig` (PostCallAnalyticsConfig, optional) — Per-agent post-call analytics configuration. Evaluated after each call ends and surfaced in call logs under the `postCallAnalytics` field.
- `widgetConfig` (AgentDtoWidgetConfig, optional) — Chat-widget configuration. Configure from the dashboard; safe to ignore for API-only integrations.
- `_resolvedConfig` (AgentDtoResolvedConfig, optional) — The resolved config of the target version, merged into a flat shape. Not returned in list responses (`GET /agent`). Only populated in single-agent responses (`GET /agent/{id}`) when the agent has a published, activated version. Can contain up to \~30 fields depending on which config sections are set.
- `_configSource` (enum, optional) — Only present when `?draftId` or `?versionId` query params are used. Indicates which config source was resolved into `_resolvedConfig`.
  - Allowed values: `active`, `draft`, `version`
- `_versionedWorkflow` (AgentDtoVersionedWorkflow, optional) — Deprecated. Present whenever `_resolvedConfig` is populated. Mirrors a subset of `_resolvedConfig` (`prompt`, `tools`, `workflowGraph`) and is kept for backward compatibility. Ignore in new integrations.
- `allowInboundCall` (boolean, optional, default: true, deprecated) — **Deprecated read field.** Present during the migration window; reflects the legacy kill switch only.

### ApiResponseData

### AgentDtoLanguage

The language configuration of the agent

- `default` (enum, optional) — The default language of the agent
  - Allowed values: `en`, `hi`, `mr`, `gu`, `ta`, `te`, `kn`, `ml`, `es`, `north_indic`, `bn`, `or`, `fr`, `de`, `it`, `nl`, `pt`, `ru`
- `switching` (AgentDtoLanguageSwitching, optional) — Language switching configuration for the agent
- `supported` (list of string, optional) — The supported languages of the agent

### AgentDtoSynthesizer

The synthesizer (TTS) configuration of the agent

- `voiceConfig` (AgentDtoSynthesizerVoiceConfig, optional) — The voice configuration of the synthesizer
- `speed` (double, optional, default: 1) — The speed of the synthesizer
- `consistency` (double, optional, default: 0.5) — The consistency of the synthesizer
- `similarity` (double, optional, default: 0) — The similarity of the synthesizer
- `enhancement` (double, optional, default: 1) — The enhancement of the synthesizer
- `sampleRate` (double, optional) — The audio sample rate used by the synthesizer

### AgentDtoDefaultVariables

The default variables to use for the agent. These variables will be used if no variables are provided when initiating a conversation with the agent.

### AgentDtoPreCallApi

Configuration for an API call to be made before the call starts. The response variables can be injected into the agent's prompt.

- `url` (string, required) — The URL of the API endpoint to call.
- `method` (enum, required) — The HTTP method to use for the API call.
  - Allowed values: `GET`, `POST`, `PUT`, `DELETE`, `PATCH`
- `isEnabled` (boolean, optional, default: false) — Whether the pre-call API is enabled.
- `headers` (map from string to string, optional) — Optional HTTP headers to include in the request.
- `body` (AgentDtoPreCallApiBody, optional) — Optional request body for POST/PUT/PATCH requests.
- `timeout` (integer, optional, default: 5) — Timeout in seconds for the API call.
- `queryParams` (AgentDtoPreCallApiQueryParams, optional) — Optional query parameters to include in the request URL.
- `responseVariables` (list of AgentDtoPreCallApiResponseVariablesItems, optional) — List of variables to extract from the API response using JSON path expressions.

### AgentDtoVoiceMailDetectionConfig

Voicemail detection settings.

- `enabled` (boolean, optional, default: false)
- `endText` (string, optional, default: Terminating call, you can call us back anytime. Thank you for calling.) — Text spoken before the call is terminated when voicemail is detected.

### AgentDtoSmartTurnConfig

Smart end-of-turn detection settings.

- `isEnabled` (boolean, optional)
- `waitTimeInSecs` (double, optional)

### AgentDtoVoiceDetectionConfig

VAD (voice activity detection) tuning.

- `confidence` (double, optional)
- `minVolume` (double, optional)
- `triggerTimeInSecs` (double, optional)
- `releaseTimeInSecs` (double, optional)

### AgentDtoDenoisingConfig

Audio denoising settings.

- `isEnabled` (boolean, optional)

### AgentDtoRedactionConfig

PII/PCI redaction settings applied to transcripts.

- `isEnabled` (boolean, optional)

### AgentDtoPronunciationDictsItems

- `word` (string, required)
- `pronunciation` (string, required)

### AgentDtoLlmIdleTimeoutConfig

Per-channel idle timeouts (seconds) after which the LLM is nudged when the user stops speaking. `maxRetries` bounds how many nudges before the call ends.

- `chatTimeoutTimeInSecs` (double, optional)
- `webcallTimeoutTimeInSecs` (double, optional)
- `telephonyTimeoutTimeInSecs` (double, optional)
- `maxRetries` (double, optional)

### AgentDtoSessionTimeoutConfig

Maximum session duration before the call is automatically ended.

- `timeoutTimeInSecs` (double, optional)

### AgentDtoTimezone

Agent timezone — used for time-of-day-sensitive prompts and analytics bucketing.

- `label` (string, optional, default: (GMT+0:00) UTC)
- `offset` (double, optional, default: 0)

### PostCallAnalyticsConfig

Per-agent post-call analytics configuration. Evaluated after each call ends and surfaced in call logs under the `postCallAnalytics` field.

- `dispositionMetrics` (list of DispositionMetric, optional, default: []) — Structured metrics extracted from each completed call.
- `useInternalAnalyticsModel` (boolean, optional, default: true) — Use the internal analytics model. When false, falls back to the agent's own LLM.
- `useReasoningModel` (boolean, optional, default: false) — Route analytics evaluation through the reasoning model for higher-quality results at a latency/cost tradeoff.
- `successMetrics` (list of PostCallAnalyticsConfigSuccessMetricsItems, optional, default: [], deprecated) — **Deprecated** — will be removed in a future version. Use `dispositionMetrics` instead. Kept here because the backend still accepts it on writes and returns it on reads.
- `summaryPrompt` (string, optional, default: , deprecated) — **Deprecated** — no longer used in post-call analysis and will be removed in a future version. Kept here because the backend still accepts it on writes and returns it on reads.

### AgentDtoWidgetConfig

Chat-widget configuration. Configure from the dashboard; safe to ignore for API-only integrations.

- `position` (enum, optional, default: bottom-right)
  - Allowed values: `bottom-right`, `bottom-left`, `top-right`, `top-left`
- `size` (enum, optional, default: full)
  - Allowed values: `tiny`, `compact`, `full`
- `mode` (enum, optional, default: chat)
  - Allowed values: `chat`, `voice`
- `theme` (enum, optional, default: light)
  - Allowed values: `light`, `dark`
- `baseColor` (string, optional, default: #ffffff)
- `accentColor` (string, optional, default: #2d9d9f)
- `agentBubbleColor` (string, optional, default: #f3f4f6)
- `textOnAccentColor` (string, optional, default: #FFFFFF)
- `secondaryTextColor` (string, optional, default: #6b7280)
- `primaryTextColor` (string, optional, default: #111827)
- `startButtonText` (string, optional, default: Start)
- `endButtonText` (string, optional, default: End)
- `ctaName` (string, optional, default: Talk to Atoms)
- `widgetName` (string, optional, default: Atoms)
- `avatarUrl` (string, optional, nullable)
- `chatPlaceholder` (string, optional, default: Type your message...)
- `consentRequired` (boolean, optional, default: false)
- `consentTitle` (string, optional, default: Privacy Agreement)
- `consentContent` (string, optional) — Long-form consent body shown before the user can interact.
- `assistantId` (string, optional, nullable)
- `allowlist` (list of string, optional) — Allowed origin hostnames for widget embedding.

### AgentDtoResolvedConfig

The resolved config of the target version, merged into a flat shape. Not returned in list responses (`GET /agent`). Only populated in single-agent responses (`GET /agent/{id}`) when the agent has a published, activated version. Can contain up to \~30 fields depending on which config sections are set.

- `prompt` (string, optional) — Active version's single-prompt text.
- `tools` (list of Tool, optional) — Active version's configured tools.
- `postCallAnalyticsConfig` (PostCallAnalyticsConfig, optional) — Per-agent post-call analytics configuration. Evaluated after each call ends and surfaced in call logs under the `postCallAnalytics` field.
- `callDispositionConfig` (string, optional)
- `modelName` (string, optional) — LLM model name on the resolved version.
- `transcriberType` (string, optional) — STT engine in use on the resolved version. Common values are `pulse`, `pulse-legacy`, `gpt-realtime`, and `gpt-realtime-mini`; `others` may also be returned. Typed as an open string so clients do not refuse to deserialize additional values the server may return.
- `defaultLanguage` (enum, optional) — Default language set on the resolved version.
  - Allowed values: `en`, `hi`, `mr`, `gu`, `ta`, `te`, `kn`, `ml`, `es`, `north_indic`, `bn`, `or`, `fr`, `de`, `it`, `nl`, `pt`, `ru`
- `supportedLanguages` (list of string, optional) — Supported languages on the resolved version.
- `languageSwitching` (AgentDtoResolvedConfigLanguageSwitching, optional) — Language-switching configuration on the resolved version.
- `firstMessage` (string, optional) — Opening message on the resolved version.
- `globalPrompt` (string, optional) — Global prompt on the resolved version (workflow_graph agents only).
- `preCallAPI` (AgentDtoResolvedConfigPreCallApi, optional) — Pre-call API configuration on the resolved version.
- `workflowGraph` (AgentDtoResolvedConfigWorkflowGraph, optional) — Full node graph for workflow_graph agents. Null for single_prompt agents.
- `muteUserUntilFirstBotResponse` (boolean, optional)
- `allowInterruptions` (boolean, optional)
- `voiceDetectionConfig` (AgentDtoResolvedConfigVoiceDetectionConfig, optional)
- `smartTurnConfig` (AgentDtoResolvedConfigSmartTurnConfig, optional)
- `backgroundSound` (string, optional)
- `denoisingConfig` (AgentDtoResolvedConfigDenoisingConfig, optional)
- `redactionConfig` (AgentDtoResolvedConfigRedactionConfig, optional)
- `llmIdleTimeoutConfig` (AgentDtoResolvedConfigLlmIdleTimeoutConfig, optional)
- `sessionTimeoutConfig` (AgentDtoResolvedConfigSessionTimeoutConfig, optional)

### AgentDtoVersionedWorkflow

Deprecated. Present whenever `_resolvedConfig` is populated. Mirrors a subset of `_resolvedConfig` (`prompt`, `tools`, `workflowGraph`) and is kept for backward compatibility. Ignore in new integrations.

- `prompt` (string, optional)
- `tools` (list of Tool, optional)
- `workflowGraph` (AgentDtoVersionedWorkflowWorkflowGraph, optional)

### AgentDtoLanguageSwitching

Language switching configuration for the agent

- `isEnabled` (boolean, optional) — Whether language switching is enabled for the agent
- `minWordsForDetection` (double, optional) — Minimum number of words required for language detection
- `strongSignalThreshold` (double, optional) — Threshold for strong language signal detection
- `weakSignalThreshold` (double, optional) — Threshold for weak language signal detection
- `minConsecutiveForWeakThresholdSwitch` (double, optional) — Minimum consecutive detections required for weak threshold language switch

### AgentDtoSynthesizerVoiceConfig

The voice configuration of the synthesizer

- `model` (string, optional, default: waves_lightning_v3_1_pro) — The TTS model of the synthesizer. Any value accepted by `POST /agent` (see the `synthesizer.voiceConfig.model` enum on the create request). Older agents may also return `waves_lightning_large_voice_clone`. Treat this field as an open string when reading.
- `voiceId` (string, optional, default: blake) — The voice ID of the synthesizer.
- `gender` (enum, optional, default: male)
  - Allowed values: `male`, `female`

### AgentDtoPreCallApiBody

Optional request body for POST/PUT/PATCH requests.

### AgentDtoPreCallApiQueryParams

Optional query parameters to include in the request URL.

### AgentDtoPreCallApiResponseVariablesItems

- `variableName` (string, required) — The name of the variable to inject into the agent prompt.
- `jsonPath` (string, required) — JSON path expression to extract the value from the API response.

### DispositionMetric

A single disposition metric captured after each call. The metric prompt is evaluated against the call transcript post-call, and the result is returned in the call log under `postCallAnalytics.dispositionMetrics`.

- `identifier` (string, required) — Stable machine identifier. Lowercase letters, digits, and underscores only.
- `dispositionMetricPrompt` (string, required) — Natural-language question evaluated against the transcript after the call ends.
- `dispositionMetricType` (enum, required) — Data type returned by the metric.
  - Allowed values: `STRING`, `BOOLEAN`, `INTEGER`, `ENUM`, `DATETIME`
- `choices` (list of string, optional) — Required when `dispositionMetricType = ENUM`. Allowed values.

### PostCallAnalyticsConfigSuccessMetricsItems

- `identifier` (string, required)
- `successMetricPrompt` (string, required)
- `successMetricType` (enum, required)
  - Allowed values: `NUMERIC_SCALE`, `PERCENTAGE_SCALE`, `PASS_FAIL`, `DESCRIPTIVE_SCALE`

### Tool

Tool (function) available to the agent. The `type` field determines which additional fields are required. Backend validation enforces per-type schemas.

- `type` (enum, required) — The type of function/tool
  - Allowed values: `end_call`, `transfer_call`, `api_call`, `client_tool`, `extract_dynamic_variables`, `knowledge_base_search`
- `name` (string, required) — Unique name for the function (no spaces)
- `description` (string, required) — Description of what the function does
- `enabled` (boolean, optional, default: true) — Whether the tool is enabled
- `transferNumber` (string, optional) — Required for transfer_call type. Phone number to transfer the call to (E.164 format)
- `transferOption` (ToolTransferOption, optional) — Required for transfer_call type. Controls cold vs warm transfer behavior.
- `onHoldMusic` (enum, optional, default: ringtone) — Optional for transfer_call type. Audio played to the caller while the transfer is in progress.
  - Allowed values: `ringtone`, `relaxing_sound`, `uplifting_beats`, `none`
- `transferOnlyIfHuman` (boolean, optional, default: true) — Optional for transfer_call type. If true, the call is only transferred when a human is detected on the receiving end (voicemail/IVR skipped).
- `detectionTimeout` (integer, optional, default: 30) — Optional for transfer_call type. Seconds to wait for human detection before giving up (5–60).
- `url` (string, optional) — Required for api_call type. The URL to make the HTTP request to.
- `method` (enum, optional) — Required for api_call type. HTTP method to use.
  - Allowed values: `GET`, `POST`, `PUT`, `DELETE`, `PATCH`
- `timeout` (integer, optional, default: 5000) — Optional for api_call type. Request timeout in milliseconds (1000–30000).
- `headers` (map from string to string, optional) — Optional for api_call type. Static HTTP headers as a key/value map.
- `headersArray` (list of ToolHeadersArrayItems, optional) — Optional for api_call type. Headers as an array of key/value objects (alternative to `headers` map).
- `queryParams` (list of ToolQueryParamsItems, optional) — Optional for api\_call type. Query parameters to include in the request URL. Values support variable templating like `{{order_id}}`.
- `requestBody` (string, optional) — Optional for api_call type. Raw request body as a JSON string. Supports variable templating.
- `llmParameters` (list of ToolLlmParametersItems, optional) — Optional for api_call type. Parameters the LLM can supply dynamically at runtime.
- `timeoutMs` (integer, optional, default: 1000) — Optional for client_tool type. How long the agent waits for `function_call.result` before recovering verbally.
- `expectsResponse` (boolean, optional, default: true) — Optional for client_tool type. When false, fire-and-forget — the app acts on the event and the agent does not wait for a result.
- `responseVariables` (list of ToolResponseVariablesItems, optional, default: []) — Optional for api_call type. Variables to extract from the API response into the agent's variable store.
- `auth` (ToolAuth, optional) — Optional for `api_call` type. Authentication for the outbound request. Credentials are referenced **by secret name** (from the org Secrets vault, see `POST /secret`), never inline. At call time the platform decrypts the secret, injects it into the request, and strips the `auth` block before the config reaches the runtime, cache, or webhooks. `token`, `value`, and `password` below are secret names, not literal values.
- `variablesExtractionSchema` (list of ToolVariablesExtractionSchemaItems, optional) — Required for extract_dynamic_variables type. Schema defining variables to extract from the conversation.
- `knowledgeBaseId` (string, optional) — Required for knowledge_base_search type. ID of the knowledge base to search.
- `fillerPhrases` (list of string, optional, default: []) — Optional for knowledge_base_search and client_tool types. Phrases spoken while the tool runs so the pause is not silent.

### AgentDtoResolvedConfigLanguageSwitching

Language-switching configuration on the resolved version.

### AgentDtoResolvedConfigPreCallApi

Pre-call API configuration on the resolved version.

### AgentDtoResolvedConfigWorkflowGraph

Full node graph for workflow_graph agents. Null for single_prompt agents.

### AgentDtoResolvedConfigVoiceDetectionConfig

### AgentDtoResolvedConfigSmartTurnConfig

### AgentDtoResolvedConfigDenoisingConfig

### AgentDtoResolvedConfigRedactionConfig

### AgentDtoResolvedConfigLlmIdleTimeoutConfig

### AgentDtoResolvedConfigSessionTimeoutConfig

### AgentDtoVersionedWorkflowWorkflowGraph

### ToolTransferOption

Required for transfer_call type. Controls cold vs warm transfer behavior.

- `type` (enum, optional, default: cold_transfer) — Transfer mode. `cold_transfer` hands off immediately; `warm_transfer` briefs the receiving party first.
  - Allowed values: `cold_transfer`, `warm_transfer`
- `privateHandoffOption` (ToolTransferOptionPrivateHandoffOption, optional, nullable) — Private briefing delivered to the transfer target before the caller is connected. Only used when `type = warm_transfer`.
- `publicHandoffOption` (ToolTransferOptionPublicHandoffOption, optional, nullable) — Message played to the caller while the transfer is being set up. Only used when `type = warm_transfer`.

### ToolHeadersArrayItems

- `key` (string, required)
- `value` (string, required)

### ToolQueryParamsItems

- `key` (string, required)
- `value` (string, required)

### ToolLlmParametersItems

- `name` (string, required) — Parameter name
- `description` (string, required) — What the parameter represents
- `type` (enum, required)
  - Allowed values: `text`, `number`, `boolean`, `enum`
- `values` (list of string, optional) — Required when type is `enum`. Allowed values.
- `required` (boolean, optional, default: false)

### ToolResponseVariablesItems

- `variableName` (string, required) — Name to store the extracted value under
- `jsonPath` (string, required) — JSON path to extract the value from the response

### ToolAuth

Optional for `api_call` type. Authentication for the outbound request. Credentials are referenced **by secret name** (from the org Secrets vault, see `POST /secret`), never inline. At call time the platform decrypts the secret, injects it into the request, and strips the `auth` block before the config reaches the runtime, cache, or webhooks. `token`, `value`, and `password` below are secret names, not literal values.

- `type` (enum, required) — Auth scheme. `bearer` sends `Authorization: Bearer <secret>`; `api_key` sends the secret in a header or query param you name; `basic` sends `Authorization: Basic <base64(username:secret)>`.
  - Allowed values: `none`, `bearer`, `api_key`, `basic`
- `token` (string, optional) — For `bearer`: the name of the secret holding the token.
- `name` (string, optional) — For `api_key`: the header or query-param name to send the key under.
- `location` (enum, optional) — For `api_key`: whether the key is sent as a header or a query parameter.
  - Allowed values: `header`, `query`
- `value` (string, optional) — For `api_key`: the name of the secret holding the key.
- `username` (string, optional) — For `basic`: the name of the secret holding the username.
- `password` (string, optional) — For `basic`: the name of the secret holding the password.

### ToolVariablesExtractionSchemaItems

- `name` (string, required) — Name of the variable to extract
- `description` (string, required) — What this variable represents
- `type` (enum, required)
  - Allowed values: `text`, `number`, `boolean`, `enum`
- `values` (list of string, optional) — Required when type is `enum`. List of possible values.

### ToolTransferOptionPrivateHandoffOption

Private briefing delivered to the transfer target before the caller is connected. Only used when `type = warm_transfer`.

- `type` (enum, optional) — `prompt` generates briefing from the LLM; `static` plays fixed text.
  - Allowed values: `prompt`, `static`
- `prompt` (string, optional) — The prompt or static text for the private handoff.

### ToolTransferOptionPublicHandoffOption

Message played to the caller while the transfer is being set up. Only used when `type = warm_transfer`.

- `type` (enum, optional)
  - Allowed values: `prompt`, `static`
- `prompt` (string, optional)

## Examples

**Response**

```json
{
  "status": true,
  "data": {
    "_id": "string",
    "name": "string",
    "description": "string",
    "backgroundSound": "",
    "organization": "string",
    "workflowId": "string",
    "workflowType": "workflow_graph",
    "createdBy": "string",
    "globalKnowledgeBaseId": "string",
    "language": {
      "default": "en",
      "switching": {
        "isEnabled": true,
        "minWordsForDetection": 1.1,
        "strongSignalThreshold": 1.1,
        "weakSignalThreshold": 1.1,
        "minConsecutiveForWeakThresholdSwitch": 1.1
      },
      "supported": [
        "string"
      ]
    },
    "synthesizer": {
      "voiceConfig": {
        "model": "waves_lightning_v3_1_pro",
        "voiceId": "blake",
        "gender": "male"
      },
      "speed": 1,
      "consistency": 0.5,
      "similarity": 0,
      "enhancement": 1,
      "sampleRate": 1.1
    },
    "slmModel": "electron",
    "defaultVariables": {},
    "preCallAPI": {
      "url": "string",
      "method": "GET",
      "isEnabled": false,
      "headers": {},
      "body": {},
      "timeout": 5,
      "queryParams": {},
      "responseVariables": [
        {
          "variableName": "string",
          "jsonPath": "string"
        }
      ]
    },
    "createdAt": "2024-01-15T09:30:00Z",
    "updatedAt": "2024-01-15T09:30:00Z",
    "avatarUrl": "string",
    "firstMessage": "string",
    "allowInterruptions": true,
    "waitForUserToSpeakFirst": true,
    "totalCalls": 1.1,
    "transcriberType": "string",
    "globalPrompt": "string",
    "archived": true,
    "archivedAt": "2024-01-15T09:30:00Z",
    "activeVersionId": "string",
    "versionId": "string",
    "phoneNumber": [
      "string"
    ],
    "visibleToEveryone": false,
    "speechFormatting": true,
    "muteUserUntilFirstBotResponse": false,
    "interruptionBackoffTimer": 1.1,
    "enableStyleGuide": true,
    "callDispositionConfig": "",
    "voiceMailDetectionConfig": {
      "enabled": false,
      "endText": "Terminating call, you can call us back anytime. Thank you for calling."
    },
    "smartTurnConfig": {
      "isEnabled": true,
      "waitTimeInSecs": 1.1
    },
    "voiceDetectionConfig": {
      "confidence": 0.5,
      "minVolume": 0.5,
      "triggerTimeInSecs": 1.1,
      "releaseTimeInSecs": 1.1
    },
    "denoisingConfig": {
      "isEnabled": true
    },
    "redactionConfig": {
      "isEnabled": true
    },
    "pronunciationDicts": [
      {
        "word": "string",
        "pronunciation": "string"
      }
    ],
    "llmIdleTimeoutConfig": {
      "chatTimeoutTimeInSecs": 1.1,
      "webcallTimeoutTimeInSecs": 1.1,
      "telephonyTimeoutTimeInSecs": 1.1,
      "maxRetries": 1.1
    },
    "sessionTimeoutConfig": {
      "timeoutTimeInSecs": 1.1
    },
    "timezone": {
      "label": "(GMT+0:00) UTC",
      "offset": 0
    },
    "postCallAnalyticsConfig": {
      "dispositionMetrics": [
        {
          "identifier": "call_resolved",
          "dispositionMetricPrompt": "Was the customer issue resolved by the end of the call?",
          "dispositionMetricType": "STRING",
          "choices": [
            "resolved",
            "escalated",
            "callback_scheduled",
            "no_action"
          ]
        }
      ],
      "useInternalAnalyticsModel": true,
      "useReasoningModel": false,
      "successMetrics": [
        {
          "identifier": "string",
          "successMetricPrompt": "string",
          "successMetricType": "NUMERIC_SCALE"
        }
      ],
      "summaryPrompt": ""
    },
    "widgetConfig": {
      "position": "bottom-right",
      "size": "full",
      "mode": "chat",
      "theme": "light",
      "baseColor": "#ffffff",
      "accentColor": "#2d9d9f",
      "agentBubbleColor": "#f3f4f6",
      "textOnAccentColor": "#FFFFFF",
      "secondaryTextColor": "#6b7280",
      "primaryTextColor": "#111827",
      "startButtonText": "Start",
      "endButtonText": "End",
      "ctaName": "Talk to Atoms",
      "widgetName": "Atoms",
      "avatarUrl": "string",
      "chatPlaceholder": "Type your message...",
      "consentRequired": false,
      "consentTitle": "Privacy Agreement",
      "consentContent": "string",
      "assistantId": "string",
      "allowlist": [
        "string"
      ]
    },
    "_resolvedConfig": {
      "prompt": "string",
      "tools": [
        {
          "type": "end_call",
          "name": "end_call",
          "description": "End the conversation when the user is satisfied",
          "enabled": true,
          "transferNumber": "+1234567890",
          "transferOption": {
            "type": "cold_transfer",
            "privateHandoffOption": {
              "type": "prompt",
              "prompt": "string"
            },
            "publicHandoffOption": {
              "type": "prompt",
              "prompt": "string"
            }
          },
          "onHoldMusic": "ringtone",
          "transferOnlyIfHuman": true,
          "detectionTimeout": 30,
          "url": "https://api.example.com/orders",
          "method": "GET",
          "timeout": 5000,
          "headers": {
            "Authorization": "Bearer TOKEN",
            "Content-Type": "application/json"
          },
          "headersArray": [
            {
              "key": "Authorization",
              "value": "Bearer TOKEN"
            }
          ],
          "queryParams": [
            {
              "key": "id",
              "value": "{{order_id}}"
            }
          ],
          "requestBody": "{\"customer_id\": \"{{customer_id}}\"}",
          "llmParameters": [
            {
              "name": "string",
              "description": "string",
              "type": "text",
              "values": [
                "string"
              ],
              "required": false
            }
          ],
          "timeoutMs": 1000,
          "expectsResponse": true,
          "responseVariables": [
            {
              "variableName": "orderStatus",
              "jsonPath": "$.data.status"
            }
          ],
          "auth": {
            "type": "none",
            "token": "ORDER_API_TOKEN",
            "name": "X-API-Key",
            "location": "header",
            "value": "SEARCH_API_KEY",
            "username": "string",
            "password": "string"
          },
          "variablesExtractionSchema": [
            {
              "name": "customer_name",
              "description": "The customer's full name",
              "type": "text",
              "values": [
                "satisfied",
                "unsatisfied",
                "neutral"
              ]
            }
          ],
          "knowledgeBaseId": "60d0fe4f5311236168a109ca",
          "fillerPhrases": [
            "Let me check that for you",
            "One moment please"
          ]
        }
      ],
      "postCallAnalyticsConfig": {
        "dispositionMetrics": [
          {
            "identifier": "call_resolved",
            "dispositionMetricPrompt": "Was the customer issue resolved by the end of the call?",
            "dispositionMetricType": "STRING",
            "choices": [
              "resolved",
              "escalated",
              "callback_scheduled",
              "no_action"
            ]
          }
        ],
        "useInternalAnalyticsModel": true,
        "useReasoningModel": false,
        "successMetrics": [
          {
            "identifier": "string",
            "successMetricPrompt": "string",
            "successMetricType": "NUMERIC_SCALE"
          }
        ],
        "summaryPrompt": ""
      },
      "callDispositionConfig": "string",
      "modelName": "string",
      "transcriberType": "string",
      "defaultLanguage": "en",
      "supportedLanguages": [
        "string"
      ],
      "languageSwitching": {},
      "firstMessage": "string",
      "globalPrompt": "string",
      "preCallAPI": {},
      "workflowGraph": {},
      "muteUserUntilFirstBotResponse": true,
      "allowInterruptions": true,
      "voiceDetectionConfig": {},
      "smartTurnConfig": {},
      "backgroundSound": "string",
      "denoisingConfig": {},
      "redactionConfig": {},
      "llmIdleTimeoutConfig": {},
      "sessionTimeoutConfig": {}
    },
    "_configSource": "active",
    "_versionedWorkflow": {
      "prompt": "string",
      "tools": [
        {
          "type": "end_call",
          "name": "end_call",
          "description": "End the conversation when the user is satisfied",
          "enabled": true,
          "transferNumber": "+1234567890",
          "transferOption": {
            "type": "cold_transfer",
            "privateHandoffOption": {
              "type": "prompt",
              "prompt": "string"
            },
            "publicHandoffOption": {
              "type": "prompt",
              "prompt": "string"
            }
          },
          "onHoldMusic": "ringtone",
          "transferOnlyIfHuman": true,
          "detectionTimeout": 30,
          "url": "https://api.example.com/orders",
          "method": "GET",
          "timeout": 5000,
          "headers": {
            "Authorization": "Bearer TOKEN",
            "Content-Type": "application/json"
          },
          "headersArray": [
            {
              "key": "Authorization",
              "value": "Bearer TOKEN"
            }
          ],
          "queryParams": [
            {
              "key": "id",
              "value": "{{order_id}}"
            }
          ],
          "requestBody": "{\"customer_id\": \"{{customer_id}}\"}",
          "llmParameters": [
            {
              "name": "string",
              "description": "string",
              "type": "text",
              "values": [
                "string"
              ],
              "required": false
            }
          ],
          "timeoutMs": 1000,
          "expectsResponse": true,
          "responseVariables": [
            {
              "variableName": "orderStatus",
              "jsonPath": "$.data.status"
            }
          ],
          "auth": {
            "type": "none",
            "token": "ORDER_API_TOKEN",
            "name": "X-API-Key",
            "location": "header",
            "value": "SEARCH_API_KEY",
            "username": "string",
            "password": "string"
          },
          "variablesExtractionSchema": [
            {
              "name": "customer_name",
              "description": "The customer's full name",
              "type": "text",
              "values": [
                "satisfied",
                "unsatisfied",
                "neutral"
              ]
            }
          ],
          "knowledgeBaseId": "60d0fe4f5311236168a109ca",
          "fillerPhrases": [
            "Let me check that for you",
            "One moment please"
          ]
        }
      ],
      "workflowGraph": {}
    },
    "allowInboundCall": true
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.smallest.ai/atoms/v1/agent/id"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.smallest.ai/atoms/v1/agent/id';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.smallest.ai/atoms/v1/agent/id"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.smallest.ai/atoms/v1/agent/id")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.smallest.ai/atoms/v1/agent/id")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.smallest.ai/atoms/v1/agent/id', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.smallest.ai/atoms/v1/agent/id");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.smallest.ai/atoms/v1/agent/id")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```