# Warm transfer: how to hand a live call from an AI agent to a person

> A warm transfer passes a live call to a person with context. Learn warm vs cold transfer, and how an AI phone agent hands over a call on Hail.

- URL: https://hail.so/blog/warm-transfer
- Type: Guide
- Tags: voice-agent, inbound, transfer
- Published: 2026-11-02
- Reading time: 6 min

A warm transfer passes a live call to another person, and tells that person who is calling and why before they talk. The caller does not repeat their story. With an AI phone agent, a warm transfer is how the agent gets a person into the call when it cannot or must not finish the task.

This guide explains warm and cold transfers, how call centers use them, and how a Hail agent hands over a call.

## What is a warm transfer?

In a warm transfer, the first person (or agent) stays on the line until the second person answers. Then they give a short summary: the caller's name, the problem, and what was already tried. After that, the first person leaves the call.

Without a summary, the caller may need to explain the problem again.

## Warm transfer vs cold transfer

| | Warm transfer | Cold transfer |
| --- | --- | --- |
| Who answers first | The person who takes over hears a summary | The person who takes over hears the caller only |
| Caller repeats the problem | No | Usually yes |
| Time for the first agent | Stays until the second person answers | Leaves at once |
| If nobody answers | The first agent can come back and take a message | The call can end up in voicemail or a queue |
| Best for | Upset callers, urgent cases, sales | Simple routing, such as "billing, press 2" |

A cold transfer is faster for the first agent. A warm transfer is faster for the caller. For an AI agent, staying on the line costs no staff time, so a warm transfer is the better default.

## Warm transfer in a call center

Call centers use warm transfers when a call moves to a specialist or a supervisor. The usual steps are:

1. The agent tells the caller that they will bring in a colleague.
2. The agent calls the colleague, and the caller stays connected.
3. When the colleague answers, the agent gives the summary.
4. The agent leaves, and the colleague takes over.

The same steps work with an AI agent at the start. The difference is who decides to transfer. You must write that rule down, because the AI agent follows its instructions and nothing else.

## How an AI agent hands over a call on Hail

Connect Hail to your AI assistant through the [MCP setup guide](https://hail.so/mcp).
Start with an agent that already answers your Hail number.
The [AI phone agent guide](https://hail.so/blog/ai-phone-agent) explains that setup.

Replace the parts in capitals. Paste this request into your AI assistant:

**Request for your AI assistant:**

```prompt
Update AGENT NAME in Hail so billing calls go to CONTACT NAME.
Ask me which agent and contact to use if either name is unclear.
Ask for a phone number if the contact does not have one.
Keep the other transfer contacts and rules.
Show me the proposed settings before you apply them.
```

Your assistant can find the contact and update the agent through MCP.
Each transfer contact has a short note that tells the agent when to call them.

When the agent transfers a call:

- The caller stays connected while Hail calls the person you chose.
- The person has 30 seconds to answer. If nobody answers, the agent returns to the caller.
- When the person answers, the agent explains who is calling and why. Then it goes silent.

## Write handover notes the agent can follow

Use each note for a short transfer rule. Put longer rules in the agent instructions.
Unclear notes can make the agent transfer too often or miss a transfer. Use this checklist:

- [ ] Name the situation the caller is in: "a water leak right now", not "plumbing".
- [ ] Say what makes it urgent: "cannot get into the building", "card was charged twice".
- [ ] Give each person a different situation. Two people with the same note make the agent guess.
- [ ] Add "an angry caller" or "asks for a person" to one contact, so callers always have a way out.
- [ ] Keep it under 200 characters. Put long rules in the system prompt instead.
- [ ] Tell the person on the list that they may get these calls, and from which number.

Ask your AI assistant to add these rules to the agent's current instructions:

**Instructions for the phone agent:**

```prompt
Before you transfer, tell the caller: "I will bring in a colleague now. Please stay on the line."
Then transfer the call.
If nobody answers, ask for the caller's name, number, and reason for calling.
Do not promise a callback.
```

## Test the warm transfer

1. Add yourself as a contact with a test note, such as "the caller says the word blue".
2. Call the Hail number that uses this agent from your own phone.
3. Say the word. Check that your second phone rings with the Hail number as caller ID.
4. Answer and listen to the summary. Is it short and correct?
5. Try again and let it ring for 30 seconds. Check that the agent offers to take a message.
6. If you use webhooks, check that your server receives `call.transferred` with the right `contact_name`.

For the full agent setup, read [what an AI phone agent is](https://hail.so/blog/ai-phone-agent). For a night line that hands emergencies to an on-call person, read the [after hours answering service guide](https://hail.so/blog/after-hours-answering-service). The [voice overview](https://hail.so/voice) explains the other ways to use Hail.

## Set up warm transfer with the API (optional)

Use this option if you prefer to change the agent from your own code.
Keep your API key on your server, in `HAIL_API_KEY`.

Set `AGENT_ID` to the agent ID from `GET /v1/agents`.
Use IDs from `GET /v1/contacts` for `SALES_CONTACT_ID` and `BILLING_CONTACT_ID`.
Copy each full ID, including `member:` for a team member.

This request replaces the agent's transfer list. Include each person you want to keep.

```bash
curl -X PATCH "https://api.hail.so/v1/agents/$AGENT_ID" \
  -H "Authorization: Bearer $HAIL_API_KEY" \
  -H 'Content-Type: application/json' \
  --data '{
    "handover_contacts": [
      {"contact_id": "'"$SALES_CONTACT_ID"'", "note": "sales questions"},
      {"contact_id": "'"$BILLING_CONTACT_ID"'", "note": "billing questions or an angry caller"}
    ],
    "handover_max_duration_seconds": 1200
  }'
```

What happens, from the [Hail agents docs](https://github.com/hail-hq/hail/blob/main/docs/public/agents.md#hand-over-to-a-person):

- **Who you can add.** Up to 10 people. Use the id that `GET /v1/contacts` shows: a contact's uuid, or `member:<user id>` for a team member. Each person needs a phone number in a country where Hail sells numbers.
- **The note.** 1 to 200 characters. Write the situation, not the person's job title.
- **The tool.** Saving contacts gives the agent the `transfer_call` tool. The agent never sees a phone number.
- **Caller ID.** The person sees your Hail number when their phone rings.
- **No answer.** The person has 30 seconds to answer. If they do not, the agent comes back to the caller and offers to take a message.
- **The summary.** When the person answers, the agent says who is calling and why. Then it goes silent. If either side hangs up, the call ends.
- **Time limit.** `max_duration_seconds` stops after the person answers. `handover_max_duration_seconds` (60 to 3600, default 1800) counts from the answer. At the limit, the agent says goodbye and the call ends.
- **Billing.** The whole call bills as one call at the normal voice rate. See [pricing](https://hail.so/pricing).
- **Webhook.** Hail sends `call.transferred` once, when the person answers. Its `data.transfer` has `contact_id` and `contact_name`, never a phone number.
- **Checks.** Hail checks each contact's number when you save the list, and again before it dials.

To clear the list, send `"handover_contacts": []`. With the CLI: `hail agents update <id> --handover "member:<user-id>=sales questions"`.
