Click to Dial lets you trigger an outbound phone call from one of your account's extensions to any destination number, with a single authenticated API request. It is the building block behind "click to call" buttons in a CRM.
It uses a callback origination model: the platform first calls the agent's own extension, and once the agent's handset is answered it bridges the call out to the destination number.
A crm_id you supply with the request is carried through the entire call lifecycle and echoed back in every webhook that fires for that call — so the call (and its recording/transcription) can be correlated against a record in your own CRM/system.
Building a full auto/preview dialer on top of this? See the Developer Guide - Outbound Dialer for call-pacing and agent-control patterns.
POST /api/v1/dial
https://portal.vocphone.comAuthorization: Bearer <token>.| Field | Required | Type | Description |
|---|---|---|---|
extension |
Yes | string | The source extension that places the call. Must be an extension that belongs to your account. |
destination |
Yes | string | The phone number to dial (the far end). |
crm_id |
No | string | A free-form identifier from your own system, returned in every related webhook so you can track the call. |
Tip: Make
crm_idunique per call attempt, not per lead/customer. Use it to correlate webhook events back to the specific call attempt in your CRM.
curl -X POST https://portal.vocphone.com/api/v1/dial \
-H "Authorization: Bearer <JWT>" \
-H "Content-Type: application/json" \
-d '{
"extension": "100",
"destination": "+61234567890",
"crm_id": "call_attempt_abc123"
}'
{
"status": 200,
"message": "Ok",
"data": {
"extension": "100",
"destination": "+61234567890",
"crm_id": "call_attempt_abc123"
}
}
If the supplied extension does not exist on your account, the request is rejected (HTTP 403). If the platform cannot reach any voice server to originate the call, a failure status is returned.
extension belongs to your account.extension). The agent's handset rings.destination and bridges the two legs together.crm_id you supplied is attached to the call as a tracking variable and persisted with the call's webhook records.crm_id you passed in.All webhooks emitted for a Click to Dial call include the crm_id field, set to the exact value you supplied on the /dial request. This lets your system match incoming webhooks back to the originating record without any extra bookkeeping. The callid is also consistent across every event for the same call.
| Event | Fires when | Key payload fields |
|---|---|---|
outboundCallStart |
The agent answers; the call to the customer is now being placed | event, callid, date, extension, destination, crm_id |
outboundCallAnswered |
The destination answers | event, callid, date, extension, destination, crm_id |
outboundCallEnd |
The call ends | event, callid, date, extension, destination, duration, answeredDuration, crm_id |
callRecordingAvailable |
A call recording is ready | event, callid, crm_id |
callTranscriptionAvailable |
A call transcription is ready | event, callid, crm_id |
{
"event": "outboundCallStart",
"callid": "1234567890-0",
"date": "2026-06-25 14:30:00",
"extension": "100",
"destination": "+61234567890",
"crm_id": "call_attempt_abc123"
}
crm_id is optional. If you omit it, the webhooks still fire but the crm_id field will be empty/null./dial.