cloudwi.re SMS API

Subscriber Intel

Although technically part of the subscriber resource, for easier consumption we've grouped the intelligence methods into one place. The four GET methods of the intel section consist of E164 Intel, Carrier Intel, Subscriber Detailed Intel and Reputation Intel. E164 Intel allows the developer to validate whether a phone number you intend to send an SMS too is valid and encompasses all international standards. It is a free tool.

Carrier Intel allows the developer to check if a number is a mobile or landline number and also passes the country code and carrier where the number is parked. Subscriber Detailed Intel arms the developer with additional information about subscribers including name, carrier ID, known relatives, demographics, known emails and social media handles and follower counts. Reputation Intel reviews the carrier ID and spam history of a landline or mobile number and analyzes it for risk for commerce applications. All three are pay per request methods.

Remember that phone numbers are passed to cloudwi.re with the country code included and without the + sign.

Carrier Intel

Open in API Explorer
GET /subscriber/carrierintel/MOBILEID/STOREID

This method allows the developer to check the carrier ID, line type, proper display format, country code and mobile network code for a specific number. All North American lines are covered in this lookup as are many European and other international locations.

The method can be used for list scrubbing or to check the MMS capability of a mobile device.

You will pass the mobile number in question and the store ID in the URL of the request. Each successful request is $.005 cents.

Example Request

Format:
curl --request GET \
  --url https://moonbeamapi.cloudwi.re/subscriber/carrierintel/MOBILEID/STOREID \
  --header 'accept: application/json' \
  --header 'authorization: Bearer SOME.JWT.TOKEN'
require 'uri'
require 'net/http'

url = URI("https://moonbeamapi.cloudwi.re/subscriber/carrierintel/MOBILEID/STOREID")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["accept"] = 'application/json'
request["authorization"] = 'Bearer SOME.JWT.TOKEN'

response = http.request(request)
puts response.read_body
var http = require("https");

