Two-step model:Documentation Index
Fetch the complete documentation index at: https://katavenai.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
- Provider credentials — the API keys for your carrier (Twilio, Plivo, Vobiz). Stored encrypted via the Secret Encryptor service; never returned in plaintext.
- Phone numbers — individual E.164 numbers that reference one provider credential and (optionally) pin to one agent.
Providers
Today supported:twilio, plivo, vobiz.
Required credentials JSON
| Provider | Required keys |
|---|---|
twilio | account_sid, auth_token |
plivo | auth_id, auth_token |
vobiz | auth_id, auth_token |
400 immediately, not a runtime failure on the
first call.
A provider with phone numbers attached can’t be deleted (409); you
have to remove the numbers first.
Phone numbers
e164 is sanity-checked locally (+ + 7–15 digits). The carrier
rejects malformed numbers downstream regardless.
Reassign a number to a different agent:
agent_id=None).
Outbound origination
POST /api/v1/calls/originate — dispatches an outbound call.
Pipeline:
- JWT auth (route middleware).
- Caller-ID ownership —
from_numbermust be a tenant-owned,outbound_enablednumber. - Cost caps — concurrent / per-minute / daily / daily-minute
counters in Redis. Exceeded cap →
429. - Decrypt credentials via Secret Encryptor.
- POST to Call Processor
/telephony/originate. - On success, INCR Redis counters.
session_id lets you deep-link to the conversation viewer while
the call is still in progress.
Cost caps
Each tenant has a per-account row controlling the four cap dimensions:| Field | Meaning |
|---|---|
concurrent_max | Hard ceiling on simultaneous calls. |
calls_per_minute | Burst limit. |
daily_calls_max | Per-day budget (rolling UTC midnight). |
daily_minutes_max | Per-day talk-time budget. |
0 to block all of that dimension — useful as
a kill-switch during an incident.