Nexmo Voice API

API reference on SwaggerHub

Introduction

Nexmo's Voice API allows you to create and manage high-quality voice operation applications on the cloud, such as IVR, WebRTC and PSTN calling. Voice is a HTTP-based RESTful API. It is accessed over HTTPS combined with OAuth2.0 for extra security. Request and response bodies follow the JSON format to make the exchange of information fast, easy and reliable.

Conceptual model

Conceptual model

Definitions

Conversation, leg, conference

Communication can be 1-to-1 or 1-to-n from or to the Nexmo platform. While 1-to-1 calls are known as a leg, 1-to-n calls are known as a conversation. Each call connected to a conversation is its own leg.

NCCO

A Nexmo Call Control Object (NCCO) is a JSON array that you use to control the flow of a Voice API call. For your NCCO to execute correctly, the JSON objects must be valid.

The Call event model is asynchronous. A static or dynamically created NCCO script provides the business logic for your Call. When a Call is placed to your number, Nexmo makes a synchronous request to the webhook endpoint you set as the answer_url for your number and retrieves the NCCO object that controls the Call.

Extended information regarding NCCOs can be found in our NCCO reference page.

Webhook

Method to augment or alter the behavior of your application via user-defined HTTP callbacks. In your case webhook defines the behavior of your application.

DTMF

Dual Tone Multi Frequency (DTMF), is a form of signaling used by phone systems to transmit the digits 0-9 and the * and # characters.

Text-to-Speech

Nexmo uses Text-to-speech engines to allow you to play machine generated speech in your calls. This feature can be added via NCCOs with the use of talk action or by making a put request on an in-progress call. There are 23 languages available with different styles and genders.

Recording

Nexmo Voice API offers the ability to record call audio in several ways:

SIP Trunk

To use Session Initiation Protocol (SIP), see the SIP documentation page

API workflow

API workflow

Features

  • Scales with existing web solutions
  • Easy to configure
  • Records and stores any call
  • Conference calls
  • Text-to-Speech messages in 23 languages

Getting started

The API is divided into 2 groups of resources:

  • Application: Nexmo App Management resource. Allows CRUD on applications
  • Voice: Voice call management resource. Allows CRUD on the call

You can try the application from different tools/platforms.

  • SwaggerHub
  • Postman

Authentication

To authenticate you'll need to request an access token. Use your API Store app's credentials (Consumer Key and Consumer Secret) to make an authentication request. The authorization service returns a JSON message that contains the access_token field.

Use one of the following 3 options:

cURL

Execute below cURL command to receive an access token. Replace APP_CONSUMER_KEY and APP_CONSUMER_SECRET with your app's credentials.

curl -X POST \
 'https://api-prd.kpn.com/oauth/client_credential/accesstoken?grant_type=client_credentials' \
 -H 'content-type: application/x-www-form-urlencoded' \
 -d 'client_id=APP_CONSUMER_KEY&client_secret=APP_CONSUMER_SECRET'

If you are using cURL for Windows, please use the command below instead.

curl -X POST "https://api-prd.kpn.com/oauth/client_credential/accesstoken?grant_type=client_credentials" -H "content-type: application/x-www-form-urlencoded" -d "client_id=APP_CONSUMER_KEY&client_secret=APP_CONSUMER_SECRET"

The authentication service returns a JSON message that contains the access token field.

{
    "refresh_token_expires_in": "0",
    "api_product_list": "[xxxxxxx]",
    "api_product_list_json": [
        " xxxxxxx"
    ],
    "organization_name": "kpn",
    "developer_email": "demo123@kpn.com",
    "token_type": "Bearer",
    "issued_at": "1521039195424",
    "client_id": "APP_CONSUMER_KEY",
    "access_token": "haf2SDl07E9N7RluNQ4kJ1TkGgso",
    "application_name": "6e38edxxxxxxxxxxxxxxxx4065d79c",
    "scope": "",
    "expires_in": "3599",
    "refresh_count": "0",
    "status": "approved"
}

SwaggerHub

  1. Click on the Authorize button on the top right.
  2. In the form, fill in client_id and client_secret, using your app's credentials.
  3. Click Authorize.

Postman

When using Postman, you will have to import the Swagger file into a Postman collection as follows:

  1. Open the API reference on SwaggerHub.
  2. On the top right, click Export, click Download API and click 'YAML Unresolved'.
  3. In Postman from the menu click File and click Import... Choose the YAML file you downloaded in the previous step. A new collection will be added.
  4. Select Get Access Token from the collection.
  5. Make sure the right environment is selected, corresponding to the API.
  6. Edit the environment variables client_id and client_secret, using your app's credentials.
  7. Check the response code and message.
  8. Press the Send button to get an access token.

Note: Request variables are no longer linked to an environment, but to the collection.

How to...

Create the Nexmo Application

Remember the application uuid because it will be needed to make calls.

SwaggerHub:

  1. Select POST /applications
  2. Click on Try out
  3. Edit the request body by filling the name and answer_url
  4. Click on execute button
  5. Check the response code and message

Postman:

  1. Click on (POST) Create new application resource
  2. Fill the name and answer_url
  3. Click on send
  4. Check the response code and message

Create a call

SwaggerHub:

  1. Select POST /voice/calls
  2. Click on Try out
  3. Update the ApplicationID header with your application identifier
  4. Edit the request body by filling to, from and answer_url fields
  5. Click on execute button
  6. Check the response code and message

Postman:

  1. Click on (POST) Create an outbound call Update the Headers section by filling the ApplicationId field
  2. Update the body fields
  3. Click on send
  4. Check the response code and message

Return codes

Code   Description
200   Success
201   Created
202   Accepted
302   Found. Link in location header
400   Bad request
401   Unauthorized
403   Forbidden
404   Not found
405   Method not allowed
412   Precondition failed
429   Too many requests
500   Internal server error
502   Bad gateway
503   Service unavailable