A phone number API for AI agents
KaiCalls gives an AI agent its own US phone number that it can call out from, answer and text from, through one MCP server or REST API.
Your agent keeps its own reasoning. KaiCalls handles the number, the live voice on the call, consent and calling-hour checks, and sends the result back to your agent as an event.
What the number does
The number belongs to the agent. Outbound calls show it as the caller ID, people can call it back, and texts come from it. Search for an available number, buy it and attach it to an agent from the same connection.
- Outbound calls with the task in context, for example asking a supplier, office or clinic a question
- Inbound calls answered on the agent’s own line, with voicemail and transcripts
- Ring-first: a person’s cell rings first, and the agent picks up when nobody does
- Texts from the same number, so a reply lands in the same conversation
- Recordings, transcripts and a status for every call
How a call comes back to your agent
Pass your own reference with the call. Every event about that call carries it, so your agent can match the outcome to the job that asked for it. Events are signed, so your webhook can check they came from KaiCalls.
If the person on the line asks something only your agent or its owner can answer, the call raises a pending question instead of guessing. Your agent answers it once and the call carries on.
Rules checked on every call
Consent, do-not-call lists and calling hours are checked by the server before a call goes out, and a refusal says which rule blocked it. An idempotency key on each request means a retry never dials twice.
Tools for phone calls
| Tool | What it does |
|---|---|
search_available_numbers | Find a US number to buy, by area code |
buy_number | Buy the number for the account |
attach_number | Put the number on an agent |
make_call | Place an outbound call with the task in context |
check_call_status | Read where a call is and how it ended |
answer_call_question | Answer a question the call is waiting on |
get_transcript | Read what was said on a call |
get_call_recording | Fetch the recording of a call |
set_branded_caller_id | Show a business name with the number |
The same tools are on the MCP server, the REST API and the Python SDK.
call.started external_ref "job_8812" call.question_pending "How many guests on Saturday?" call.completed outcome booked, external_ref "job_8812" call.recording.saved recording ready
Questions
- Can an AI agent have its own phone number?
- Yes. With KaiCalls an agent gets a real US number. It can place calls from it, answer calls to it, take voicemail and send texts, and every outcome is sent back to the agent as a signed event.
- Does my agent need its own voice model to make calls?
- No. KaiCalls runs the live voice on the call. Your agent sends the task and receives the result, and it answers any question the call raises mid-conversation.
- Can the agent call personal cell phones?
- Only when consent allows it. The server checks consent, do-not-call lists and calling hours before every call. Calls to businesses on behalf of the owner, and callbacks to people who called the business first, are the main uses.
- How do I connect it?
- Add the remote MCP server at https://www.kaicalls.com/api/mcp to any MCP client, or use the REST API and the Python SDK. The same tools are available on each.