Skip to main content
Live calls let your application start or handle WhatsApp audio calls from a connected token. Version 1 supports audio-only media over WebSocket PCM. WebRTC is planned as a later transport, and the call records already include a transport field so your integration can keep the same call model.

Start a call

POST /api/v1/sessions/{sessionId}/calls
Authorization: Bearer <api_key>
Content-Type: application/json
{
  "to": "[email protected]"
}
The token must be paired and connected. The response contains a call snapshot with callId, peerJid, direction, state, transport, timestamps, and mute state.

Stream live audio

Upgrade the media URL with bearer auth:
GET /api/v1/sessions/{sessionId}/calls/{callId}/media
Authorization: Bearer <api_key>
Upgrade: websocket
Client binary frames are outbound mono Float32LE PCM at 16000 Hz. Server binary frames are inbound peer audio in the same format. Server JSON text frames include:
TypePurpose
readyConfirms encoding, sample rate, channels, and direction.
bufferReports live outbound buffer depth and backpressure watermarks.
call_stateMirrors call state changes.
errorReports invalid frames or feed failures.
endedReports that the call ended.
Raw audio is never sent over SSE or webhooks.

Play prerecorded audio

Upload an audio asset once, then play it into active calls:
POST /api/v1/call-audio-assets
Authorization: Bearer <api_key>
Content-Type: multipart/form-data
Multipart field:
FieldRequiredNotes
audioYesAny supported audio/* file up to 32 MB.
Playback:
POST /api/v1/sessions/{sessionId}/calls/{callId}/audio/play
Authorization: Bearer <api_key>
Content-Type: application/json
{
  "assetId": "019f..."
}

Recordings

WADial stores inbound, outbound, and mixed WAV recording artifacts for calls with captured media. Retention defaults to 30 days and can be configured by the account environment. Recording-ready events include metadata such as recordingId, kind, durationMs, sizeBytes, and expiresAt; they do not include raw audio.