Skip to main content
Glama

Transfer a live call

transfer_call
Destructive

Blind-transfer a live call leg to an E.164/SIP destination or custom VobizXML URL, replacing its current IVR, playback, or bridge flow. Requires confirmation.

Instructions

Blind-transfer a LIVE call (POST /Call/{uuid}/): Vobiz stops whatever the chosen leg is doing (IVR, playback, bridge) and fetches new VobizXML from the transfer URL. Give either destination (an E.164 number or sip: URI; this server hosts a flow for it, A leg only, HTTP mode with VOBIZ_PUBLIC_URL) or your own aleg_url / bleg_url on an approved host, never both. For an attended (warm) transfer build the flow with generate_answer_xml (hold music, then dial) and pass its URL. To park a leg use hold_call, to run a keypad menu on it use gather_dtmf, to end the call use end_call. A destination number must pass the server's destination policy and becomes a new, billed call leg; a call that is not live fails with call_not_active. Requires confirm: true.

Input Schema

NameRequiredDescriptionDefault
legsNoLeg to transfer: aleg (the call's first leg, default), bleg (the party bridged by <Dial>) or both. With `destination` only aleg is allowed.
confirmYesMust be true, set only after the user explicitly asked to transfer this call. If your client supports MCP elicitation, the server asks the user to approve directly and this flag is not relied on; otherwise it is your attestation that the user approved.
aleg_urlNohttps URL on an approved host that returns the VobizXML the A leg runs next. Required when legs is aleg or both and no destination is given.
bleg_urlNohttps URL on an approved host that returns the VobizXML the B leg runs next. Required when legs is bleg or both.
call_uuidYesUUID of the LIVE call to act on: the request_uuid returned by make_call, or a UUID from list_live_calls.
caller_idNoCaller ID the destination sees: an E.164 number on this account. Only used together with `destination`.
aleg_methodNoHTTP method Vobiz uses to fetch aleg_url: GET or POST (default POST).
bleg_methodNoHTTP method Vobiz uses to fetch bleg_url: GET or POST (default POST).
destinationNoWhere to connect the A leg: an E.164 number such as +14155550100, or sip:user@host. The server hosts the <Dial> flow (HTTP mode only). Not combinable with aleg_url/bleg_url.

Output Schema

NameRequiredDescriptionDefault
okNoTrue on success. On a failure the result is isError with ok: false plus `error` (kind), `message`, `retryable` and sometimes `http_status`.
legsNoThe leg(s) the action was applied to (aleg when none was given).
call_uuidNoThe call UUID the action was applied to, echoed from the request.
http_statusNoHTTP status Vobiz answered with: 202 when an action was accepted, 204 when one was stopped.
transferredNoTrue once Vobiz accepted the transfer; the leg fetches and runs the new XML asynchronously.
backend_messageNoVobiz's own confirmation text for the request, or null when it sent none.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changedv1.4.2
    • addedInput schema / properties / aleg_method / description
      Added value: +"HTTP method Vobiz uses to fetch aleg_url: GET or POST (default POST)."
    • changedInput schema / properties / aleg_url / description
      Previous value: -"XML URL for the A leg (approved host only)."New value: +"https URL on an approved host that returns the VobizXML the A leg runs next. Required when legs is aleg or both and no destination is given."
    • addedInput schema / properties / bleg_method / description
      Added value: +"HTTP method Vobiz uses to fetch bleg_url: GET or POST (default POST)."
    • changedInput schema / properties / bleg_url / description
      Previous value: -"XML URL for the B leg (approved host only)."New value: +"https URL on an approved host that returns the VobizXML the B leg runs next. Required when legs is bleg or both."
    • addedInput schema / properties / call_uuid / description
      Added value: +"UUID of the LIVE call to act on: the request_uuid returned by make_call, or a UUID from list_live_calls."
    • changedInput schema / properties / caller_id / description
      Previous value: -"Caller ID for the transferred leg (a number on this account)."New value: +"Caller ID the destination sees: an E.164 number on this account. Only used together with `destination`."
    • changedInput schema / properties / confirm / description
      Previous value: -"Must be true, set only after the user explicitly asked to transfer this call."New value: +"Must be true, set only after the user explicitly asked to transfer this call. If your client supports MCP elicitation, the server asks the user to approve directly and this flag is not relied on; otherwise it is your attestation that the user approved."
    • changedInput schema / properties / destination / description
      Previous value: -"Number or SIP URI to connect the call to."New value: +"Where to connect the A leg: an E.164 number such as +14155550100, or sip:user@host. The server hosts the <Dial> flow (HTTP mode only). Not combinable with aleg_url/bleg_url."
    • changedInput schema / properties / legs / description
      Previous value: -"Which call leg: aleg (default), bleg or both."New value: +"Leg to transfer: aleg (the call's first leg, default), bleg (the party bridged by <Dial>) or both. With `destination` only aleg is allowed."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": {},
      +  "properties": {
      +    "backend_message": {
      +      "description": "Vobiz's own confirmation text for the request, or null when it sent none.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "call_uuid": {
      +      "description": "The call UUID the action was applied to, echoed from the request.",
      +      "type": "string"
      +    },
      +    "http_status": {
      +      "description": "HTTP status Vobiz answered with: 202 when an action was accepted, 204 when one was stopped.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "legs": {
      +      "description": "The leg(s) the action was applied to (aleg when none was given).",
      +      "enum": [
      +        "aleg",
      +        "bleg",
      +        "both"
      +      ],
      +      "type": "string"
      +    },
      +    "ok": {
      +      "description": "True on success. On a failure the result is isError with ok: false plus `error` (kind), `message`, `retryable` and sometimes `http_status`.",
      +      "type": "boolean"
      +    },
      +    "transferred": {
      +      "const": true,
      +      "description": "True once Vobiz accepted the transfer; the leg fetches and runs the new XML asynchronously.",
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observedv1.1.1

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation/destructive/open-world profile, and the description adds meaningful context on top: the call must be live or it fails with call_not_active, a destination becomes a new billed call leg, the destination policy must approve the number, and confirm: true is required. This discloses side effects and failure behavior beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and endpoint, then layers routing rules and alternatives. It is a dense single paragraph, but nearly every clause carries a distinct constraint or routing decision; only minor overlap with the schema keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutating tool with an output schema already present, the description covers what it must: operation mechanics, required attestation, mutual exclusivity, prerequisites and the failure mode. Return values need not be explained since the output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantics: destination and aleg_url/bleg_url are mutually exclusive, destination forces legs=aleg and HTTP mode, and URLs must be on an approved host. These constraints go beyond the per-field schema text, though some overlap remains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Blind-transfer a LIVE call') with the HTTP route, and immediately distinguishes itself from hold_call, gather_dtmf and end_call by listing them as the alternatives for other leg actions. An agent can identify the tool and its operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly covers when-to-use variants: blind transfer by default, attended/warm transfer via generate_answer_xml, and the mutually exclusive choice between destination and own aleg_url/bleg_url. It also routes the agent away to hold_call, gather_dtmf and end_call for other leg operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools