kaicalls
Official Python SDK for the KaiCalls API — give your AI agent a phone. Outbound calls, agents, leads, SMS, transcripts, webhooks, and platform APIs.
- Python 3.9+, one dependency (
requests) - Docs: https://www.kaicalls.com/docs/api · Live OpenAPI:
GET /api/v1/openapi.json
Install
pip install kaicalls
Quick start
from kaicalls import KaiCalls
kai = KaiCalls(api_key="kc_live_...")
# Make an outbound call — the agent auto-enriches with CRM context
call = kai.calls.create(
agent_id="uuid-abc123",
to="+15125551234",
name="John Smith",
context="Following up on his kitchen remodel inquiry",
)
# Block until the call finishes, then read the AI summary
result = kai.calls.wait(call.id)
print(result.summary)
Responses support attribute access (call.id, result.summary, call.quality_dimensions.empathy) and behave like dicts.
No account yet? Sign up via the API
from kaicalls import KaiCalls, signup
account = signup(
business_name="Smith Law Firm",
email="contact@smithlaw.com",
plan_id="starter",
)
# account.api_key works immediately; send the owner to account.checkout_url
kai = KaiCalls(api_key=account.api_key)
What's wrapped
| Resource | Methods |
|---|---|
kai.calls |
create, get, list, wait |
kai.recordings |
get |
kai.agents |
list, get, create, update, versions |
kai.leads |
list, get, create, update, audit |
kai.sms |
send, update_prompt, conversations, messages |
kai.transcripts |
list |
kai.phone_numbers |
list, available, assign, release |
kai.workspaces |
list, get, create, update (lifecycle actions) |
kai.webhooks |
list, create, delete, test, rotate_secret |
kai.analytics |
dashboard, calls, funnel, agents, weekly, businesses |
kai.evals |
create, list, get, update, delete, run, get_run |
kai.events |
list, deliveries, replay, backfill |
kai.communication_runs |
validate, preview, create, list, pause, cancel, jobs, attempts |
kai.discovery |
capabilities, openapi, schemas, health |
kai.account |
balance, usage |
Anything not wrapped yet is reachable through the escape hatch:
kai.request("GET", "/api/sdr/pipeline", query={"businessId": "uuid-biz"})
Errors
All non-2xx responses raise KaiCallsError with .status, .code (e.g. unauthorized, forbidden, rate_limited), and .body.
from kaicalls import KaiCallsError
try:
kai.calls.create(agent_id=agent_id, to=to)
except KaiCallsError as err:
if err.code == "rate_limited":
... # back off and retry
Notes
- Get an API key at https://www.kaicalls.com/dashboard/settings/api. New keys default to read-only scopes — request write scopes (
calls:write,sms:write, …) when creating the key. - Phone numbers are E.164 (
+15125551234). - API reference: https://www.kaicalls.com/docs/api · Errors: https://www.kaicalls.com/docs/api/errors
Metadata
Release files for kaicalls 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| kaicalls-0.1.0.tar.gz | 10.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| kaicalls-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 18.6 kB
Release files / kaicalls-0.1.0.tar.gz
| Download URL | kaicalls-0.1.0.tar.gz |
|---|---|
| Size | 10.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1333b6270c2437af912f2bc7e7c1c2c5d5c2caef4931ada9f91df9dd81591c5a
|
|
BLAKE2b-256 checksum How to use checksums |
dbca9c90f63c42f888ecbcebaf5026cb7e89b1b911848f6d1ac5af1dd5ecd4e4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / kaicalls-0.1.0-py3-none-any.whl
| Download URL | kaicalls-0.1.0-py3-none-any.whl |
|---|---|
| Size | 8.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
58d3aebbf92ae18f87bab7e0f36d0ef2ea3c9316d2bfc3715c603e4d22b769ce
|
|
BLAKE2b-256 checksum How to use checksums |
d71e27c353c9a028a7a0e28dee0a81590c02b2c1af1a38101eb6bd3a220fe85c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|