Skip to main content

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 now
2

Find a number

GET /agents/phone-lines/available-numbers lists your 60db Dialer numbers. in_use: false means it is free
3

Add the phone line

POST /agents/phone-lines with kind: "sixtydb" and the number. Copy the line id
4

Place a call

POST /agents/{agentId}/calls with to and phone_line_id. Returns 202 with the call
5

Follow the call

Poll GET /agents/calls/{callId} until status is completed or failed. Or set event_webhook_url and handle call.completed

API keys and accounts

You only need your own 60db API key — the same sk_… 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 the agents scope; if you narrowed a key’s scopes, turn agents on 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).
To add this to your own app, see Start browser call. The browser offer must go through your server, so your API key never reaches the browser.

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 return 422 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.
  • Turn recording on with call_defaults.record, or per call with overrides.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=1 returns 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 in call_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_usd and cost.runtime_billing_status.

Errors

Endpoint pages list the codes that apply to each call. See Troubleshooting for the general error format.