How to make an AI agent call a business
Your agent can search, read and write. Ask it to ring a parts counter and it stops, because an ordinary business line has no API. There are three routes from here. This guide covers what each one needs, then walks through one in code.
The three routes at a glance
Whatever you pick, the agent needs the same thing at the end: an answer it can act on. A transcript alone is not enough. The agent needs to know whether the part is in stock and when it arrives.
| Route | What you build or run | Who speaks on the call |
|---|---|---|
| Build a voice agent | Telephony, speech recognition, speech synthesis, a model, call logic, recording consent | Synthetic voice |
| Hand the call to a person over an API | One HTTP request, then polling or a webhook | A real person |
| Do it yourself | Nothing, but your own time | You |
Route one: build a voice agent
This route gives you full control. It also gives you the whole stack. You need a phone number, a way to stream audio in both directions, speech recognition, speech synthesis and a model that holds the conversation. You also need logic for phone menus, hold music, interruptions and a person who answers with a question you did not expect.
Then come the non-code parts: telling the other side who is calling, handling recording notices, and deciding what the system must never say or agree to. Some businesses hang up on a synthetic voice. If that matters to you, read a human caller or an AI voice agent.
Route two: hand the call to a person over an API
Here your agent sends a task and gets a typed result back. A real person at HumanCalls dials the business, asks your questions and records the answers. They say who they are and who they are calling for, and they tell the business the call is recorded. Calls go to businesses in the United States and Canada during the business's local hours, so a result can take from a few minutes to the next business morning.
You choose the fields you want back. The result arrives as values your code can read, plus a summary, a recording and a transcript. Chat apps can use the same service over MCP at https://humancalls.ai/mcp. See connect a chat app or the developer docs.
Some requests are not accepted: sales, debt collection, political calls, cold calls to consumers, sensitive healthcare workflows and anything deceptive. A caller also never buys, books or agrees to anything you did not authorize.
Route three: do it yourself
For one call a month, pick up the phone. It costs nothing and you control every word. It stops making sense once your agent needs the same kind of call repeatedly, such as checking stock across several suppliers, and you do not want a person in the loop of your own workflow.
Worked example: POST /v1/calls, poll, read the result
Everything below is example data. Harbor Supply Co., Acme Robotics and the 555 number are fictional.
- Create a key with
POST /v1/signup. The key is shown once and stays pending until the owner confirms the emailed link. Ask your human to verify. - Check
GET /v1/accountwith your bearer key. A verified workspace gets 10 free minutes. - Send the call, with an
Idempotency-Keyunique to the task.
curl -X POST https://humancalls.ai/v1/calls \
-H "Authorization: Bearer $HC_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: job-4821-stock-check" \
-d '{
"to": "+12125550100",
"business": "Harbor Supply Co.",
"on_behalf_of": "Acme Robotics",
"goal": "Confirm stock and earliest delivery for SKU 7712",
"max_minutes": 10,
"collect": {
"in_stock": {"type": "boolean", "required": true},
"delivery_date": {"type": "date", "description": "Earliest delivery date"}
},
"delivery": {"mode": "polling"},
"metadata": {"agent_job_id": "job-4821"}
}'A 202 means the task was created. Repeating the same request with the same key returns 200, and reusing the key with a different body returns 409. A 402 means there was not enough credit and nothing was queued. A 403 means the owner has not verified yet.
Now poll GET /v1/calls/:id. The status moves from queued to assigned, dialing and in progress, then ends as completed, failed, no_answer, declined or canceled. You can cancel with POST /v1/calls/:id/cancel only while the task is queued or assigned. Recordings and transcripts can arrive after completion, so keep polling until the URLs are present.
{
"status": "completed",
"outcome": {
"in_stock": true,
"delivery_date": "2026-11-18"
},
"outcome_notes": "Stock is held at the regional warehouse.",
"summary": "Harbor Supply Co. confirmed SKU 7712 is in stock, with delivery on 18 November.",
"duration_seconds": 492,
"billed_minutes": 9,
"cost_usd": 9.00,
"recording_url": "https://humancalls.ai/...",
"transcript_url": "https://humancalls.ai/...",
"metadata": {"agent_job_id": "job-4821"}
}Read outcome first. An optional field the caller could not get comes back as null, so check for that. Fetch the recording and transcript with your bearer key. If you would rather not poll, use a verified webhook connection instead.
What it costs
$1 per connected minute, rounded up. Phone menus and hold time after the business answers count. Ringing does not. A call nobody answers, a declined call and a canceled call cost $0. In the example, 492 seconds rounds up to 9 minutes, so the call costs $9. The agent cannot buy credit through the API: the owner tops up. See pricing.
Which route to pick
- Build a voice agent if the voice interaction is your product.
- Use a person over an API if your agent only needs the answer, for jobs like checking stock and price or confirming opening hours.
- Call yourself if it happens rarely.
For how callers work and what they always and never do, see trust and process.
Questions
- Can an AI agent call a business on its own?
- Not on an ordinary phone line without telephony and voice software behind it. Your agent can send the task to a service where a real person makes the call, then read the typed result.
- Do I need a webhook to get the result?
- No. Pass
delivery: {"mode": "polling"}and pollGET /v1/calls/:id. Webhooks are an option once you have a verified connection. - What happens if the business does not answer?
- The task ends as no_answer and costs $0. The credit reserved for it is released.
- Can my agent top up credit itself?
- No. Only the owner adds credit, through a checkout link on their dashboard. The API can report the balance.
- Which numbers can be called?
- Businesses in the United States and Canada. Calls are placed in the business's local hours.
Related
- An MCP server for phone callsThe HumanCalls MCP server lets Claude, ChatGPT and other clients ask a real person to phone a business. Address, sign-in and the seven tools.
- Can ChatGPT make phone calls?ChatGPT cannot ring an ordinary business line by itself. Here is what voice mode does, what AI voice agents do, and how to have a real person call for you.
- Collect quotes by phoneHave a real person phone several vendors with the same questions and return price, lead time and terms as comparable fields for you or your AI agent.
Try it with 10 free minutes
$1 per connected minute after that, and nothing when nobody picks up.