var options = {
  "method": "GET",
  "hostname": "moonbeamapi.cloudwi.re",
  "port": null,
  "path": "/subscriber/carrierintel/MOBILEID/STOREID",
  "headers": {
    "accept": "application/json",
    "authorization": "Bearer SOME.JWT.TOKEN"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();
import http.client

conn = http.client.HTTPSConnection("moonbeamapi.cloudwi.re")

headers = {
    'accept': "application/json",
    'authorization': "Bearer SOME.JWT.TOKEN"
    }

conn.request("GET", "/subscriber/carrierintel/MOBILEID/STOREID", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://moonbeamapi.cloudwi.re/subscriber/carrierintel/MOBILEID/STOREID",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "authorization: Bearer SOME.JWT.TOKEN"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://moonbeamapi.cloudwi.re/subscriber/carrierintel/MOBILEID/STOREID"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("accept", "application/json")
	req.Header.Add("authorization", "Bearer SOME.JWT.TOKEN")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}

Responses

200 PASS

The requested phone number wasn't found.

(Empty Response)
200 PASS

The phone number is valid.

Subscriber Intel Valid number
{
  "status": "pass",
String
  "code": 200,
Integer
  "message": "Carrier Intel",
String
  "results": {
  "results": { ... }
Object
    "_id": {
    "_id": { ... }
Object
      "$id": "585066f9d16a1047278b4575"
String
    },
    "caller_name": "foo",
String
    "country_code": "US",
String
    "phone_number": "+19993339999",
String
    "national_format": "(999) 333-9999",
String
    "carrier": {
    "carrier": { ... }
Object
      "mobile_country_code": "310",
String
      "mobile_network_code": "150",
String
      "name": "AT&T Wireless",
String
      "type": "mobile",
String
      "error_code": "foo"
String
    },
    "type": "carrier",
String
    "mCreate": {
    "mCreate": { ... }
Object
      "sec": 1481621049,
Integer
      "usec": 0
Integer
    }
  }
}

Detailed Intel

Open in API Explorer
GET /subscriber/detailedintel/MOBILEID/STOREID

This method provides the developer with detailed demographic and social intelligence about a mobile subscriber that they are exchanging SMS with.

cloudwi.re can identify over 600M USA phone numbers with the following data points: Name, Address, Emails, Carrier, Line Type, Secondary Phone, Age, Gender, Household Income, Marital Status, Presence of Children, Home Owner Status, Home Market Value, Length of Residence, High Net Worth, Occupation, Education Level, Twitter Handle & Followers, Facebook Profile & Followers, LinkedIn Profile.

You will pass the mobile number in question and the store ID in the URL of the request. Each lookup is billed at $.10 cents per successful request.

Example Request

Format:
curl --request GET \
  --url https://moonbeamapi.cloudwi.re/subscriber/detailedintel/MOBILEID/STOREID \
  --header 'accept: application/json' \
  --header 'authorization: Bearer SOME.JWT.TOKEN'
require 'uri'
require 'net/http'

url = URI("https://moonbeamapi.cloudwi.re/subscriber/detailedintel/MOBILEID/STOREID")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["accept"] = 'application/json'
request["authorization"] = 'Bearer SOME.JWT.TOKEN'

response = http.request(request)
puts response.read_body
var http = require("https");

var options = {
  "method": "GET",
  "hostname": "moonbeamapi.cloudwi.re",
  "port": null,
  "path": "/subscriber/detailedintel/MOBILEID/STOREID",
  "headers": {
    "accept": "application/json",
    "authorization": "Bearer SOME.JWT.TOKEN"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();
import http.client

conn = http.client.HTTPSConnection("moonbeamapi.cloudwi.re")

headers = {
    'accept': "application/json",
    'authorization': "Bearer SOME.JWT.TOKEN"
    }

conn.request("GET", "/subscriber/detailedintel/MOBILEID/STOREID", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://moonbeamapi.cloudwi.re/subscriber/detailedintel/MOBILEID/STOREID",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "authorization: Bearer SOME.JWT.TOKEN"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://moonbeamapi.cloudwi.re/subscriber/detailedintel/MOBILEID/STOREID"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("accept", "application/json")
	req.Header.Add("authorization", "Bearer SOME.JWT.TOKEN")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}

Responses

200 PASS

No Match

Subscriber Intel Rejected intel pass
{
  "status": "pass",
String
  "code": 200,
Integer
  "message": "Subscriber Intel",
String
  "results": {
  "results": { ... }
Object
    "error": {
    "error": { ... }
Object
      "message": "User Error: The number you have entered is invalid. Please ensure your number contains 10 digits.",
String
      "code": "555",
String
      "type": "Bad Request"
String
    },
    "type": "carrier",
String
    "mCreate": {
    "mCreate": { ... }
Object
      "sec": 1485324833,
Integer
      "usec": 0
Integer
    }
  }
}
200 PASS

Successful Match

Subscriber Intel Successful intel pass
{
  "status": "pass",
String
  "code": 200,
Integer
  "message": "Subscriber Intel",
String
  "results": {
  "results": { ... }
Object
    records: [
Array
      {
      { ... }
Object

Records

        "id": "c072b48a13651e1a3b731b0a",
String
        "first_name": "James",
String
        "first_pronounced": "Jay-EM-s",
String
        "middle_name": "L",
String
        "last_name": "Smith",
String
        "name": "James L Smith",
String
        phone: [
Array
          {
          { ... }
Object

Phone

            "number": "9994448888",
String
            "carrier": "Sprint Spectrum L.p.",
String
            "line_type": "Mobile",
String
            "resource_uri": "/v2.1/records/9994448888/"
String
          }
        ]
        address: [
Array
          {
          { ... }
Object

Address

            "city": "San Francisco",
String
            "extended_zip": "94107-1234",
String
            "country": "USA",
String
            "line1": "2100 Market Street",
String
            "line2": "# 2",
String
            "state": "CA",
String
            "zip_code": "94107"
String
          }
        ]
        relatives: [
Array
          {
          { ... }
Object

Relatives

            "id": "bbd462e25c63e8730ab5",
String
            "name": "Susan Smith",
String
            "resource_uri": "/v2.1/users/bbd462e25c63ed5b79a5195/"
String
          }
        ]
        "email": "jimmysmith@cloudwi.re",
String
        "linked_emails": [
    "jimmysmith@cloudwi.re",
    "jimmysmith@cloudwi.re",
    "jimmysmith@cloudwi.re"
  ],
Array
        social_links: [
Array
          {
          { ... }
Object

Social links

            "type": "twitter",
String
            "followers": 2389,
Integer
            "url": "https://twitter.com/smithismyname"
String
          }
        ]
        "age": "44",
String
        "education": "Completed College",
String
        "gender": "Male",
String
        "high_net_worth": "Yes",
String
        "home_owner_status": "Own",
String
        "household_income": "100k-150k",
String
        "length_of_residence": "9 Years",
String
        "marital_status": "Marrried",
String
        "market_value": "800-900k",
String
        "occupation": "Super Tweeter",
String
        "presence_of_children": "Yes",
String
        "resource_uri": "/v2.1/users/c07213651e1a3b731b0510648a/"
String
      }
    ]
    "type": "carrier",
String
    "mCreate": {
    "mCreate": { ... }
Object
      "sec": 1485324103,
Integer
      "usec": 0
Integer
    }
  }
}

Number Reputation Intel

Open in API Explorer
GET /subscriber/reputationintel/MOBILEID/STOREID

This method provides the developer with a risk analysis of a mobile or landline telephone number. The lookup is applicable to the USA, Canada, Mexico, UK, France, Spain, Italy, Sweden, Germany, Australia, Philippines, Singapore, Turkey, Hong Kong, and Israel.

It is provided for developers who are running commerce applications and wish to add an additional layer of fraud detection by scoring a mobile number based on risk. The data returned will include a score of 1-4 with 4 being the highest risk. The type of risk associated with high risk numbers will also be reported in the synchronous body returned.

You will pass the mobile number in question and the store ID in the URL of the request. This data is provided to us by Whitepages Pro and it is .009 cents per request.

Example Request

Format:
curl --request GET \
  --url https://moonbeamapi.cloudwi.re/subscriber/reputationintel/MOBILEID/STOREID \
  --header 'accept: application/json' \
  --header 'authorization: Bearer SOME.JWT.TOKEN'
require 'uri'
require 'net/http'

url = URI("https://moonbeamapi.cloudwi.re/subscriber/reputationintel/MOBILEID/STOREID")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["accept"] = 'application/json'
request["authorization"] = 'Bearer SOME.JWT.TOKEN'

response = http.request(request)
puts response.read_body
var http = require("https");

var options = {
  "method": "GET",
  "hostname": "moonbeamapi.cloudwi.re",
  "port": null,
  "path": "/subscriber/reputationintel/MOBILEID/STOREID",
  "headers": {
    "accept": "application/json",
    "authorization": "Bearer SOME.JWT.TOKEN"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();
import http.client

conn = http.client.HTTPSConnection("moonbeamapi.cloudwi.re")

headers = {
    'accept': "application/json",
    'authorization': "Bearer SOME.JWT.TOKEN"
    }

conn.request("GET", "/subscriber/reputationintel/MOBILEID/STOREID", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://moonbeamapi.cloudwi.re/subscriber/reputationintel/MOBILEID/STOREID",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "authorization: Bearer SOME.JWT.TOKEN"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://moonbeamapi.cloudwi.re/subscriber/reputationintel/MOBILEID/STOREID"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("accept", "application/json")
	req.Header.Add("authorization", "Bearer SOME.JWT.TOKEN")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}

Responses

200 PASS

Reputation Intel Returned

Subscriber Intel Reputation intel
{
  "status": "pass",
String
  "code": 200,
Integer
  "message": "Reputation Intel",
String
  "results": {
  "results": { ... }
Object
    "_id": {
    "_id": { ... }
Object
      "$id": "589dd287d16a10f970199420"
String
    },
    "caller_name": "foo",
String
    "country_code": "US",
String
    "phone_number": "+19994448888",
String
    "national_format": "(999) 444-8888",
String
    "carrier": "foo",
String
    "add_ons": {
    "add_ons": { ... }
Object
      "status": "successful",
String
      "message": "foo",
String
      "code": "foo",
String
      "results": {
      "results": { ... }
Object
        "whitepages_pro_phone_rep": {
        "whitepages_pro_phone_rep": { ... }
Object
          "request_sid": "XRecbc0f4586d35f33bac46c831e0cb335",
String
          "status": "successful",
String
          "message": "foo",
String
          "code": "foo",
String
          "result": {
          "result": { ... }
Object
            results: [
Array
              {
              { ... }
Object

Results

                "phone_number": "9994448888",
String
                "reputation": {
                "reputation": { ... }
Object
                  "level": 1,
Integer
                  details: [
Array
                    {
                    { ... }
Object

Details

                      "score": 4,
Integer
                      "type": "Risk",
String
                      "category": "Voip Scam"
String
                    }
                  ]
                  "volume_score": 1,
Integer
                  "report_count": 1
Integer
                }
              }
            ]
            "messages": [
    "foo",
    "foo",
    "foo"
  ]
Array
          }
        }
      }
    },
    "mCreate": {
    "mCreate": { ... }
Object
      "sec": 1486694855,
Integer
      "usec": 0
Integer
    }
  }
}

E164 Intel

Open in API Explorer
GET /subscriber/e164intel/MOBILEIDHERE

This method allows the developer to validate phone numbers in the E.164 standard and return the country to which they belong. The data returned will include the line type. But it is not reliable and cloudwi.re provides it simply as a courtesy. It is not updated. If you need accurate line type data use Get Carrier Intel.

In most messaging methods, cloudwi.re will run the check before processing your request. However, the method is published for any additional list scrubbing or country identification you would like to do as a friendly courtesy.

You will pass the mobile number in the URL of the request. There is no charge for this method. The mobile ID should include the country dialing code. The + sign is not required.

Example Request

Format:
curl --request GET \
  --url https://moonbeamapi.cloudwi.re/subscriber/e164intel/MOBILEIDHERE \
  --header 'accept: application/json' \
  --header 'authorization: Bearer SOME.JWT.TOKEN'
require 'uri'
require 'net/http'

url = URI("https://moonbeamapi.cloudwi.re/subscriber/e164intel/MOBILEIDHERE")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["accept"] = 'application/json'
request["authorization"] = 'Bearer SOME.JWT.TOKEN'

response = http.request(request)
puts response.read_body
var http = require("https");

var options = {
  "method": "GET",
  "hostname": "moonbeamapi.cloudwi.re",
  "port": null,
  "path": "/subscriber/e164intel/MOBILEIDHERE",
  "headers": {
    "accept": "application/json",
    "authorization": "Bearer SOME.JWT.TOKEN"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();
import http.client

conn = http.client.HTTPSConnection("moonbeamapi.cloudwi.re")

headers = {
    'accept': "application/json",
    'authorization': "Bearer SOME.JWT.TOKEN"
    }

conn.request("GET", "/subscriber/e164intel/MOBILEIDHERE", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://moonbeamapi.cloudwi.re/subscriber/e164intel/MOBILEIDHERE",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "authorization: Bearer SOME.JWT.TOKEN"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://moonbeamapi.cloudwi.re/subscriber/e164intel/MOBILEIDHERE"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("accept", "application/json")
	req.Header.Add("authorization", "Bearer SOME.JWT.TOKEN")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}

Responses

200 Pass

The number is not valid.

Subscriber Intel E164 intel false
{
  "status": "pass",
String
  "code": 200,
Integer
  "message": "E164 Intel",
String
  "results": {
  "results": { ... }
Object
    "isValid": false,
Boolean
    "regionCode": "BR",
String
    "numberType": "UNKNOWN"
String
  }
}
200 Pass

The number is valid.

Subscriber Intel E164 intel true
{
  "status": "pass",
String
  "code": 200,
Integer
  "message": "E164 Intel",
String
  "results": {
  "results": { ... }
Object
    "isValid": true,
Boolean
    "regionCode": "US",
String
    "numberType": "FIXED_LINE_OR_MOBILE"
String
  }
}