> 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 conversation log by ID

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

Retrieve detailed information about a specific conversation including transcript, events, and latency metrics.

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

## 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) — The callId of the conversation (format `CALL-{13-digit-timestamp}-{6-char-hex}`). You can get the callId from the conversation logs endpoint.

## Response

### 200

Successful response

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

### 404 Not Found Error

Conversation log not found — the callId does not exist or does not belong to the caller's organization

- `any`

### 500 Internal Server Error

Internal server error

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

## Types

### ConversationIdGetResponsesContentApplicationJsonSchemaData

- `_id` (string, optional) — The database ID of the conversation log
- `callId` (string, optional) — The unique call identifier
- `agent` (AgentDTO, optional)
- `status` (enum, optional) — The status of the conversation
  - Allowed values: `pending`, `in_progress`, `in_queue`, `processing`, `active`, `completed`, `failed`, `no_answer`, `cancelled`
- `duration` (double, optional) — The duration of the conversation in seconds
- `recordingUrl` (string, optional) — Still returned on every response. Resolve the audio via `GET /recordings/{callId}?channel=mono` (or `?channel=dual`) to get a short-lived presigned S3 URL. Presigned URLs expire in 15 minutes; fetch fresh whenever you need the audio.
- `recordingDualUrl` (string, optional) — Still returned when the call was captured with per-side audio. Resolve the audio via `GET /recordings/{callId}?channel=dual` to get a short-lived presigned S3 URL. Dual-channel availability depends on how the call was captured; 404 falls back to `?channel=mono`.
- `from` (string, optional) — The phone number of the caller
- `to` (string, optional) — The phone number of the callee
- `type` (enum, optional) — The type of the conversation
  - Allowed values: `telephony_inbound`, `telephony_outbound`, `webcall`
- `transcript` (list of ConversationIdGetResponsesContentApplicationJsonSchemaDataTranscriptItems, optional) — The reconstructed transcript of the conversation
- `variables` (map from string to any, optional) — Runtime variables resolved and used during the call
- `events` (list of map from string to any, optional) — Raw event stream from the relay service
- `callCost` (double, optional) — Discounted total cost of the call
- `callFailureReason` (string, optional) — Reason the call failed, if applicable
- `retryCallId` (string, optional) — ID of the retry call if this call was retried
- `postCallAnalytics` (ConversationIdGetResponsesContentApplicationJsonSchemaDataPostCallAnalytics, optional) — Post-call analytics results evaluated against the call transcript. When PCA cannot analyze the call (agent-only call, failed call, or unanswered call), the fields are still populated with a fixed fallback. `dispositionMetrics[].value` is `null` with `confidence: 0` and `reasoning` explaining the skip. `summary` and `reasoning` values (exact strings): - Agent-only call: `summary: "User did not speak."`, `reasoning: "User did not speak — no customer content available for analysis."` - Failed call: `summary: "Call could not be completed."`, `reasoning: "Call could not be completed — no transcript available for analysis."` - Unanswered call: `summary: "Call was not answered."`, `reasoning: "Call was not answered — no transcript available for analysis."`
- `turnLatencyMetrics` (ConversationIdGetResponsesContentApplicationJsonSchemaDataTurnLatencyMetrics, optional) — Per-turn latency statistics for the call. Replaces the deprecated average_*_latency fields.
- `usage` (ConversationIdGetResponsesContentApplicationJsonSchemaDataUsage, optional, nullable) — LLM token usage summed across every LLM call in this call, taken from the runtime's own metrics. Null when the call made no LLM calls.
- `turns` (list of ConversationIdGetResponsesContentApplicationJsonSchemaDataTurnsItems, optional) — Per-turn LLM timings measured by the runtime, in call order. Joins with transcript rows on `turnIndex`. Distinct from `turnLatencyMetrics`, which is the caller-perceived latency measured from the recording. Empty for calls whose runtime did not emit per-turn stats.
- `toolCalls` (list of ConversationIdGetResponsesContentApplicationJsonSchemaDataToolCallsItems, optional) — Tool calls the agent made during the call, in order, with execution time and the tokens each exchange added to the context.
- `voiceConfigUsed` (ConversationIdGetResponsesContentApplicationJsonSchemaDataVoiceConfigUsed, optional) — The voice configuration that was actually used for this call
- `slmModelUsed` (string, optional) — The SLM/LLM model that was actually used for this call

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

