Documentation menu

Reference

API reference

Every resource below is what the dashboard itself calls — there is no separate, more limited public API.

Authentication

Generate a personal API key from Settings → API Keys — shown once, as vc_...; only its hash is stored, so save it somewhere before navigating away. Send it on every request as x-api-key:

Authenticated request
curl https://api.voicelo.ai/api/agents \
  -H "x-api-key: vc_your_key_here"

Generating a new key immediately invalidates the previous one — there is exactly one live key per account.

Base URL and responses

Every route is under /api on your Voicelo instance. A successful response is { status: "success", data: {...} }; an error is a 4xx or 5xx with:

Error shape
{
  "status": "error",
  "message": "Agent not found."
}

Agents

GET/api/agents

List every agent on the account.

GET/api/agents/:id

Fetch one agent. Tool header secrets come back redacted.

POST/api/agents

Create an agent — see Agents for the field list.

PATCH/api/agents/:id

Update any field, including tools, voice engine or knowledge base.

DELETE/api/agents/:id

Delete an agent.

GET/api/agents/voices

The ElevenLabs voices usable on this account.

GET/api/agents/llm-models

The live OpenRouter model catalogue.

GET/api/agents/integrations

Which one-click tools this account can add, and which still need connecting.

Leads

GET/api/leads

List leads, newest first.

POST/api/leads

Create one — name, phone, optional fields (custom key/value pairs) and tags. A second lead with the same phone number is refused (409), the existing one is returned instead.

POST/api/leads/bulk

Create many at once, e.g. from a parsed CSV.

PATCH/api/leads/:id

Update a lead.

PATCH/api/leads/bulk/tags

Add or remove tags across many leads at once.

DELETE/api/leads/bulk

Delete many by id.

GET/api/leads/field-stats

Every custom field name in use, and how many leads carry it.

Campaigns

GET/api/campaigns

List campaigns.

GET/api/campaigns/:id

Fetch one, with its progress.

POST/api/campaigns

Create one — an agent plus a list of lead ids.

PATCH/api/campaigns/:id

Edit a campaign that hasn’t finished running.

POST/api/campaigns/start

Begin dialling — body { id }.

POST/api/campaigns/stop

Pause it — body { id }. Unreached leads stay untouched.

POST/api/campaigns/duplicate

Copy a campaign’s configuration into a new one.

DELETE/api/campaigns/:id

Delete a campaign.

Calls

POST/api/calls/dial

Place a single call outside any campaign — { to, agentId, name?, fromNumberId?, tags? }. Creates the lead if that phone number isn’t on your list yet.

Call logs

GET/api/call-logs

List calls — filterable by status, direction, agent and date range.

GET/api/call-logs/:id

Fetch one call’s full transcript.

GET/api/call-logs/:id/recording

Stream the recording (range requests supported).

PATCH/api/call-logs/:id/disposition

Set the outcome — see Calls & recordings.

POST/api/call-logs/:id/analyze

Run (or re-run) AI scoring and summary on demand.

Knowledge base

GET/api/knowledge-base

List knowledge bases.

GET/api/knowledge-base/:id

Fetch one.

POST/api/knowledge-base

Create one — { name, basicInfo?, faqs?, otherInfo? }. Rebuilds its search index immediately.

PATCH/api/knowledge-base/:id

Update any field — the search index is rebuilt from the result.

DELETE/api/knowledge-base/:id

Delete it and unassign it from every agent that had it.

POST/api/knowledge-base/from-website

Draft basic info, FAQs and other info from a public URL, for review before saving.

Appointments

GET/api/appointments

List appointments.

POST/api/appointments

Create one directly from the dashboard or your own backend — an agent uses its own internal booking capability instead. See Agents.

PATCH/api/appointments/:id

Reschedule or edit one.

DELETE/api/appointments/:id

Cancel one.

Evals

GET/api/evals

List evals.

POST/api/evals

Create one — { name, description?, messages }. See Evals for the turn shape.

GET/api/evals/:id

Fetch one.

PUT/api/evals/:id

Replace its script.

DELETE/api/evals/:id

Delete it and its run history.

POST/api/evals/:id/run

Run it against an agent — { agentId }. Runs synchronously and returns the graded result.

GET/api/evals/:id/runs

Run history for one eval, newest first.

Phone numbers

GET/api/numbers

List numbers on the account.

GET/api/numbers/twilio/inventory

Search Twilio’s available numbers to buy.

POST/api/numbers/twilio/connect

Buy a number and attach it to the account.

POST/api/numbers

Register a number you already own elsewhere (e.g. a SIP DID).

PATCH/api/numbers/:id

Reassign which agent a number routes inbound calls to.

DELETE/api/numbers/:id

Release a number.

Tip
Every one of these enforces the same plan limits and ownership checks the dashboard runs into — a request for another account’s agent, lead or call comes back 404, not 403, so existence is never leaked across accounts.