Skip to main content
From zero to your first call in the queue in a few steps. First: contract a number, keep it active in the workspace (calls go out from that line), and have balance or credits — voice is billed per minute.

In short

  • Contract a number and activate it — that’s the line calls go out from (the from field).
  • Choose who calls and who receives (from and to). When answered, use type + payload — same as SMS and WhatsApp.
  • Track and control status via API or webhooks.
Context: Introduction. Scopes: API Key scopes. Number: Phone Numbers.

Before you start

Authentication: Authorization: Bearer sk_live_... or x-api-key. Base URL: https://api.notifique.dev. Destination numbers in international format, digits only, without + (e.g. 5511999887766). The API normalizes internally.

Request body structure (POST /v1/voice/calls)

The canonical contract follows the same pattern as other channels: to, type, payload. Extra fields go at the root of the JSON or inside options — not inside payload.
The API still accepts legacy root aliases (speakText, playAudioUrl, standalone gather), but prefer type + payload — it’s the documented pattern and matches other channels.

1. Make a call

1A — Via dashboard

  1. Voice → New call
  2. Which number you’re calling from and who will receive
  3. When answered: automatic message (text or audio) or live call (WebRTC)
  4. Optional: translate, schedule, record, or a webhook for this call only
  5. Dispatch (or schedule)
IVR from the dashboard has been discontinued — use type: ivr in the API (IVR and flows).

1B — Via API v1

Scope: voice:call. Complete example — speak text, record, correlate with CRM, webhook for this call only, and metadata:
Response 202:
Save the messageIds to query and control each destination. Other type and payload (same structure — only type and payload content change): from accepts the workspace number id or E.164 — it must be active.

2. List and query

Scope: voice:read. With includeEvents=true, the response includes the timeline (dialed, answered, ended…).

3. Control a call in progress

POST /v1/voice/calls/:id/actions/{action} — scope voice:control. The call must be answered.

4. Download recording

Scope: voice:read. Webhook: voice.call.recording.ready.

5. Inbound calls

When someone calls your number, configure the line in Phone Numbers: forward, speak a message and hang up, or control via webhook.

6. Global webhooks vs webhook for this call

Global — register voice.call.* events in the workspace (Webhook events). This call only — use options.webhook in the body (public HTTPS + optional secret). Events for this call go to that URL instead of the workspace global webhooks for this call.

7. Schedule a dial

DashboardSchedule chip on New call (paid plan, within the workspace day limit). The API v1 route POST /v1/voice/calls does not accept schedule yet — voice scheduling via API is on the roadmap, aligned with other channels. In the dashboard, the body uses legacy fields (speakText at the root); in API v1, always use type: "speak" and payload.text.

8. Translate spoken text

At the root of the body, same as SMS and email:
Manual mode — text per language in i18n (keys speakText and gatherPrompt):
Details: Localization and i18n.

TTS voices


Next steps