canonical: https://jentic.com/apis/nexmo.com/voice

# Nexmo Voice API

Jentic publishes the only available OpenAPI specification for Voice API, keeping it validated and agent-ready. The Vonage Voice API places outbound calls, controls in-progress calls, and surfaces historical call records through 9 endpoints. Calls are driven by a Nexmo Call Control Object that defines the connect, talk, stream, and input actions, and live calls can be muted, hung up, or sent DTMF tones, audio streams, and TTS prompts mid-call. The API is authenticated with JWT bearer tokens scoped to a Vonage application that holds the public key.

## For AI agents

Place outbound voice calls, control in-progress calls with TTS, audio streaming, and DTMF, and retrieve historical call records by UUID.

## Scope

Does not send SMS, WhatsApp, or run identity verification - use for outbound voice calling and in-call control only.

## Capabilities

- Place outbound voice calls to a phone number, SIP endpoint, or WebSocket using a Nexmo Call Control Object
- List historical calls with filters for status, direction, and date range for billing and audit
- Modify an in-progress call to mute, unmute, hang up, or transfer to a new NCCO
- Stream an audio file into an active call and stop the stream when complete
- Play text-to-speech prompts into an active call in dozens of languages and voices
- Send DTMF tones into a call programmatically for IVR navigation or accepting input from a remote system

## Use cases

### Outbound Voice Notification

Place an outbound voice call that delivers a TTS message - appointment reminders, alert escalations, or callback offers. POST / accepts the to and from endpoints plus an NCCO that defines the talk action with the message and language. Status callbacks fire at ringing, answered, and completed, allowing retry logic when the call goes unanswered.

Example prompt: POST / with to=[{type:'phone',number:'+15551234567'}], from={type:'phone',number:'+447700900000'}, and an NCCO containing a talk action delivering the reminder, then GET /{uuid} to track the status

### In-Call Audio and TTS Control

Drive a live call mid-flight by playing TTS, streaming audio, or injecting DTMF without rebuilding the call. PUT /{uuid}/talk plays a TTS prompt, PUT /{uuid}/stream starts an audio file, and PUT /{uuid}/dtmf sends touch-tone digits. The matching DELETE endpoints stop streaming or talking, freeing the call to receive the next instruction.

Example prompt: PUT /{uuid}/talk with text='Please hold' and language='en-US' to play a hold message, then DELETE /{uuid}/talk and PUT /{uuid}/stream to play music

### Call Detail Record Lookup

Retrieve historical call records for billing reconciliation, support investigations, or analytics dashboards. GET / lists calls with filters for date_start, date_end, status, and direction, and GET /{uuid} returns the full record including duration, price, and direction for a specific call. Pair with the Reports API for bulk historical exports.

Example prompt: GET / with status=completed and date_start covering the last 24 hours to list completed calls, then GET /{uuid} for any call that needs deeper investigation

### AI Agent Voice Operations

Through Jentic, an AI agent places and controls calls without holding the Vonage application's private key. The agent searches Jentic with the intent 'place an outbound voice call', loads the POST / schema, and executes with the to, from, and NCCO arguments. Mid-call talk, stream, and DTMF endpoints become subsequent Jentic calls, with JWT bearer tokens minted from your Jentic One instance.

Example prompt: Use Jentic search query 'place an outbound voice call' to load POST /, execute with to, from, and NCCO, then chain PUT /{uuid}/talk to play a TTS prompt

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | / | Create an outbound call |
| GET | / | List historical calls |
| GET | /{uuid} | Get details of a specific call |
| PUT | /{uuid} | Modify an in-progress call |
| PUT | /{uuid}/talk | Play TTS into an active call |
| PUT | /{uuid}/stream | Stream audio into an active call |
| PUT | /{uuid}/dtmf | Send DTMF tones into an active call |
| DELETE | /{uuid}/stream | Stop streaming audio into a call |

## Key resources

- **Calls** — Create outbound calls, list historical calls, and modify in-progress calls
- **Talk** — Play and stop TTS prompts in an active call
- **Stream Audio** — Stream and stop audio file playback into a call
- **DTMF** — Send touch-tone digits into a call for IVR navigation or input

## Why Jentic

- **Setup:** Wiring the Vonage Voice API by hand means signing a short-lived JWT from your application id and private key, adding it as a bearer token on every request to api.nexmo.com/v1/calls, and building NCCO payloads for call control yourself. Through Jentic you install once, import the Voice API from the API Directory, store the application id and private key once, and your agent calls it.
- **Permission scoping:** The Voice API puts the call id in the URL path (/{uuid}, /{uuid}/talk, /{uuid}/stream), so a rule can pin your agent to controlling one live call. You choose the operations it may call, so ending a stream or hanging up is not included unless you add it.
- **Credential handling:** Your Vonage application id and private key are stored once, encrypted, by your own Jentic One instance, which mints the short-lived JWT and adds it as the bearer token at execution time. The private key never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'place an outbound voice call' and Jentic returns the POST / operation with its NCCO input schema so the agent supplies structured to, from, and ncco arguments without browsing the reference docs.

## Related APIs

- **Vonage Messages API** — Sends SMS, WhatsApp, and other text-channel messages alongside voice contact attempts.
- **Vonage Reports API** — Bulk historical export of call records for billing and analytics.
- **Twilio Voice** — Twilio's voice service offers comparable outbound calling, TTS, and DTMF control.

## FAQ

### Why is there no official OpenAPI spec for Voice API?

Vonage does not publish an OpenAPI specification. Jentic generates and maintains this spec so that AI agents and developers can call Voice API via structured tooling. It is validated against the live API and kept up to date. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the Vonage Voice API use?

Voice uses JWT bearer tokens. The application signs a short-lived JWT with the private key paired to the Vonage application's public key and sends it as Authorization: Bearer <jwt> on every call. Jentic stores the application ID and private key in your Jentic One instance and mints the JWT at execution time.

### How do I place an outbound voice call?

POST / with a JSON body containing to, from, and an answer_url or ncco that defines the call flow. The response includes a uuid that identifies the call for subsequent GET /{uuid} status checks and PUT /{uuid}/talk or /stream control calls.

### Can I play a TTS message into a live call?

Yes. PUT /{uuid}/talk with the text, language, and voice plays the TTS prompt into the connected call leg. DELETE /{uuid}/talk stops the playback early so the next instruction (a stream, transfer, or hangup) can take over.

### How do I retrieve a list of recent Vonage calls?

GET / accepts date_start, date_end, status, and direction query parameters and returns paginated call records with duration, price, and direction. For exports beyond a few thousand calls use the Vonage Reports API which is purpose-built for bulk record retrieval.

### How do I place a Vonage voice call through Jentic?

Run pip install jentic, then use the Jentic search query 'place an outbound voice call' to load POST /. Execute with to, from, and an NCCO containing a talk action - Jentic mints the JWT from the application credentials in the vault. Run it through Jentic One, the self-hosted execution layer.

### Can I limit what my agent is allowed to do with the Vonage Voice API?

Yes. Because you run Jentic One yourself, your own rules decide which Voice operations and credentials the agent may use, so you can allow POST / to place a call while withholding PUT /{uuid}/talk, PUT /{uuid}/stream, or PUT /{uuid}/dtmf. Since the call id sits in the URL path, a rule can pin the agent to controlling a single live call rather than any call on the account. Ending a stream or hanging up a call is available only if you explicitly grant those operations.
