Caller speaks
The carrier transcribes the caller's speech and posts the text to AkA Phone AI.
Give your AI agent a real phone number. Define an agent — a goal, a backstory, a voice — and AkA Phone AI runs the calls and texts for it, voicing the conversation with an LLM. No audio streams or webhooks to wire up.
OPENCLAW · CLAUDE · CODEX · GEMINI · CURSOR · WINDSURF · OPENAI AGENTS · NODE · PYTHONAkA Phone AI handles the voice loop. Your agent handles the answer.
The carrier transcribes the caller's speech and posts the text to AkA Phone AI.
Your agent's goal, backstory, and history go to the LLM, which writes the next line.
ElevenLabs voices the reply and the caller hears it.
The loop continues until the task is done, then the call ends.
Buy multiple numbers and attach each one to an agent.
See outbound, received, missed, and rejected calls with both numbers.
See sent and received SMS in one chronological record.
Add credits in the app and inspect usage without leaving the workspace.
The phone tools your agent drives over MCP.
create_agentCreate an agent with your own unique id; it gets a dedicated number and is voiced by the server LLM.
get_agentFetch one agent, including whether it is currently running.
list_agentsList every agent in your account with its number and status.
pause_agent / resume_agentPause or resume an agent. Persisted across restarts; agents also auto-stop after 30 days.
make_callPlace a call from an agent's number, described by a task. The server runs the whole conversation.
get_callRead a call's status, duration, and full transcript (how the SDK waits for a call to finish).
list_transcriptsList an agent's past calls with timestamps, direction, duration, and transcript.
new_calls / new_messagesReturn inbound calls/SMS received since the last check and mark them read.
send_smsSend an exact SMS from an agent's number.
phone_statusRead provider readiness and the workspace credit balance.
Pick a client. Create one API key. Copy one setup line.
Cursor config also works in Windsurf. OpenAI Agents can use the Node or Python client. Keep the token on the server; never put it in browser code.
The carrier transcribes speech; an LLM writes each reply; ElevenLabs speaks it. No audio or webhooks to host.
01Caller dials your number02 → Twilio posts the recognized03 speech to AkA Phone AI04 → the agent's LLM writes the next line05 → ElevenLabs voices it back06 → repeat until the task is done01make_call(from, to, task)02 → the task is safety-checked03 → AkA Phone AI dials and opens04 the same voice loop05 → the LLM runs the whole call06 from your task descriptionAn agent stops answering after 15 minutes without a ping_agent. The SDK Agent auto-pings via keepAlive() / keep_alive().
Create an agent, buy a number, then make a call.
npm i @aka-phone-ai/sdk01import { AkaPhoneAI } from "@aka-phone-ai/sdk";02
03// Just your API key. Pass an endpoint only to target a specific server.04const akaPhoneAi = new AkaPhoneAI(process.env.AKA_PHONE_AI_API_KEY, { endpoint: "https://app.akaphone.ai/mcp" });05
06// Create an agent with your own id. It gets a dedicated number and the07// server voices it with an LLM.08const agent = await akaPhoneAi.createAgent({09 id: "booking-agent",10 name: "Bookings",11 goal: "Book a table for two and confirm the time.",12 backstory: "You are a concise, friendly assistant.",13});14
15// Place the call and wait for the transcript.16const call = await agent.makeCall(17 "+14155550100",18 "Book a table for two on Friday at 7:30pm.",19);20console.log(call.durationSeconds, call.transcript);pip install aka-phone-ai01import os02from akaphoneai import AkaPhoneAI03
04aka_phone_ai = AkaPhoneAI(os.environ["AKA_PHONE_AI_API_KEY"], endpoint="https://app.akaphone.ai/mcp")05
06# Create an agent with your own id. It gets a dedicated number and the07# server voices it with an LLM.08agent = aka_phone_ai.create_agent(09 "booking-agent",10 name="Bookings",11 goal="Book a table for two and confirm the time.",12 backstory="You are a concise, friendly assistant.",13)14
15# Place the call and wait for the transcript.16call = agent.make_call("+14155550100", "Book a table for two on Friday at 7:30pm.")17print(call["durationSeconds"], call["transcript"])create_agent input01akaPhoneAi.createAgent({02 id: "booking-agent",03 name: "Bookings",04 goal: "Book a table for two and confirm the time.",05 backstory: "Concise and friendly. Never invent details.",06});Small programs that happen to own a phone.
Qualify an opted-in lead and schedule a viewing. Please do not let the agent invent a new roof.
Call, ask for a table, and store the confirmation. If 7:30 is gone, the agent can bravely try 8:00.
You could automate the reminder. You should probably still call your dad yourself.