> 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 all agents

GET https://api.smallest.ai/atoms/v1/agent

Agents are the main entities in the system. Agents are used to create conversations. You can create workflow for an agent and configure it for different use cases. You can also create custom workflows for an agent. This API will give you the list of agents created by organization you are a part of.

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

## 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

### Query parameters

- `page` (integer, optional, default: 1) — Page number
- `offset` (integer, optional, default: 10) — Number of items to return per page
- `search` (string, optional) — Search query
- `type` (enum, optional) — Filter agents by workflow type
  - Allowed values: `single_prompt`, `workflow_graph`
- `sortField` (enum, optional, default: createdAt) — Field to sort results by
  - Allowed values: `createdAt`, `updatedAt`, `totalCalls`, `name`, `workflowType`
- `sortOrder` (enum, optional, default: desc) — Sort direction
  - Allowed values: `asc`, `desc`
- `archived` (boolean, optional, default: false) — When true, returns only archived agents. Omit or set to false to return active agents.

## Response

### 200

Successful response

- `status` (boolean, optional)
- `data` (AgentGetResponsesContentApplicationJsonSchemaData, 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

### AgentGetResponsesContentApplicationJsonSchemaData

- `agents` (list of AgentDTO, optional)
- `total` (double, optional) — Total number of agents

### ApiResponseData

### 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.

### 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": {
    "agents": [
      {
        "_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
      }
    ],
    "total": 1.1
  }
}
```

**SDK Code**

```python
import requests

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

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

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

print(response.json())
```

```javascript
const url = 'https://api.smallest.ai/atoms/v1/agent';
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"

	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")

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")
  .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', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.smallest.ai/atoms/v1/agent");
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")! 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()
```