Search Available Numbers

This page shows you how to programmatically search for numbers that are available for purchase.

You can also search for available numbers online, using the developer dashboard or from the command line, using the Vonage CLI.

Replace the following variables in the sample code with your own values:

KeyDescription
VONAGE_API_KEY

Your Vonage API key (see it on your dashboard).

VONAGE_API_SECRET

Your Vonage API secret (also available on your dashboard).

COUNTRY_CODE

The two digit country code for the number. For example: GB for the United Kingdom

VONAGE_NUMBER_TYPE

The type of number: landline, mobile-lvn or landline-toll-free

VONAGE_NUMBER_FEATURES

The capabilities of the number: SMS, VOICE or SMS,VOICE for both

NUMBER_SEARCH_CRITERIA

The filter criteria. For example, numbers containing 234.

NUMBER_SEARCH_PATTERN

Where the NUMBER_SEARCH_CRITERIA should appear in the number:

  • 0 - At the beginning of the number
  • 1- Anywhere in the number
  • 2 - At the end of the number

Write the code

Add the following to search-numbers.sh:

curl \
  -u "${VONAGE_API_KEY}:${VONAGE_API_SECRET}" \
  "https://rest.nexmo.com/number/search?country=$COUNTRY_CODE&type=$VONAGE_NUMBER_TYPE&features=$VONAGE_NUMBER_FEATURES&pattern=$NUMBER_SEARCH_CRITERIA&search_pattern=$NUMBER_SEARCH_PATTERN"

View full source

Run your code

Save this file to your machine and run it:

sh search-numbers.sh

Prerequisites

npm install @vonage/server-sdk

Create a file named search-numbers.js and add the following code:

const { Vonage } = require('@vonage/server-sdk');

const vonage = new Vonage({
  apiKey: VONAGE_API_KEY,
  apiSecret: VONAGE_API_SECRET,
});

View full source

Write the code

Add the following to search-numbers.js:

vonage.numbers.getOwnedNumbers({
  country: COUNTRY_CODE,
  type: VONAGE_NUMBER_TYPE,
  pattern: NUMBER_SEARCH_CRITERIA,
  searchPattern: NUMBER_SEARCH_PATTERN,
  features: VONAGE_NUMBER_FEATURES,
})
  .then((numbers) => {
    for (const number of numbers) {
      console.log(number);
    }
  })
  .catch((error) => console.error(error));

View full source

Run your code

Save this file to your machine and run it:

node search-numbers.js

Prerequisites

Add the following to build.gradle:

implementation 'com.vonage:server-sdk-kotlin:2.1.1'

Create a file named SearchAvailableNumbers and add the following code to the main method:

val client = Vonage {
    apiKey(VONAGE_API_KEY)
    apiSecret(VONAGE_API_SECRET)
}

View full source

Write the code

Add the following to the main method of the SearchAvailableNumbers file:

val numbers = client.numbers.searchAvailable {
    country(NUMBER_COUNTRY_CODE)
    type(NUMBER_TYPE)
    features(*NUMBER_FEATURES)
    pattern(NUMBER_SEARCH_PATTERN, NUMBER_SEARCH_CRITERIA)
}
for (number in numbers) {
    println("""
        Tel: ${number.msisdn}
        Country: ${number.country}
        Type: ${number.type}
        Cost: ${number.cost}
        """.trimIndent()
    )
}

View full source

Run your code

We can use the application plugin for Gradle to simplify the running of our application. Update your build.gradle with the following:

apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''

Run the following gradle command to execute your application, replacing com.vonage.quickstart.kt.numbers with the package containing SearchAvailableNumbers:

gradle run -Pmain=com.vonage.quickstart.kt.numbers.SearchAvailableNumbers

Prerequisites

Add the following to build.gradle:

implementation 'com.vonage:server-sdk:9.3.1'

Create a file named SearchNumbers and add the following code to the main method:

VonageClient client = VonageClient.builder()
        .apiKey(VONAGE_API_KEY)
        .apiSecret(VONAGE_API_SECRET)
        .build();

View full source

Write the code

Add the following to the main method of the SearchNumbers file:

SearchNumbersResponse response = client.getNumbersClient().searchNumbers(
        SearchNumbersFilter.builder()
            .country(NUMBER_COUNTRY_CODE)
            .type(NUMBER_TYPE)
            .features(NUMBER_FEATURES)
            .pattern(NUMBER_SEARCH_PATTERN, NUMBER_SEARCH_CRITERIA)
            .build()
);

