Drive a call from your own application the way a PBX operator would: place it, put it on hold, transfer it — blind or after a consult — send DTMF, and hang it up. These are the call-control verbs of TeleQuick Voice’s engine-native ECMA CSTA surface. Each wire verb maps to a standard CSTA operation, so if you already speak CSTA you already know what these do — you just send them over the CTI control leg instead of a vendor SDK.
Every verb on this page belongs to the call_control scope. The short-lived CTI token your control-plane API mints must carry call_control in its scopes claim, or the engine refuses the verb. Per-call verbs are also tenant-checked against the call they name — you can only act on calls in your own workspace. See Connect & authorize.

Verbs at a glance

Wire verbCSTA operationWhat it does
makeCallMake CallOriginate a new call over a SIP trunk
clearConnectionClear ConnectionRelease / hang up a call
holdCallHold CallPut a connected party on hold
retrieveCallRetrieve CallTake a held party back off hold
singleStepTransferSingle Step Transfer CallBlind transfer to a destination
consultationCallConsultation CallHold the call and dial a consult target
transferCallTransfer CallComplete a consultative transfer
cancelConsultationReconnect CallDrop the consult, return to the held party
generateDigitsGenerate DigitsSend DTMF into the call

How a verb call looks on the wire

The CTI control leg carries length-prefixed, correlated request/reply lines. A request is the verb name, a tab, and a JSON argument object; the engine answers with a JSON reply correlated to that request. (The first line on any connection is always auth\t<jwt> — see the overview.)
Request wire
makeCall	{"trunkId":"trunk_main","to":"+15551234567","from":"+15558675309"}
Reply
{ "ok": true, "callId": "C-8f3a2b" }
A reply is the acknowledgement that the engine accepted the verb. The actual state change — delivered, established, held, retrieved, transferred, cleared, failed — arrives asynchronously as a CSTA event on the cti event track you subscribe once for the whole tenant. Treat the reply as “the engine took the request” and the event as “the call actually changed.” See Routing & events.
The verb names are the API. A polyglot SDK, if you use one, exposes each verb as a method of the same name under the call_control surface and manages the request/reply correlation for you — the JSON args below are identical either way. Custom clients speaking raw MoQT or the cti WebSocket subprotocol send the wire lines directly.

Originate a call — makeCall

Places a new outbound call over a provisioned SIP trunk. Maps to CSTA Make Call. The reply carries the callId you use to address the call in every later verb.
trunkId
string
required
The SIP trunk to originate over. Provision it first — see SIP trunking.
to
string
required
Destination number in E.164 (+15551234567).
from
string
required
Caller ID to present. Must be a number routable on trunkId.
makeCall	{"trunkId":"trunk_main","to":"+15551234567","from":"+15558675309"}
{ "ok": true, "callId": "C-8f3a2b" }
The call is now originating. Watch for a delivered then established event on the event track to know it rang and connected.

Release a call — clearConnection

Ends a call. Maps to CSTA Clear Connection. Use it to hang up whether the call is ringing, connected, or held.
callId
string
required
The call to release.
reason
string
A short release reason recorded on the call (normal, busy, rejected, caller_abandon, …). Informational; the call is released regardless.
clearConnection	{"callId":"C-8f3a2b","reason":"normal"}
{ "ok": true }
A cleared event follows once both legs tear down.

Hold and retrieve — holdCall / retrieveCall

Put a connected party on hold and take them back. These map to CSTA Hold Call and Retrieve Call. Hold plays the trunk’s configured hold treatment to the far party; retrieve reconnects the media path.
callId
string
required
The connected call to hold or retrieve.
holdCall	{"callId":"C-8f3a2b"}
retrieveCall	{"callId":"C-8f3a2b"}
{ "ok": true }
Confirm with the held and retrieved events. Holding is also the first thing consultationCall does for you — see below.

Blind transfer — singleStepTransfer

Transfer a call straight to another destination without speaking to it first. Maps to CSTA Single Step Transfer Call. The engine redirects the party and drops your control of the original leg in one step — there is no consult phase.
callId
string
required
The call to transfer away.
destination
string
required
Where to send it — an E.164 number or a routable extension/agent address.
callerId
string
Caller ID to present to the destination. Defaults to the original party’s identity when omitted.
singleStepTransfer	{"callId":"C-8f3a2b","destination":"+15557654321","callerId":"+15558675309"}
{ "ok": true, "callId": "C-8f3a2b" }
A transferred event fires when the new leg is established. After a blind transfer you no longer control the call.

