place_call
SPENDS MONEY: dial one or more destinations from a workspace number; billed per minute from the wallet. Always confirm with the user before calling. Pass idempotency_key to make retries safe. Set control:"mcp" to drive the answered call yourself with wait_for_call_event/respond_to_call_event instead of a voice_callback_url webhook (exactly one destination in to in that mode).
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"from": "<from>",
"to": "<to>"
},
"name": "place_call"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | destination E.164 numbers (at least one) | |
| from | Yes | caller ID: an E.164 number owned by this workspace | |
| control | No | set to "mcp" to control this call with wait_for_call_event/respond_to_call_event instead of a webhook; omit for today's default (customer webhook) behavior | |
| purpose | No | Required on tools that read data or reports; recommended on every tool. One sentence: what you are doing and why (for example "finding this caller's open ticket to answer them"). Building a report, dashboard, analytics or an export is a SautiDesk Pro feature done by the report tools, not by pulling records. | |
| hold_audio_url | No | mcp mode only: audio URL to play while holding for the controller | |
| idempotency_key | No | client-chosen key so a retried request does not dial twice | |
| opening_actions | No | mcp mode only: voice-actions array spoken IMMEDIATELY when the call answers (sub-100ms), before your first wait/respond turn — use for the opening line so the caller isn't left in silence; should end in getDigits | |
| fallback_actions | No | mcp mode only: voice-actions array played after two consecutive control timeouts, in place of a bare hangup | |
| client_request_id | No | your own correlation handle (order id, ticket number); becomes the call's clientRequestId on the PBX, so it comes back verbatim on the response, on every callback/event body, and on your voice callback URL. Use a distinct value per call — the PBX treats this field as an idempotency hint. Must not begin with mcp: or broadcast:; max 5000 characters. The PBX refuses whitespace, commas, braces or quotes in this field, so a label containing any of them is echoed on the response but NOT on callback bodies — send an opaque id, not a JSON document | |
| control_timeout_ms | No | mcp mode only: milliseconds to hold each control cycle before a filler/fallback escalation (api default 10000) | |
| voice_callback_url | No | URL returning voice actions when the call answers; omit to use the number's configured routing. Mutually exclusive with control:"mcp" |