Capabilities
Place a call
Your agent dials a person, speaks with its configured voice, works toward an objective, and records a transcript.
The request
curl -X POST https://klaw-voice.netlify.app/api/v1/calls \
-H "Authorization: Bearer $KLAW_KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: lead-4821-attempt-1" \
-d '{
"agent_id": "AGENT_UUID",
"to": "+14155550132",
"objective": "Confirm Thursday appointment; offer to reschedule if needed.",
"metadata": {"lead_id": "4821"},
"callback_url": "https://example.com/hooks/call-done"
}'
agent_idandto(E.164) are required; everything else is optional.objectivesteers the conversation for this one call without editing the playbook.metadata(≤8 KB) rides along and comes back on events and call records.- The
Idempotency-Keyheader makes retries safe — same key, same call.
Response 201: {"call_id", "call_sid", "status", "polling_url", "transcript_url"}.
Watching it live
Poll GET /api/v1/calls/{id} (full record: status, transcript, summary, sentiment, intent) or GET /api/v1/calls/{id}/transcript for just the turns. Prefer push? Subscribe a webhook to call.ended / call.transcribed.
Guardrails
Outbound calling is capped at 5 concurrent and 50 calls/hour per account — see Rate limits. Calls to a person require their prior consent; you are responsible for complying with telemarketing law in your jurisdiction.
Quick proof-of-life
POST /api/agents/{id}/test-call {"phone": "+1..."} rings you (NANP numbers, 5/day) — the fastest way to hear a persona before pointing it at customers.