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

# Create assistant

> Create an AI voice agent in your workspace. Send as little as a name — the configuration is completed with the same defaults a dashboard-created assistant gets.

Creates an assistant in the workspace your API key belongs to, provisions the native tools its configuration enables, and returns the finished object.

## Body

<ParamField body="agent_name" type="string" required>
  Display name, 1–255 characters. Trimmed before it is stored.
</ParamField>

<ParamField body="agent_type" type="string" default="Single Prompt">
  Prompt style.
</ParamField>

<ParamField body="config" type="object">
  The configuration document — see [the assistant object](/api-reference/assistants/overview#the-configuration-document). Every key you leave out is filled in, so `{}` produces a working assistant.
</ParamField>

Unknown fields are ignored rather than rejected, so you can send an assistant object straight back.

## Request

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.verbeo.ai/v1/assistant" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "agent_name": "Customer Support",
      "config": {
        "systemPrompt": "You are a friendly support agent for Acme.",
        "voice": { "voiceId": "Charon" },
        "settings": { "maxCallDuration": 10 }
      }
    }'
  ```

  ```javascript Node.js theme={null}
  const res = await fetch("https://api.verbeo.ai/v1/assistant", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.VERBEO_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      agent_name: "Customer Support",
      config: {
        systemPrompt: "You are a friendly support agent for Acme.",
        voice: { voiceId: "Charon" },
      },
    }),
  });
  const { data: assistant } = await res.json();
  ```

  ```python Python theme={null}
  import os, requests

  res = requests.post(
      "https://api.verbeo.ai/v1/assistant",
      headers={"Authorization": f"Bearer {os.environ['VERBEO_API_KEY']}"},
      json={
          "agent_name": "Customer Support",
          "config": {
              "systemPrompt": "You are a friendly support agent for Acme.",
              "voice": {"voiceId": "Charon"},
          },
      },
  )
  assistant = res.json()["data"]
  ```
</CodeGroup>

## Response

`201 Created` with the complete assistant, including the defaults that were filled in and the `toolIds` that were provisioned for it.

```json theme={null}
{
  "success": true,
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "workspace_id": "123e4567-e89b-12d3-a456-426614174000",
    "agent_name": "Customer Support",
    "agent_type": "Single Prompt",
    "config": {
      "systemPrompt": "You are a friendly support agent for Acme.",
      "voice": { "voiceId": "Charon" },
      "toolIds": ["4f1c2d8e-77a1-4a5e-9b31-1f0a2c3d4e5f"],
      "fileSearchStoreIds": [],
      "nativeTools": { "end_call": { "enabled": true } },
      "settings": {
        "initialMessage": { "enabled": true },
        "maxCallDuration": 10,
        "endCallOnSilence": true,
        "silenceTimeoutMinutes": 2,
        "voicemailDetection": { "enabled": true, "action": "hangup" },
        "thinkingLevel": "medium",
        "webhookUrl": "",
        "postCallAnalysis": { "enabled": false, "fields": [] }
      }
    },
    "created_at": "2026-01-15T10:30:00.000Z",
    "updated_at": "2026-01-15T10:30:00.000Z"
  }
}
```

<Note>
  A new assistant gets `end_call` switched on unless you send `nativeTools.end_call.enabled: false`. Without it, an assistant stays on the line — billing — after the caller has said goodbye.
</Note>

## Errors

| Code | Status | When |
| - | - | - |
| `VALIDATION_FAILED` | 422 | Missing `agent_name`, or a `config.voice.voiceId` outside the supported catalogue, or a knowledge-base id from another workspace. |
| `UNAUTHORIZED` | 401 | Missing, invalid, inactive or expired key. |
| `FORBIDDEN` | 403 | A public (`vbr_pub_…`) key. |

Nothing is created when a request fails — if the tools cannot be provisioned, the assistant is removed again rather than left half-built.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.