### ConversationIdGetResponsesContentApplicationJsonSchemaDataTranscriptItems

- `role` (enum, optional) — Who spoke this turn
  - Allowed values: `agent`, `user`
- `content` (string, optional) — The spoken text for this turn
- `timestamp` (string, optional) — ISO-8601 timestamp of the turn (e.g. 2026-07-28T15:46:12.472Z)

### ConversationIdGetResponsesContentApplicationJsonSchemaDataPostCallAnalytics

Post-call analytics results evaluated against the call transcript. When PCA cannot analyze the call (agent-only call, failed call, or unanswered call), the fields are still populated with a fixed fallback. `dispositionMetrics[].value` is `null` with `confidence: 0` and `reasoning` explaining the skip. `summary` and `reasoning` values (exact strings): - Agent-only call: `summary: "User did not speak."`, `reasoning: "User did not speak — no customer content available for analysis."` - Failed call: `summary: "Call could not be completed."`, `reasoning: "Call could not be completed — no transcript available for analysis."` - Unanswered call: `summary: "Call was not answered."`, `reasoning: "Call was not answered — no transcript available for analysis."`

- `summary` (string, optional) — Auto-generated summary of the call
- `dispositionMetrics` (list of ConversationIdGetResponsesContentApplicationJsonSchemaDataPostCallAnalyticsDispositionMetricsItems, optional) — Evaluated disposition metrics for this call

### ConversationIdGetResponsesContentApplicationJsonSchemaDataTurnLatencyMetrics

Per-turn latency statistics for the call. Replaces the deprecated average_*_latency fields.

- `turns` (double, optional) — Total number of turns in the call
- `avgLatency` (double, optional) — Average turn latency in milliseconds
- `medianLatency` (double, optional) — Median turn latency in milliseconds
- `minLatency` (double, optional) — Minimum turn latency in milliseconds
- `maxLatency` (double, optional) — Maximum turn latency in milliseconds
- `latencies` (list of double, optional) — Array of individual turn latencies in milliseconds
- `transitions` (list of ConversationIdGetResponsesContentApplicationJsonSchemaDataTurnLatencyMetricsTransitionsItems, optional) — Per-turn timing breakdown
- `processedAt` (datetime, optional) — When the latency metrics were computed

### ConversationIdGetResponsesContentApplicationJsonSchemaDataUsage

LLM token usage summed across every LLM call in this call, taken from the runtime's own metrics. Null when the call made no LLM calls.

- `promptTokens` (integer, optional) — Input tokens across all LLM calls
- `completionTokens` (integer, optional) — Output tokens across all LLM calls
- `cachedTokens` (integer, optional) — Input tokens served from the prompt cache (cache reads)
- `cacheCreationTokens` (integer, optional) — Input tokens spent writing prompt-cache entries
- `llmCalls` (integer, optional) — Number of LLM calls made during the call
- `cacheHitPct` (integer, optional, nullable) — Cache-read share of total input tokens, 0-100. Null when there was no input.

### ConversationIdGetResponsesContentApplicationJsonSchemaDataTurnsItems

- `turnIndex` (integer, optional) — 1-based turn number
- `ttfbMs` (double, optional, nullable) — Time from the LLM request to its first token, in milliseconds
- `llmGenerationMs` (double, optional, nullable) — Time the LLM spent generating the turn's response, in milliseconds
- `turnMs` (double, optional, nullable) — End-to-end time for the turn, in milliseconds
- `llmCalls` (integer, optional) — LLM calls made in this turn (more than one when tools ran)
- `tokens` (ConversationIdGetResponsesContentApplicationJsonSchemaDataTurnsItemsTokens, optional)

### ConversationIdGetResponsesContentApplicationJsonSchemaDataToolCallsItems

- `name` (string, optional) — Tool name as configured on the agent
- `toolCallId` (string, optional, nullable)
- `timestamp` (datetime, optional, nullable)
- `type` (string, optional, nullable) — Tool kind, e.g. `api_call`, `client_tool`, `knowledge_base_search`. Null on older calls.
- `method` (string, optional, nullable) — HTTP method for `api_call` tools
- `url` (string, optional, nullable) — Template URL for `api_call` tools, with `{{param}}` placeholders unresolved
- `executionMs` (double, optional, nullable) — Time the tool took to run, in milliseconds
- `contextTokens` (integer, optional, nullable) — Tokens this tool exchange added to the context. Set only when the tool ran alone in its LLM-call window; otherwise see `groupContextTokens`.
- `groupContextTokens` (integer, optional, nullable) — Combined token cost of every tool that shared this LLM-call window. The provider bills the window as one number, so no per-tool split exists.
- `tokenGroupId` (string, optional, nullable) — Shared by every tool in the same LLM-call window. Null when the tool ran alone.
- `arguments` (any, optional) — Arguments the agent passed to the tool
- `response` (any, optional) — What the tool returned

