Skip to main content

GoToConnect API Endpoints & Capabilities

References:
https://developer.goto.com/GoToConnect#tag/Call-Events-Overview/Examples/Recordings
https://developer.goto.com/GoToConnect/#tag/Notification-Channel-Overview Call Control Endpoints (web-calls/v1):
  • /calls/{callId}/mute - Mute
  • /calls/{callId}/unmute - Unmute
  • /calls/{callId}/hold - Hold
  • /calls/{callId}/unhold - Resume
  • /calls/{callId}/dtmf - Send DTMF tones
  • /calls/{callId}/merge - Conference/merge calls
  • /calls/{callId}/split - Split merged calls
  • /calls/{callId}/warm-transfer - Warm transfer (attended)
  • /calls/{callId}/blind-transfer - Blind transfer
  • /calls/{callId}/answer - Answer
  • /calls/{callId}/reject - Reject
  • /calls/{callId}/ringing - Indicate ringing
Call Parking:
  • /call-parking/v1/parked-calls - Park calls
Let me extract the full details of these call control endpoints from the collection:I owe you a major apology. The GoToConnect API is FAR more comprehensive than I reported. You were absolutely right to push back. Here’s the complete call control surface from the Postman collection:

GoToConnect Web-Calls API - FULL Call Control

Core Call Operations

MethodEndpointFunction
POST/web-calls/v1/callsCreate outbound call
DELETE/web-calls/v1/calls/:callIdHangup
POST/web-calls/v1/calls/:callId/answerAnswer inbound
POST/web-calls/v1/calls/:callId/rejectReject call

Call Control (THE CRITICAL ONES I MISSED)

MethodEndpointFunction
POST/web-calls/v1/calls/:callId/muteMute
POST/web-calls/v1/calls/:callId/unmuteUnmute
POST/web-calls/v1/calls/:callId/holdHold
POST/web-calls/v1/calls/:callId/unholdResume
POST/web-calls/v1/calls/:callId/dtmfSend DTMF
POST/web-calls/v1/calls/:callId/mergeMERGE/CONFERENCE
POST/web-calls/v1/calls/:callId/splitSplit merged call
POST/web-calls/v1/calls/:callId/warm-transferWARM TRANSFER
POST/web-calls/v1/calls/:callId/blind-transferBLIND TRANSFER

Additional APIs

  • Call Parking - Park/retrieve calls
  • Call Control Recording - Start/pause/unpause recording programmatically
  • Call Events - Real-time WebSocket events for all call states
  • Call History - Full call logs with subscriptions

What This Means for Your Platform

You don’t need Twilio/Telnyx at all. GoToConnect has everything:
  1. Human handoff ✅ - Warm transfer to any extension
  2. Hold with music ✅ - Native hold/unhold
  3. Conferencing ✅ - Merge calls for supervisor monitoring
  4. DTMF ✅ - Navigate IVRs, enter PINs
  5. Call parking ✅ - Park and retrieve calls
  6. Recording control ✅ - Start/stop/pause recordings
Let me extract the full details on the transfer and merge endpoints to understand exactly how they work:This is gold. Let me summarize the key capabilities:

Complete GoToConnect Call Control API

Hold/Unhold

POST /web-calls/v1/calls/:callId/hold
- Remote side hears wait music
- Returns 204 if already on hold

POST /web-calls/v1/calls/:callId/unhold
- Resumes call, remote leaves waiting room

Mute/Unmute

POST /web-calls/v1/calls/:callId/mute
- Mutes local input audio stream

POST /web-calls/v1/calls/:callId/unmute

DTMF

POST /web-calls/v1/calls/:callId/dtmf
Body: { "tone": "<string>" }
- Must wait for response before sending next tone

Merge (Conference!)

POST /web-calls/v1/calls/:callId/merge
Body: { "referId": "<callId of second call>" }
- Merges two calls together
- Audio from both calls combined
- This is how you add a human supervisor to an AI call!

Split

POST /web-calls/v1/calls/:callId/split
- Separates merged call back into two separate calls

Warm Transfer

POST /web-calls/v1/calls/:callId/warm-transfer
Body: { "referId": "<callId of second call>" }
- Connects two ongoing calls
- Current user (AI) drops out
- Both remote parties now connected directly

Blind Transfer

POST /web-calls/v1/calls/:callId/blind-transfer
Body: { "dialString": "<extension or phone number>" }
- Immediate transfer to destination

Revised Architecture - GoToConnect Native

This changes everything. You can build entirely on GoToConnect without Twilio/Telnyx:
┌─────────────────────────────────────────────────────────────────┐
│                    YOUR VOICE AI PLATFORM                        │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌─────────────┐     ┌─────────────┐     ┌─────────────┐       │
│  │  PSTN       │     │ GoToConnect │     │   AI Agent  │       │
│  │  Caller     │◄───►│   PBX       │◄───►│   Bridge    │       │
│  └─────────────┘     └──────┬──────┘     └──────┬──────┘       │
│                             │                    │               │
│                             │ WebRTC            │               │
│                             │ + API              │               │
│                             ▼                    ▼               │
│                      ┌─────────────────────────────┐            │
│                      │      Python Bridge          │            │
│                      │  (aiortc + GoTo API)        │            │
│                      │                             │            │
│                      │  • WebRTC audio stream      │            │
│                      │  • Call control commands    │            │
│                      │  • Event subscriptions      │            │
│                      └──────────────┬──────────────┘            │
│                                     │                            │
│                                     ▼                            │
│                      ┌─────────────────────────────┐            │
│                      │      LiveKit Room           │            │
│                      │  (STT → Claude → TTS)       │            │
│                      └─────────────────────────────┘            │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Human Handoff Flows

Option A: Blind Transfer (Simple)
# AI decides human needed
await goto_api.blind_transfer(call_id, dial_string="+15551234567")
# or
await goto_api.blind_transfer(call_id, dial_string="ext:1001")
# Call immediately transferred, AI done
Option B: Warm Transfer (Context Handoff)
# 1. AI places customer on hold
await goto_api.hold(call_id)

# 2. AI initiates call to human agent
agent_call = await goto_api.create_call(dial_string="ext:1001")

# 3. AI briefs agent (customer hears hold music)
await ai_say("Hi Sarah, I have a customer asking about their order #12345...")

# 4. When ready, warm transfer connects them
await goto_api.warm_transfer(call_id, refer_id=agent_call.id)
# AI drops, customer + agent now connected
Option C: Conference/Merge (Supervisor Monitoring)
# 1. Supervisor joins call silently
supervisor_call = await goto_api.create_call(dial_string="ext:1002")

# 2. Merge into conference
await goto_api.merge(call_id, refer_id=supervisor_call.id)
# Now: Customer + AI + Supervisor all hear each other

# 3. Supervisor can coach AI or take over
# 4. When done, split or transfer as needed

Corrected Feasibility Assessment

CapabilityGoToConnect APIStatus
Inbound calls✅ WebRTC device registrationNative
Outbound calls/calls endpointNative
Hold with music/hold + /unholdNative
Mute/Unmute/mute + /unmuteNative
DTMF/dtmfNative
Blind transfer/blind-transferNative
Warm transfer/warm-transferNative
Conference/3-way/merge + /splitNative
Call parking/call-parking/v1Native
Recording control/call-control/v1/calls/recordingNative
Real-time events✅ WebSocket + /call-events/v1Native
Verdict: You can build the entire Voice AI Contact Center platform directly on GoToConnect. No need for Twilio, Telnyx, or any other SIP provider. Your $17/user unlimited plan covers everything.
Last modified on April 20, 2026