Human Handoff

An assistant that can only say “I can't help with that” is a dead end. With handoff enabled, your assistant recognises when a request is beyond it, offers to connect the visitor with a real person, and — once they agree — files a support request with the conversation attached.

#Writing your escalation policy

Open your project → SettingsHuman Handoff, switch it on, and describe in plain English when the assistant should escalate. You are writing instructions for the model, not configuring a rules engine:

text
Escalate if a payment is delayed more than 5 days, for any
refund request, or any account-access problem.
Always ask before connecting.

The model reasons against that text. A visitor who says “I sent money 12 days ago and it never arrived” crosses your five-day line, so it offers a handoff. Someone who says “I sent it yesterday” doesn't. You never write the threshold logic — you just state the policy the way you would explain it to a new support hire.

Leave it blank and the assistant offers a handoff whenever someone asks for a person, or when it clearly can't help.

It always asks first
The assistant offers and waits for a clear yes before escalating. It is also instructed never to promise a response time, because it has no idea when your team is available.

#Where requests go

Every request lands in the Handoffs tab of your project, always. On top of that you can enable:

Email — sent to your Voxide account address with the summary, contact details and a transcript excerpt.

Webhook — we POST JSON to a URL you control, so you can route it into your own helpdesk:

json
{
"type": "handoff.requested",
"requestId": "…",
"projectId": "…",
"projectName": "Acme Payments",
"reason": "payment_not_received",
"summary": "Sent a payment 12 days ago, still not received.",
"visitorContact": "jane@example.com",
"transcript": [ { "role": "user", "text": "…" } ],
"dashboardUrl": "https://voxide.app/dashboard/…?tab=handoffs",
"createdAt": "2026-07-21T10:04:00.000Z"
}
Nothing gets lost
The request is saved before any delivery is attempted, so a bounced email or a webhook that is down can never lose it. Failures are shown against the request in the Handoffs tab rather than swallowed.
Webhook URLs must be public HTTPS
We resolve the hostname and refuse to send to private or internal addresses, and re-check on every redirect. Pointing it at localhost or an internal IP will be rejected.

#What the transcript contains

Transcripts attached to a handoff have already had personal data removed — see Privacy & Redaction. If your support team needs a phone number to act on a request, ask for it via the “collect contact details” option, which stores it deliberately in its own field rather than relying on it surviving in the conversation.

Reserved tool name
Handoff works by giving the model a tool called escalate_to_human. If you register a capability with that exact name, yours takes precedence and handoff is silently skipped for that project — so pick a different name for your own action.