node package manager


Nexmo REST API client for Node.js. API support for SMS, Voice Calls, Text-to-Speech, Numbers, Verify (2FA) and more.

Nexmo Client Library for Node.js build status

A Node.JS REST API Wrapper library for Nexmo (

For full API documentation refer to


Installation | Constructor | Messaging | Voice | Verify | Number Insight | Applications | Management | JWT (JSON Web Token)


npm install nexmo


var Nexmo = require('nexmo');
var nexmo = new Nexmo({
    apiKey: API_KEY,
    apiSecret: API_SECRET,
    applicationId: APP_ID,
    privateKey: PRIVATE_KEY_PATH,
  }, options });
  • apiKey - API Key from Nexmo
  • apiSecret - API SECRET from Nexmo
  • applicationId - The Nexmo Application ID to be used when creating JWTs. Required for voice related functionality.
  • privateKey - The path to the Private Key to be used when creating JWTs. Required for voice related functionality.
  • options - Additional options for the constructor

Options are:

  // If true, log information to the console 
  debug: true|false,
  // append info the the User-Agent sent to Nexmo 
  // e.g. pass 'my-app' for /nexmo-node/1.0.0/4.2.7/my-app 
  appendToUserAgent: string,
  // Set a custom logger 
  logger: {
    log: function() {level, args...}
    info: function() {args...},
    warn: function() {args...}


Send a text message

nexmo.message.sendSms(sender, recipient, message, options, callback);

Send a Binary Message

nexmo.message.sendBinaryMessage(fromnumber, tonumber, body, udh, callback);
  • body - Hex encoded binary data
  • udh - Hex encoded udh

Send a WAP Push Message

nexmo.message.sendWapPushMessage(fromnumber, tonumber, title, url, validity, callback);
  • validity - is optional (if given should be in milliseconds)

Send a Short Code alert

nexmo.message.shortcodeAlert(recipient, messageParams, opts, callback);


For detailed information please see the documentation at

Make a call

Requires applicationId and privateKey to be set on the constructor.

  to: [{
    type: 'phone',
    number: TO_NUMBER
  from: {
    type: 'phone',
    number: FROM_NUMBER
  answer_url: [ANSWER_URL]
}, callback);

For more information see

Get a Call

nexmo.calls.get(callId, callback);

For more information see

Query Calls

nexmo.calls.get({status: 'completed'}, callback);

The first parameter can contain many properties to filter the returned call or to page results. For more information see the Calls API Reference.

Stream an Audio File to a Call
    stream_url: [   
    loop: 1

For more information see

Stop an audio stream in a call;

For more information see

Send DTMF to a Call

nexmo.calls.dtmf.send(callId, params, callback);

For more information see


Submit a Verification Request


For more information check the documentation at

Validate the response of a Verification Request


For more information check the documentation at

Search one or more Verification Request<ONE_REQUEST_ID or ARRAY_OF_REQUEST_ID>,callback);

For more information check the documentation at

Verification Control API


For more information check the documentation at

Number Insight


nexmo.numberInsight.get({level: 'basic', number: NUMBER}, callback);

For more information check the documentation at


nexmo.numberInsight.get({level: 'basic', number: '1-234-567-8900'},  callback);


nexmo.numberInsight.get({level: 'standard', number: NUMBER}, callback);

For more information check the documentation at


nexmo.numberInsight.get({level: 'standard', number: '1-234-567-8900'}, callback);


nexmo.numberInsight.get({level: 'advanced', number: NUMBER}, callback);

For more information check the documentation at

Advanced Async

Number Insight Advanced might take a few seconds to return a result, therefore the option exist to process the result asynchronously through a webhook.

nexmo.numberInsight.get({level: 'advancedAsync', number: NUMBER, callback: ""}, callback);

In this case the result of your insight request is posted to the callback URL as a webhook. For more details on webhooks see the Number Insight Advanced documentation.


For an overview of applications see

Create an App

nexmo.applications.create(name, type, answerUrl, eventUrl, options, callback);

For more information see

Get a single App

nexmo.applications.get(appId, callback);

For more information see

Get Apps by filter

nexmo.application.get(options, callback);

For more information see

Update an App

nexmo.applications.update(appId, name, type, answerUrl, eventUrl, options, callback);

For more information see

Delete an App

nexmo.application.delete(appId, callback);

For more information see


Check Account Balance


Get Pricing for sending message to a country.

nexmo.number.getPricing(countryCode, callback);
  • countryCode - 2 letter ISO Country Code

Get Pricing for sending message or making a call to a number.

nexmo.number.getPhonePricing(product, countryCode, callback);
  • product - either voice or sms
  • countryCode - 2 letter ISO Country Code

Get all numbers associated to the account.

nexmo.number.get(options, callback);
  • options parameter is an optional Dictionary Object containing any of the following parameters
    • pattern
    • search_pattern
    • index
    • size

For more details on what the above options mean refer to the Nexmo API documentation


nexmo.number.get({pattern:714,index:1,size:50,search_pattern:2}, callback);

Search for MSISDN's available to purchase,options,callback);

options parameter is optional. They can be one of the following :

  1. number pattern to match the search (eg. 1408)
  2. Dictionary Object optionally containing the following parameters :
  • pattern
  • search_pattern
  • features
  • index
  • size

For more details on what the above options mean refer to the Nexmo API documentation

Example:'US',{pattern:3049,index:1,size:50,features:'VOICE',search_pattern:2}, callback);

Purchase number, msisdn, callback);