System.out.println("Here are "
        + response.getNumbers().length
        + " of the " + response.getCount()
        + " matching numbers available for purchase."
);

for (AvailableNumber number : response.getNumbers()) {
    System.out.println("Tel: " + number.getMsisdn());
    System.out.println("Cost: " + number.getCost());
}

View full source

Run your code

We can use the application plugin for Gradle to simplify the running of our application. Update your build.gradle with the following:

apply plugin: 'application'
mainClassName = project.hasProperty('main') ? project.getProperty('main') : ''

Run the following gradle command to execute your application, replacing com.vonage.quickstart.numbers with the package containing SearchNumbers:

gradle run -Pmain=com.vonage.quickstart.numbers.SearchNumbers

Prerequisites

Install-Package Vonage

Create a file named SearchNumbers.cs and add the following code:

using Vonage.Numbers;
using Vonage.Request;
using Vonage;

View full source

Add the following to SearchNumbers.cs:


var credentials = Credentials.FromApiKeyAndSecret(vonageApiKey, vonageApiSecret);

View full source

Write the code

Add the following to SearchNumbers.cs:


var request = new NumberSearchRequest()
{
    Country = countryCode,
    Type = vonageNumberType,
    Features = vonageNumberFeatures,
    Pattern = numberSearchCriteria,
    SearchPattern = numberSearchPattern
};

View full source

Prerequisites

composer require vonage/client

Create a file named search-available.php and add the following code:

use Vonage\Numbers\Filter\AvailableNumbers;
use Vonage\Entity\IterableAPICollection;

View full source

Add the following to search-available.php:

$basic = new \Vonage\Client\Credentials\Basic(VONAGE_API_KEY, VONAGE_API_SECRET);
$client = new \Vonage\Client($basic);

View full source

Write the code

Add the following to search-available.php:

/** @var IterableAPICollection $response */
$filter = new AvailableNumbers([
    "pattern" => (string) NUMBER_SEARCH_CRITERIA,
    "search_pattern" => (int) NUMBER_SEARCH_PATTERN,
    "type" => VONAGE_NUMBER_TYPE,
    "features" => VONAGE_NUMBER_FEATURES,
]);
$response = $client->numbers()->searchAvailable(COUNTRY_CODE, $filter);

echo "There are " . count($response) . " matching numbers available for purchase:\n";

foreach ($response as $number) {
    echo "Tel: " . $number->getMsisdn() . " Cost: " . $number->getCost() . "\n";
}

View full source

Run your code

Save this file to your machine and run it:

php search-available.php

Prerequisites

pip install vonage python-dotenv

Write the code

Add the following to search.py:

from vonage import Auth, Vonage
from vonage_numbers import SearchAvailableNumbersFilter

client = Vonage(Auth(api_key=VONAGE_API_KEY, api_secret=VONAGE_API_SECRET))

numbers, count, next = client.numbers.search_available_numbers(
    SearchAvailableNumbersFilter(
        country=NUMBER_COUNTRY_CODE,
        size=3,
        pattern=NUMBER_SEARCH_CRITERIA,
        search_pattern=NUMBER_SEARCH_PATTERN,
        type=NUMBER_TYPE,
        features=NUMBER_FEATURES,
    )
)
pprint(numbers)
print(count)
print(next)

for number in numbers:
    print(f'Tel: {number.msisdn} Cost: {number.cost}')

View full source

Run your code

Save this file to your machine and run it:

python numbers/search.py

Prerequisites

gem install vonage

Create a file named search.rb and add the following code:

client = Vonage::Client.new(
  api_key: VONAGE_API_KEY,
  api_secret: VONAGE_API_SECRET
)

View full source

Write the code

Add the following to search.rb:

response = client.numbers.search(
  country: COUNTRY_CODE,
  msisdn: VONAGE_NUMBER,
  type: VONAGE_NUMBER_TYPE,
  features: VONAGE_NUMBER_FEATURES,
  pattern: NUMBER_SEARCH_CRITERIA,
  search_pattern: NUMBER_SEARCH_PATTERN
)

View full source

Run your code

Save this file to your machine and run it:

ruby search.rb

See also