> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev.setoo.work/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Create agent

> Create a new AI voice agent

Creates a minimal agent from a persona. The prompt, voice, and other behavior
settings are configured afterward via [Patch update agent](/docs/api-reference/agents/patch-update-agent).

### Body parameters

<ParamField body="name" type="string" required>
  Agent display name, 1–120 characters. This is the only required field
</ParamField>

<ParamField body="channel" type="string">
  Channel the agent serves — one of `VOICE`, `CHAT`, `WHATSAPP`, `SMS`
</ParamField>

<ParamField body="agent_persona_id" type="string">
  A persona ID to initialize the agent with — list available personas via [`GET /prompts/personas`](/docs/api-reference/configuration/list-personas).
</ParamField>

<ParamField body="agent_prompt" type="string">
  System prompt driving the agent's behavior and personality.
</ParamField>

<ParamField body="llm_model_id" type="string">
  LLM model UUID to run the agent on — list available LLM models & providers via [`GET /llm/models`](/docs/api-reference/configuration/list-llm-models).
</ParamField>

<ParamField body="description" type="string">
  Agent description or internal notes.
</ParamField>

<ParamField body="voiceProfileId" type="string">
  Voice profile UUID, for `VOICE` agents — list available voices via [`GET /voices`](/docs/api-reference/configuration/list-voices).
</ParamField>

<ParamField body="knowledge_base_id" type="string">
  Knowledge base UUID to ground the agent's answers in.
</ParamField>

<ParamField body="greet" type="boolean" default="true">
  Whether the agent speaks first upon connection.
</ParamField>

<ParamField body="greetMessage" type="string" default="Hello">
  Opening line when `greet` is enabled.
</ParamField>

<ParamField body="recordCalls" type="boolean" default="false">
  Whether calls handled by this agent are recorded.
</ParamField>

<ParamField body="is_active" type="boolean" default="true">
  Whether the agent is active.
</ParamField>

<CodeGroup>
  ```bash curl theme={null}
  curl -X POST https://api.agentic-os.com/api/v1/agents \
    -H "Authorization: Bearer $AGENTIC_OS_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "Sales Voice Agent",
      "channel": "VOICE",
      "agent_persona_id": "c7a840e6-...",
      "llm_model_id": "b9d311f2-...",
      "agent_prompt": "You are a friendly sales representative. Qualify leads concisely.",
      "greet": true,
      "greetMessage": "Hello! Thanks for reaching out. How can I help you today?",
      "is_active": true
    }'
  ```

  ```python Python theme={null}
  requests.post(
      "https://api.agentic-os.com/api/v1/agents",
      headers={"Authorization": f"Bearer {API_KEY}"},
      json={
          "name": "Sales Voice Agent",
          "channel": "VOICE",
          "agent_persona_id": "c7a840e6-...",
          "llm_model_id": "b9d311f2-...",
          "agent_prompt": "You are a friendly sales representative. Qualify leads concisely.",
          "greet": True,
          "greetMessage": "Hello! Thanks for reaching out. How can I help you today?",
          "is_active": True,
      },
  )
  ```

  ```javascript Node theme={null}
  await fetch("https://api.agentic-os.com/api/v1/agents", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      name: "Sales Voice Agent",
      channel: "VOICE",
      agent_persona_id: "c7a840e6-...",
      llm_model_id: "b9d311f2-...",
      agent_prompt: "You are a friendly sales representative. Qualify leads concisely.",
      greet: true,
      greetMessage: "Hello! Thanks for reaching out. How can I help you today?",
      is_active: true,
    }),
  });
  ```
</CodeGroup>

### Response

```json theme={null}
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "Support Agent",
  "is_active": true
}
```

<Callout type="info">
  The response's `id` is the agent's **channel** id, used for most endpoints
  (calls, campaigns, patching). Some endpoints — like generating a prompt — use
  the agent's underlying brain id instead, returned as `agent_id` or
  `brain.id` on this same response.
</Callout>
