Overview
An agent is a phone voice assistant. You give it a script, a 60db voice and, optionally, tools that call your backend. You attach a phone line, then place a call. The agent speaks with the caller, follows its script, and leaves a recording, a transcript and a result you can read through the API or dashboard.Access. If Agents is not enabled for your workspace yet, requests return
403 AGENTS_BETA_ONLY. Contact 60db support to turn it on.Outbound only for now. Agents place calls. Inbound calls (an agent answering a number you own) are coming soon. Phone lines show inbound_available: false until then.Agents
Script, voice, languages, tools and call defaults in one object
Phone lines
Call from a 60db Dialer number or your own SIP trunk
Calls
Status, duration, transcript and recording for every call
Tools and events
Let the agent call your API mid-call, and get signed call events
Quickstart
Dashboard
1
Open Agents
Sidebar → Agents
2
Pick a template
Start from Receptionist, Lead qualifier or Appointment booking, then edit the script
3
Pick a voice
Choose a 60db voice. See Voices
4
Add a phone line
Phone lines → Add a phone line. Use a 60db number (get one in Dialer) or your own SIP trunk
5
Run a test call
Choose Test call, enter the number to ring, and start the call
API
1
Create the agent
POST /agents. The response includes webhook_secret, shown only once. Store it now2
Find a number
GET /agents/phone-lines/available-numbers lists your 60db Dialer numbers. in_use: false means it is free3
Add the phone line
POST /agents/phone-lines with kind: "sixtydb" and the number. Copy the line id4
Place a call
POST /agents/{agentId}/calls with to and phone_line_id. Returns 202 with the call5
Follow the call
Poll
GET /agents/calls/{callId} until status is completed or failed. Or set event_webhook_url and handle call.completed- JavaScript
- Python
API keys and accounts
You only need your own 60db API key — the samesk_… key you use for text-to-speech or speech-to-text. There is nothing else to sign up for and no separate phone-agent account or token.
- Create a key in Developers → API keys and send it as
Authorization: Bearer sk_…. New keys include theagentsscope; if you narrowed a key’s scopes, turnagentson for it. - Your workspace only. A key is tied to one workspace. Everything it creates — agents, phone lines, calls, recordings — belongs to that workspace, and no other account can see or use it.
- Billed to you. Calls bill the workspace of the key: speech, LLM and knowledge-base use come from your AI credits, and line minutes on a 60db number from your Dialer balance.
- You stay in control. Deleting or narrowing your key stops your own API access at once. Calls that are already running finish normally.
60db runs the phone-call side for you. Behind the scenes each workspace has its own internal key for call usage, so usage is always attributed to the right account — it never appears in your API keys list and you never handle it.
Concepts
Call lifecycle
When a call ends,
reason gives a short code. 60db uses dial_unconfirmed (the dialer never confirmed the call), stale (no final state in time) and lost (the call could not be found on the call runtime). Other values are passed through from the runtime, so treat reason as informational, not a fixed list.
duration_secs is the connected time. It is set once the call ends.
Talk to your agent in the browser
Test an agent without a phone line. Open the agent, go to Test call, and choose Talk in browser. Allow microphone access, wait for Connected, and speak. The dialog shows a timer, a Mute toggle and Hang up. Closing the dialog or the tab ends the call.- It uses the agent’s saved settings, voice, tools and knowledge base, like a phone call. Audio has phone-call quality.
- Call transfer and the keypad (DTMF) are not available in the browser.
- A browser call lasts up to 5 minutes. Up to 3 browser calls can run at once in a workspace.
- It appears in Calls with the label Web. It uses no phone line and no Dialer balance. AI credits and the agent runtime fee apply as for any call.
- Use a recent Chrome, Edge, Safari or Firefox. If it will not connect, check that your network or firewall allows real-time calls (UDP).
Tools and knowledge base
- Tools let the agent fetch or change data during a call, such as checking availability or booking a table. Each tool call goes to your
tool_webhook_url. See Tools and webhooks. - Knowledge base is set with
knowledge_collection_id, a workspace Smart Memory collection. See Memory and Collections. Personal collections are not supported yet and return422 KNOWLEDGE_COLLECTION_UNSUPPORTED.
Languages and code-switching
Use two- or three-letter lowercase codes with no dialect tag:
en, hi. en-IN is rejected with 400 VALIDATION_ERROR. Each list holds up to 20 codes.
For code-switching (a caller who mixes Hindi and English), set "listen_languages": ["hi", "en"].
Emotion
emotion (boolean, default true) controls expressive speech. Set it to false for plainer delivery.
Recording and consent
- Turn recording on with
call_defaults.record, or per call withoverrides.record. - A recorded call keeps a stereo WAV (caller on the left, agent on the right) and a transcript.
GET /agents/calls/{callId}/recording?mix=1returns one mixed channel. - Delete a recording and its transcript with
DELETE /agents/calls/{callId}/recording. - Tell callers that the call is recorded, and get consent where your local law requires it. The API does not add a consent message. Put one in the script or greeting if you need it.
Call settings
Set defaults on the agent incall_defaults. Override any of them for one call in overrides. A setting you leave unset uses the call runtime’s default.
Limits
Pricing
- Line minutes are billed per completed call, the same way as other Dialer calls. A 60db number needs a Dialer balance above zero, or the call returns
402 DIALER_BALANCE_EMPTY. - Each call returns
cost.runtime_usdandcost.runtime_billing_status.
Errors
Endpoint pages list the codes that apply to each call. See Troubleshooting for the general error format.
Related
- Tools and webhooks: tool calls, signed events, retries
- Dialer: 60db numbers, balance and call billing
- Agents API reference
- MCP tools: run agents from Claude or another MCP client
- JavaScript SDK and Python SDK