Skip to content
VoxaDocs
Navigation
Open console →

Agents

Agents

An agent is one complete voice agent configuration, and this page describes the agent object, its editor tabs and the endpoints that create and change it.

The editor tabs

In the console, an agent opens in an editor with one tab per area. Each tab maps to one part of the agent object.

TabField in the agent objectPage
Agentname, welcome_message, system_promptAgent tab
LLMllmLLM tab
VoicevoiceVoice tab
TranscribertranscriberTranscriber tab
CallcallCall tab
ToolstoolsTools
AnalyticsanalyticsAnalytics tab
Webhook & numberwebhook_url, phone_numberWebhook and number
Versions(read only)Versions

The agent object

{
  "id": "1b81a241c0e44f5c9d1f0e2a7c3b9d10",
  "name": "Front desk",
  "welcome_message": "Hello {customer_name}, thanks for calling City Clinic.",
  "system_prompt": "You are the receptionist of City Clinic. Help the caller book a visit.",
  "llm": {"provider": "gemini", "model": "gemini-3.5-flash-lite", "temperature": 0.4, "max_tokens": 300},
  "voice": {"provider": "cartesia", "model": "sonic-3.6", "voice_id": "", "voice_name": "", "language": "hi", "speed": 1.0},
  "transcriber": {"provider": "cartesia", "model": "ink-2", "turn_detection": "balanced", "language": "hi", "endpointing_ms": 300, "keyterms": []},
  "call": {
    "max_duration_seconds": 600,
    "hangup_after_silence_seconds": 15,
    "allow_interruptions": true,
    "interruption_min_words": 2,
    "call_start_hour": 9,
    "call_end_hour": 21,
    "timezone": "Asia/Kolkata",
    "record": true,
    "hangup_message": "",
    "hangup_on_prompt": false,
    "hangup_prompt": "You are deciding whether a phone conversation is complete. ...",
    "check_user_online": false,
    "user_online_message": "Are you still there?",
    "user_online_after_seconds": 9
  },
  "analytics": {"summarize": false, "extraction_prompt": ""},
  "tools": [],
  "webhook_url": "",
  "phone_number": "",
  "status": "active",
  "version": 1,
  "variables": ["customer_name"],
  "updated_by": "key:backend",
  "created_at": "2026-10-01T14:42:44.120000+05:30",
  "updated_at": "2026-10-01T14:42:44.120000+05:30"
}

Top-level fields

FieldTypeDefaultNotes
idstringgeneratedRead only.
namestringrequired1 to 120 characters.
welcome_messagestring""See Agent tab.
system_promptstring""See Agent tab.
llmobjectsee LLM tab
voiceobjectsee Voice tab
transcriberobjectsee Transcriber tab
callobjectsee Call tab
analyticsobjectsee Analytics tab
toolsarray[]See Tools.
webhook_urlstring""See Webhook and number.
phone_numberstring""See Webhook and number.
statusactive or pausedactiveA paused agent does not answer inbound calls on its number. Outbound calls are not affected.
versioninteger1Read only. Goes up by one on every saved change.
variablesarray of stringsRead only. Every {variable} the welcome message and prompt use, in order.
updated_bystringRead only. The person, or key:<key name>, who saved the last change.
created_at, updated_atISO 8601Read only, UTC.

Endpoints

ActionRequestPermission
List agentsGET /api/v1/agentsagents.view
Create an agentPOST /api/v1/agentsagents.edit
Get one agentGET /api/v1/agents/{id}agents.view
Replace an agentPUT /api/v1/agents/{id}agents.edit
Duplicate an agentPOST /api/v1/agents/{id}/duplicateagents.edit
Delete an agentDELETE /api/v1/agents/{id}agents.edit
VersionsGET /api/v1/agents/{id}/versions and moresee Versions
Place a callPOST /api/v1/agents/{id}/callcalls.place

The full schemas are in the API reference.

Create

POST /api/v1/agents takes the agent’s configuration (every field in the table above except the read-only ones). Missing fields get their defaults. It returns 201 with the agent.

curl -X POST https://voxa.abhinavyadav.in/api/v1/agents \
  -H "X-API-Key: $VOXA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Front desk", "system_prompt": "You are the receptionist of City Clinic."}'

Update

PUT /api/v1/agents/{id} replaces the whole configuration. A field you leave out goes back to its default, so read the agent first, change what you need, and send it all back:

curl -s https://voxa.abhinavyadav.in/api/v1/agents/$AGENT_ID -H "X-API-Key: $VOXA_API_KEY" > agent.json
# edit agent.json
curl -X PUT https://voxa.abhinavyadav.in/api/v1/agents/$AGENT_ID \
  -H "X-API-Key: $VOXA_API_KEY" \
  -H "Content-Type: application/json" \
  -d @agent.json

Read-only fields in the body (id, version, variables and so on) are ignored. A PUT that changes nothing returns the agent as it is and does not create a version.

Changes apply to calls that start after the save. A call already in progress keeps the configuration it started with.

Duplicate and delete

POST /api/v1/agents/{id}/duplicate creates a copy named <name> (copy), without the phone number. DELETE /api/v1/agents/{id} returns 204 and removes the agent and its versions. Queued calls for a deleted agent are canceled when the queue reaches them; past calls keep their records.

Errors

StatusWhen
404The agent is not in your workspace.
409Your plan’s agent limit is reached (your plan allows 10 agents: ...), or the phone number belongs to another workspace.
422A field is out of range, a tool is invalid, or the agent uses a provider your workspace may not use (Deepgram is not available to this workspace).

GET /api/v1/providers lists every provider and whether your workspace may use it.

Esc