Skip to main content
Every command accepts --json (machine-readable output), --key (use another API key for this command) and --base-url (staging). Destructive commands preview and stop unless you pass --confirm (alias --yes).

Setting any field

Every command that creates or updates something accepts --set field=value - as many times as you like - and --body @file.json for nested objects. Values are parsed: true, false, null, numbers, and @path reads a file. Any field the API accepts works, including ones added after this CLI was released.
Named flags exist for the common fields; --set covers the rest. An unknown field name is rejected by the API, never silently dropped.

Account

Agents

Calls

Campaigns (voice batch)

CSV columns: phone (required, E.164), prompt_override (optional - replaces the campaign prompt for that person), and every other column becomes a variable the agent receives for that call.

Numbers

Callers (caller context)

What the agent knows about a caller on one of your numbers. First number is yours, second is the caller’s. See Caller context.

SMS

Webhooks (per number)

Bring your own

set verifies the connection with a real probe before saving; get never returns secrets.

MCP

Errors and exit codes

Errors print as error <status> <code>: <message> with a link to the error’s page, and the process exits with code 1. With --json the same information is returned on stdout as { "error": { "code", "status", "message", "doc_url" } }. No key at all exits with 2. A mistyped command exits 1 with a suggestion. Progress lines (imports, --wait) go to stderr, so stdout stays clean for pipes. All codes are listed on Errors.