---
title: "Get Voice Agent"
method: GET
path: "/voice/agents/{agentId}"
tags: ["Voice Agents"]
---

# Get Voice Agent

`GET /voice/agents/{agentId}`

## Request

- Base URL: `https://api.speakai.co/v1`
- URL: `https://api.speakai.co/v1/voice/agents/{agentId}`
- Auth: API key in header `x-speakai-key` and API key in header `x-access-token`

### Get Agent

Fetches a single agent by id, scoped to your company. Returns 404 for an agent belonging to another company or one that has been deleted — the response does not distinguish between the two.

## Path parameters

- `agentId` string, required

## Response `200`

OK

- object
  - `status` 'success'
  - `data` object
    - `agent` object
      - `_id` string: MongoDB document id, included because every document has one; use agentId to identify it.
      - `agentId` string: Server-generated UUID. Immutable — sent in the body on create or update is silently dropped.
      - `companyId` string: Stamped from the caller's authenticated company. Sending your own value on create or update is silently dropped; you cannot re-parent an agent.
      - `userId` string: Id of the user who created the agent.
      - `name` string: Required on create. Trimmed, non-empty.
      - `personality` string: Required on create. Free text describing the agent's tone. Can be cleared to an empty string on update.
      - `instructions` string: Required on create. The agent's system instructions. Can be cleared to an empty string on update.
      - `voice` object: Required on create.
        - `provider` string, required: TTS provider, e.g. elevenlabs or openai.
        - `voiceId` string, required
        - `model` string
      - `stt` object: Speech-to-text provider config. Shape is not validated beyond being an object.
      - `llm` object
        - `provider` string: Must be one of the voice-agent LLM providers if sent.
        - `model` string: Must be one of the voice-agent model ids if sent.
      - `liveVoice` string, nullable: The voice id used when llm.model is a Live (speech-to-speech) model. Rejected with a 400 listing the valid ids if it is not one of the voices the resolved Live model offers. Cleared by sending an empty string or null.
      - `avatar` object: Set avatar.avatarId to attach an avatar; the server looks it up in your avatar catalog and derives avatarUrl, provider, and any provider-specific ids (e.g. Tavus faceId/palId) from that catalog row. Any of those fields sent in the request body are ignored — they cannot be set directly. An avatarId with no matching catalog row is rejected with 400, not saved.
        - `avatarId` string: Required to set an avatar. Must match a row in your company's avatar catalog (your own uploads or the shared system catalog).
        - `avatarUrl` string: Read-only in practice: always overwritten from the matched catalog row.
        - `provider` string: Read-only in practice: always overwritten from the matched catalog row.
        - `tavusFaceId` string: Read-only: derived server-side from the catalog row's tavus.faceId. Cannot be set by the client.
        - `tavusPalId` string: Read-only: derived server-side from the catalog row's tavus.palId. Cannot be set by the client.
      - `conversationMode` 'voice' | 'avatar'
      - `status` string: One of the agent status values.
      - `chatSettings` object
        - `welcomeMessage` string
        - `conversationStarters` string[]
        - `maxResponseLength` integer
        - `topicsToAvoid` string[]
        - `maxSessionLength` integer
        - `language` string
        - `responsePace` string: One of the response-pace presets, if set.
      - `websiteUrl` string
      - `enableWebSearch` boolean
      - `creativityLevel` number
      - `folderId` string
      - `telephony` object
        - `enabled` boolean
        - `phoneNumberId` string
        - `handoff` object
          - `enabled` boolean
          - `targetNumber` string
          - `summaryPrompt` string
        - `settings` object
          - `recordCalls` boolean
      - `isDeleted` boolean: DELETE soft-deletes: this flips to true and the agent stops appearing in list/get, but the document is not removed.
      - `deletedAt` string, date-time, nullable
      - `createdAt` string, date-time
      - `updatedAt` string, date-time

## Other responses

- `404`: Agent not found

---

[API](https://skmtc.dev/speakai/apis/speak-ai-api.md) · [All operations](https://skmtc.dev/speakai/apis/speak-ai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/speakai/apis/speak-ai-api/revisions/52d777e6d46e?raw)
