Skip to content
Programmable voice

VoIP calling your code can drive.

A programmable voice API for VanceTel: place calls, fire click-to-call deep links, and receive call events over HMAC-signed webhooks — on your own business numbers.

Write-and-event oriented by design. You create calls and subscribe to events; call history is logged automatically and surfaced in the softphone.

Place callsClick-to-callCall-event webhooksHMAC-signed
Place a call
# Place a call: ring an agent's device, then connect the customer.
curl https://api.netexem.com/v1/calls \
  -H "Authorization: Bearer $NETEXEM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "+15551234567",
    "to": "+15557654321"
  }'

# The call rings in the softphone — hold, mute and transfer apply once connected.

One POST rings the softphone — then hold, mute and transfer apply.

Two ways to start, one way to listen

A deep link to launch a call. A webhook to hear about it.

Trigger a call from a click or from your backend, then react to what happens. The deep link pre-fills the recipient; the webhook delivers a signed call event.

Click-to-call deep link
call?to=…
<!-- Click-to-call deep link: opens the softphone, recipient pre-filled -->
<a href="vancetel://call?to=%2B15557654321">
  Call this customer
</a>

<!-- Trusted "Call" button you built? Add &ad=1 to auto-dial without the prompt -->
<a href="vancetel://call?to=%2B15557654321&ad=1">Call now</a>
call.completed event
webhook payload
// Subscribe to call events. Every payload is HMAC-SHA256 signed —
// verify the signature header before you trust the body.
{
  "type": "call.completed",
  "id": "evt_8f2a...",
  "data": {
    "callId": "call_3c91...",
    "direction": "outbound",
    "from": "+15551234567",
    "to": "+15557654321",
    "status": "completed",
    "durationSeconds": 142,
    "startedAt": "2026-05-31T18:04:11Z",
    "endedAt": "2026-05-31T18:06:33Z"
  }
}

Verify the HMAC-SHA256 signature header before you trust a webhook body — that is what makes the event safe to act on.

What the voice API does

Calling as something your software controls.

Place calls from code

POST to the calls endpoint to ring a device and connect a call on your business numbers. The call surfaces in the softphone like any other.

Click-to-call deep links

Embed a deep link in any button, CRM record or dashboard. It opens the softphone with the recipient pre-filled, ready to dial in a tap.

Call events over webhooks

Subscribe to call events — completed and missed — and react in your own systems as calls happen.

Automatic call history

Every call is logged automatically and synced across devices, so the record is consistent whether you read it in the app or build on the events.

In-call controls

Once connected, hold, mute and transfer are available in the softphone — the same controls your team uses on a normal call.

Signed, verifiable events

Every webhook is HMAC-SHA256 signed so your endpoint can confirm the payload came from us before acting on it.

FAQ

The voice API, answered.

The short version: create calls, subscribe to events, let the softphone handle the rest. See it wired end to end in a live walkthrough.

What is the programmable voice API?

The VanceTel voice API lets your software drive calling: place calls, launch click-to-call deep links, and receive call events over HMAC-signed webhooks. It is write-and-event oriented — you create calls and subscribe to events rather than running full read-CRUD over historical data.

How do I place a call from the API?

You POST to the calls endpoint with a from and to number. The call rings in the VanceTel softphone on the signed-in device, and once connected, in-call controls like hold, mute and transfer apply just like a normal call.

What is the difference between the API and a deep link?

A deep link is a plain URL that opens the softphone with a recipient pre-filled, so a person taps to start the call. The API places a call programmatically from your backend. Both run on your business numbers and both surface in the softphone.

What call events can I receive?

You can subscribe to call events — completed and missed — delivered to your endpoint as webhooks. Each event is HMAC-SHA256 signed so you can verify it before acting on it.

Can I read full call records through the API?

The public API is write-and-event oriented: you create calls and subscribe to call events, and VanceTel logs call history automatically. It is not a full read-CRUD store of historical records — the softphone surfaces the synced history in real time.

Put calling in your codebase.

See the VanceTel voice API place a call and fire a signed call event in a 20-minute walkthrough.