Skip to main content

What is an agent?

An agent is a complete voice persona. When you create one with just a name, it is immediately usable — OneInbox automatically sets up a default LLM, a default voice, and a default system prompt. You only need to change these if you want to customise them. A single agent handles browser calls (via the Web SDK) and direct phone calls — both outbound and inbound — you don’t need a separate agent per call type.

Create an agent

You have two options — create with defaults and customise later, or provide your own config upfront. Both produce a fully working agent.

Option A — Create with defaults

Just a name. OneInbox automatically creates a default LLM, voice, and system prompt. Customise later using the llm_id and agent_id from the response.

Option B — Create with your own config

Pass any fields you want configured from the start. All fields except name are optional.
The llm_id in the response is the auto-created AI model. Use it to set the system prompt, attach tools, or link knowledge bases — regardless of which option you used. Your agent is ready immediately. Test it with a quick browser call — no phone number needed, runs entirely over the internet (same mechanism the Web SDK uses):

Customise the defaults

Out of the box the agent works with a general-purpose system prompt, a default voice, and a default LLM. To give your agent a specific personality or script, update the LLM model using the llm_id from the create response:
Changes apply to new calls immediately. One LLM model can power multiple agents — to share a brain across agents, PATCH the agent with { "llm_id": "llm_xyz789" }. Update the model once and all agents using it pick up the change. To use a self-hosted or third-party LLM, set provider to "custom" and supply custom_websocket_url. The URL can be wss://, ws://, https://, or http:// — the server must expose an OpenAI-compatible streaming chat completions interface.

Browse available models

The catalogue lists accepted model IDs for LLM, STT, and TTS providers — useful before setting a custom model on your agent or LLM.
The source field on each item is live (fetched directly from the provider), seed (a static list shown without a credential), or unverified.

Give your agent tools

Tools (send SMS, capture caller data, transfer calls, book meetings, etc.) are attached to the LLM model, not the agent directly. Why: the LLM model is what decides what to do during a conversation. Tools are the actions it can take — so they live there. Any agent using that model inherits all its tools automatically. To add a tool, first create it, then attach it to the llm_id from your agent:
Tools guide — all 7 tool types with full examples

Speech-to-text (STT)

STT converts the caller’s voice into text that the LLM can understand. Set the transcriber object on the agent to choose the provider and model. All STT providers below are platform-provided — no credential needed.
Set language to match the caller’s language — e.g. "hi" for Hindi, "ja" for Japanese. Use flux-multi for multilingual calls where the language is unknown.

Text-to-speech (TTS)

TTS converts the agent’s text replies into spoken audio. Set the tts object on the agent to choose the provider, voice, and speed. All TTS providers below are platform-provided — no credential needed.
voice_id must be the vc_... ID from the /v1/voices endpoint — not the raw provider voice ID. See Voices for the full list of available voice IDs.

Key agent fields


Dynamic variables

Dynamic variables let you personalise an agent’s first_message, voicemail_message, and system_prompt per call — without creating a separate agent per lead. Write placeholders with single braces ({variable_name}) in any of those fields, then pass the actual values when you start the call.
The agent opens with: “Hi Priya, this is Aria calling about Acme Outreach.” Two layers — how they combine: At call start, OneInbox builds the final variable map by merging both layers (call values win on collision), then substitutes every {placeholder} in the templates before the agent says a word. The LLM and TTS only ever see the resolved strings — never the raw placeholders.
Use single braces{lead_name}, not {{lead_name}}. Double braces are not interpolated and appear as literal text.

Updating an agent

Update any field on an agent at any time. Changes take effect on the next call — active calls in progress are not affected.

Manage agents

List all agents

Retrieve all agents in your account. Use this to find an agent_id or llm_id you need for other operations.

Get a specific agent

Fetch a single agent’s full config — including llm_id, language, voice settings, and all behaviour fields.
The single-agent GET includes a read-only effective_system_prompt field — the exact system prompt the agent is given at call time: the LLM’s system_prompt with job_description prepended as a # Role block. This is what the LLM actually receives, assembled the same way the worker does at runtime.
effective_system_prompt is only populated on GET /v1/agents/{id}. It is null on the list endpoint to avoid an LLM lookup per row. Per-call variable interpolation and knowledge base chunks are resolved at runtime and are not reflected here.

Delete an agent

Permanently removes the agent. If the agent is assigned to a phone number, reassign the number to a different agent first, then delete.

List LLM models

Get an LLM model

Fetch the full config of a specific model — system prompt, tools, knowledge bases, and custom URL.

Delete an LLM model

Permanently removes the model. Agents currently using this model will lose their LLM config — reassign them first with { "llm_id": "<replacement_model_id>" }.

Next steps

Tools

Give your agent actions — SMS, email, data capture, transfer

Phone numbers

Make real outbound calls with a registered phone number

Calls

How calls are classified and how to read results

Voices

Browse available voices and configure TTS