Cancel Number

nexmo.number.cancel(countryCode, msisdn, callback);

Update Number

nexmo.number.update(countryCode, msisdn, params, callback);

params is a dictionary of parameters per documentation

Update Password (API Secret)


Update Callback URL associated to the account


Change Delivery Receipt URL associated to the account



There are two ways of generating a JWT. You can use the function that exists on the Nexmo definition:

var Nexmo = require('nexmo');
var jwt = Nexmo.generateJwt('path/to/private.key', {application_id: APP_ID});

Or via a Nexmo instance where your supplied applicationId and privateKey credentials will be used:

var Nexmo = require('nexmo');
var nexmo = new Nexmo({
    apiKey: API_KEY,
    apiSecret: API_SECRET,
    applicationId: APP_ID,
    privateKey: PRIVATE_KEY_PATH,
var jwt = nexmo.generateJwt();

Voice (Deprecated)

Send TTS Message


Send TTS Prompt With Capture

nexmo.sendTTSPromptWithCapture(<TO_NUMBER>,message,<MAX_DIGITS>, <BYE_TEXT>,options,callback);

Send TTS Prompt With Confirm

nexmo.voice.sendTTSPromptWithConfirm(<TO_NUMBER>, message ,<MAX_DIGITS>,'<PIN_CODE>',<BYE_TEXT>,<FAILED_TEXT>,options,callback);



npm test

Or to continually watch and run tests as you change the code:

npm run-script test-watch


See examples/

Also see the Nexmo Node Quickstarts repo.

API Coverage

  • Voice
    • Outbound Calls
    • Inbound Call Webhook
    • Stream to Call
    • Talk to Call
    • DTMF to Call
  • Messaging
    • Send
    • Delivery Receipt Webhook
    • Inbound Message Webhook
    • Search
      • Message
      • Messages
      • Rejections
    • US Short Codes
      • Two-Factor Authentication
      • Event Based Alerts
        • Sending Alerts
        • Campaign Subscription Management
  • Number Insight
    • Basic
    • Standard
    • Advanced
    • Advanced Async
    • Advanced Async Webhook
  • Verify
    • Verify
    • Check
    • Search
    • Control
  • Applications
    • Create an Application
    • Get Applications
    • Update an Application
    • Delete an Application
  • Account
    • Balance
    • Pricing
    • Settings
    • Top Up
    • Numbers
      • Search
      • Buy
      • Cancel
      • Update
  • Voice (Deprecated)
    • Outbound Calls
    • Inbound Call Webhook
    • Text-To-Speech Call
    • Text-To-Speech Prompt