Attended (consultative) transfer

An attended transfer is a three-verb sequence: hold the caller and dial a consult target, talk to them, then either complete the transfer or cancel and return to the caller. This is the standard CSTA consult-then-transfer flow.
1

Start the consult — consultationCall (CSTA Consultation Call)

Puts callId on hold and originates a new consult leg to target over a trunk. You end up talking privately to the target while the original party waits on hold. The reply returns the consult call’s id.
callId
string
required
The active call to consult from. It is placed on hold.
target
string
required
Who to consult — E.164 number or routable extension/agent address.
trunkId
string
required
The SIP trunk to originate the consult leg over.
fromDisplay
string
Caller ID / display name to present on the consult leg.
consultationCall	{"callId":"C-8f3a2b","target":"+15557654321","trunkId":"trunk_main","fromDisplay":"Front Desk"}
{ "ok": true, "consultCallId": "C-11d0e7" }
2

Complete it — transferCall (CSTA Transfer Call)

Connects the held original party directly to the consulted party and drops you out of both legs. Name the original callId; the engine joins it to its outstanding consult.
callId
string
required
The original call whose consult you are completing.
transferCall	{"callId":"C-8f3a2b"}
{ "ok": true }
A transferred event confirms the two parties are now connected to each other.
3

…or abandon it — cancelConsultation (CSTA Reconnect Call)

If the consult doesn’t pan out, drop the consult leg and reconnect to the party you had on hold. This is CSTA Reconnect Call: it clears the consult connection and retrieves the held original in one verb.
callId
string
required
The original call to return to. The consult leg is cleared and this call is retrieved from hold.
cancelConsultation	{"callId":"C-8f3a2b"}
{ "ok": true }
You are back in conversation with the original party, exactly as before the consult. A retrieved event confirms it.
Use singleStepTransfer when you don’t need to speak to the destination first, and the consultationCalltransferCall / cancelConsultation sequence when you do. The difference is entirely whether there’s a consult phase you can back out of.

Send DTMF — generateDigits

Push DTMF digits into a call — for driving a far-end IVR, entering a conference PIN, or navigating a menu. Maps to CSTA Generate Digits.
callId
string
required
The call to send digits into.
digit
string
required
The digit(s) to send: 09, *, #, and AD. Send one or a short string.
mode
string
default:"rfc2833"
How the digits are carried:
rfc2833 — in-band RTP telephone-event tones (RFC 2833 / 4733). The default and the most widely interoperable.
info — out-of-band SIP signalling. Use when the far end expects signalled DTMF rather than RTP events.
generateDigits	{"callId":"C-8f3a2b","digit":"1234","mode":"rfc2833"}
generateDigits	{"callId":"C-8f3a2b","digit":"#","mode":"info"}
{ "ok": true }
Not every far end accepts every DTMF mode. If a downstream IVR ignores your digits, try the other mode — mismatched DTMF transport (RTP events vs. signalled) is the usual cause.

Errors

A refused verb replies with ok: false and a machine-readable error. Common causes: the token is missing the call_control scope, the callId doesn’t belong to your tenant (or no longer exists), or the trunk named in makeCall / consultationCall isn’t provisioned.
Reply — refused
{ "ok": false, "error": "scope_required", "detail": "call_control" }
A reply only tells you the verb was accepted or rejected. It never carries the final call state — always drive your UI and workflow from the event track, which delivers delivered / established / held / retrieved / transferred / cleared / failed as they happen.

CTI (CSTA) overview

Connect the control leg, mint a scoped CTI token, and understand the frame format these verbs ride on.

Routing & events

Subscribe the CSTA event track and register as a route point to select call destinations.

Agent state

Set login / ready / not-ready / after-call-work with setAgentState.

PBX & ACD

How hold, transfer, and queueing fit the contact-center routing model.

SIP trunking

Provision the trunks that makeCall and consultationCall originate over.

High availability

CTI verbs resolve against the surviving nodes through a node failure.