The stack also ships a dashboard covering most of this. Nothing on this page depends on it. For exploring routes interactively, use the console described in API overview.
Getting a token
Token mechanics, lifetime, and roles are covered in Authentication. The one call you need to start:super_admin. On later runs, log in instead of signing up again — see Authentication for the login call, token expiry, and the service-to-service bot-token path.
A re-login helper for long sessions:
The tasks you do most
Each recipe assumes$API and $TOKEN are set. Placeholders are YOUR_AGENT_ID, YOUR_ORG_ID, YOUR_CALL_ID.
Add provider credentials
Do this first — agents validate their model configuration against configured providers. See Provider credentials for the field contract; the flow is catalog, store, verify:Create an agent
Browse the catalogs first — they are generated from the provider registry, so they are always current:telephony agent requires telephony_provider and provisions an application at the provider on create; a websocket agent must not send telephony_provider.
agents path has no trailing slash. 422 means config validation failed — the message names the field. Full field reference in Agent configuration and Agents.
Attach a number
See what your telephony account holds, then attach:agent_id, this also links the number to the agent’s provider application, so inbound calls route to it. Omit agent_id to import into inventory only.
Detach is a DELETE with a body, and keeps the inventory row:
Place a test call
custom_variables override the agent’s config.custom_variables defaults for this call only. Add from_number to override the caller ID. The response carries a call_id; everything afterwards keys off it.
Check a call’s transcript
404 until the runtime uploads the artifact at the end of the call, and 404 permanently for a call that produced none.
Browser websocket sessions create a
call_type: web CallLog, so they produce transcripts and recordings alongside telephony calls. Pre-register one with POST /api/v1/calls/web to know the call_id up front.Invite a member
admin or super_admin. See Multi-tenancy and roles for who can promote or remove members.
Start a campaign
Three calls: upload, create, start. Field contract, retry/circuit-breaker config, and reports are in Campaigns and Running a campaign.Scripting
Three habits make API-driven operation bearable. Keep credentials out of the command. Put them in the environment and let the shell interpolate:curl exits 0 on a 4xx by default, which turns a failed script into a silently wrong one. Use --fail-with-body:
-d @agent.json reads from disk and diffs in version control.
A poll loop for a campaign, using only Python’s standard library:
Recommended tooling
VoicEra ships no CLI. There is no
voicerctl; scripts/ contains only start-application-services.sh and stop-application-services.sh.