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 thellm_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 exceptname are optional.
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 thellm_id from the create response:
{ "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.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 thellm_id from your agent:
Speech-to-text (STT)
STT converts the caller’s voice into text that the LLM can understand. Set thetranscriber object on the agent to choose the provider and model.
All STT providers below are platform-provided — no credential needed.
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 thetts 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’sfirst_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.
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 anagent_id or llm_id you need for other operations.
Get a specific agent
Fetch a single agent’s full config — includingllm_id, language, voice settings, and all behaviour fields.
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