### ConversationIdGetResponsesContentApplicationJsonSchemaDataVoiceConfigUsed

The voice configuration that was actually used for this call

- `model` (string, optional) — The TTS model used for the call
- `voiceId` (string, optional) — The voice ID used for the call
- `gender` (string, optional) — The gender of the voice used for the call

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

### ConversationIdGetResponsesContentApplicationJsonSchemaDataPostCallAnalyticsDispositionMetricsItems

- `identifier` (string, optional) — Metric identifier matching the agent config
- `value` (string, optional) — The evaluated value for this metric
- `confidence` (double, optional) — Confidence score for the evaluation (0–1)

### ConversationIdGetResponsesContentApplicationJsonSchemaDataTurnLatencyMetricsTransitionsItems

- `turn` (double, optional)
- `user_end` (double, optional) — Timestamp (ms) when the user finished speaking
- `bot_start` (double, optional) — Timestamp (ms) when the agent started responding
- `latency` (double, optional) — Latency for this turn in milliseconds

### ConversationIdGetResponsesContentApplicationJsonSchemaDataTurnsItemsTokens

- `prompt` (integer, optional)
- `completion` (integer, optional)
- `cached` (integer, optional) — Input tokens served from the prompt cache

### 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": "60d0fe4f5311236168a109ca",
    "callId": "CALL-1737000000000-abc123",
    "agent": {
      "_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
    },
    "status": "completed",
    "duration": 300,
    "recordingUrl": "string",
    "recordingDualUrl": "string",
    "from": "string",
    "to": "string",
    "type": "telephony_inbound",
    "transcript": [
      {
        "role": "agent",
        "content": "string",
        "timestamp": "string"
      }
    ],
    "variables": {},
    "events": [
      {}
    ],
    "callCost": 1.1,
    "callFailureReason": "string",
    "retryCallId": "string",
    "postCallAnalytics": {
      "summary": "string",
      "dispositionMetrics": [
        {
          "identifier": "string",
          "value": "string",
          "confidence": 1.1
        }
      ]
    },
    "turnLatencyMetrics": {
      "turns": 1.1,
      "avgLatency": 1.1,
      "medianLatency": 1.1,
      "minLatency": 1.1,
      "maxLatency": 1.1,
      "latencies": [
        1.1
      ],
      "transitions": [
        {
          "turn": 1.1,
          "user_end": 1.1,
          "bot_start": 1.1,
          "latency": 1.1
        }
      ],
      "processedAt": "2024-01-15T09:30:00Z"
    },
    "usage": {
      "promptTokens": 124393,
      "completionTokens": 641,
      "cachedTokens": 111744,
      "cacheCreationTokens": 0,
      "llmCalls": 15,
      "cacheHitPct": 90
    },
    "turns": [
      {
        "turnIndex": 1,
        "ttfbMs": 1.1,
        "llmGenerationMs": 1.1,
        "turnMs": 1.1,
        "llmCalls": 1,
        "tokens": {
          "prompt": 1,
          "completion": 1,
          "cached": 1
        }
      }
    ],
    "toolCalls": [
      {
        "name": "string",
        "toolCallId": "string",
        "timestamp": "2024-01-15T09:30:00Z",
        "type": "string",
        "method": "string",
        "url": "string",
        "executionMs": 1.1,
        "contextTokens": 1,
        "groupContextTokens": 1,
        "tokenGroupId": "string",
        "arguments": null,
        "response": null
      }
    ],
    "voiceConfigUsed": {
      "model": "string",
      "voiceId": "string",
      "gender": "string"
    },
    "slmModelUsed": "string"
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.smallest.ai/atoms/v1/conversation/CALL-1737000000000-abc123"

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

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

print(response.json())
```

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

	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/conversation/CALL-1737000000000-abc123")

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

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

```csharp
using RestSharp;

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