RND Basic (POST)
curl --request POST \
--url https://dataapi.dncscrub.com/v1.5/Data/RNDBasic \
--header 'Content-Type: <content-type>' \
--header 'loginId: <loginid>' \
--data '
{
"data": [
{
"phoneNumber": "<string>",
"date": "<string>"
}
],
"useSandbox": true,
"ProjId": "<string>"
}
'import requests
url = "https://dataapi.dncscrub.com/v1.5/Data/RNDBasic"
payload = {
"data": [
{
"phoneNumber": "<string>",
"date": "<string>"
}
],
"useSandbox": True,
"ProjId": "<string>"
}
headers = {
"loginId": "<loginid>",
"Content-Type": "<content-type>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {loginId: '<loginid>', 'Content-Type': '<content-type>'},
body: JSON.stringify({
data: [{phoneNumber: '<string>', date: '<string>'}],
useSandbox: true,
ProjId: '<string>'
})
};
fetch('https://dataapi.dncscrub.com/v1.5/Data/RNDBasic', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://dataapi.dncscrub.com/v1.5/Data/RNDBasic",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
[
'phoneNumber' => '<string>',
'date' => '<string>'
]
],
'useSandbox' => true,
'ProjId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: <content-type>",
"loginId: <loginid>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://dataapi.dncscrub.com/v1.5/Data/RNDBasic"
payload := strings.NewReader("{\n \"data\": [\n {\n \"phoneNumber\": \"<string>\",\n \"date\": \"<string>\"\n }\n ],\n \"useSandbox\": true,\n \"ProjId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("loginId", "<loginid>")
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://dataapi.dncscrub.com/v1.5/Data/RNDBasic")
.header("loginId", "<loginid>")
.header("Content-Type", "<content-type>")
.body("{\n \"data\": [\n {\n \"phoneNumber\": \"<string>\",\n \"date\": \"<string>\"\n }\n ],\n \"useSandbox\": true,\n \"ProjId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://dataapi.dncscrub.com/v1.5/Data/RNDBasic")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["loginId"] = '<loginid>'
request["Content-Type"] = '<content-type>'
request.body = "{\n \"data\": [\n {\n \"phoneNumber\": \"<string>\",\n \"date\": \"<string>\"\n }\n ],\n \"useSandbox\": true,\n \"ProjId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body[
{
"PhoneNumber": "5039367187",
"IsReassigned": false,
"HasSafeHarbor": true,
"IsSandBox": false
},
{
"PhoneNumber": "7075276405",
"IsReassigned": false,
"HasSafeHarbor": true,
"IsSandBox": false
}
]
Reassigned Scrub
RND Basic (POST)
Batch query the FCC Reassigned Number Database
POST
/
v1.5
/
Data
/
RNDBasic
RND Basic (POST)
curl --request POST \
--url https://dataapi.dncscrub.com/v1.5/Data/RNDBasic \
--header 'Content-Type: <content-type>' \
--header 'loginId: <loginid>' \
--data '
{
"data": [
{
"phoneNumber": "<string>",
"date": "<string>"
}
],
"useSandbox": true,
"ProjId": "<string>"
}
'import requests
url = "https://dataapi.dncscrub.com/v1.5/Data/RNDBasic"
payload = {
"data": [
{
"phoneNumber": "<string>",
"date": "<string>"
}
],
"useSandbox": True,
"ProjId": "<string>"
}
headers = {
"loginId": "<loginid>",
"Content-Type": "<content-type>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {loginId: '<loginid>', 'Content-Type': '<content-type>'},
body: JSON.stringify({
data: [{phoneNumber: '<string>', date: '<string>'}],
useSandbox: true,
ProjId: '<string>'
})
};
fetch('https://dataapi.dncscrub.com/v1.5/Data/RNDBasic', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://dataapi.dncscrub.com/v1.5/Data/RNDBasic",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
[
'phoneNumber' => '<string>',
'date' => '<string>'
]
],
'useSandbox' => true,
'ProjId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: <content-type>",
"loginId: <loginid>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://dataapi.dncscrub.com/v1.5/Data/RNDBasic"
payload := strings.NewReader("{\n \"data\": [\n {\n \"phoneNumber\": \"<string>\",\n \"date\": \"<string>\"\n }\n ],\n \"useSandbox\": true,\n \"ProjId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("loginId", "<loginid>")
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://dataapi.dncscrub.com/v1.5/Data/RNDBasic")
.header("loginId", "<loginid>")
.header("Content-Type", "<content-type>")
.body("{\n \"data\": [\n {\n \"phoneNumber\": \"<string>\",\n \"date\": \"<string>\"\n }\n ],\n \"useSandbox\": true,\n \"ProjId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://dataapi.dncscrub.com/v1.5/Data/RNDBasic")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["loginId"] = '<loginid>'
request["Content-Type"] = '<content-type>'
request.body = "{\n \"data\": [\n {\n \"phoneNumber\": \"<string>\",\n \"date\": \"<string>\"\n }\n ],\n \"useSandbox\": true,\n \"ProjId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body[
{
"PhoneNumber": "5039367187",
"IsReassigned": false,
"HasSafeHarbor": true,
"IsSandBox": false
},
{
"PhoneNumber": "7075276405",
"IsReassigned": false,
"HasSafeHarbor": true,
"IsSandBox": false
}
]
Batch query the FCC Reassigned Number Database (RND) to check if multiple phone numbers have been reassigned after given dates.
The FCC Reassigned Number Database only has complete data after January 27, 2021. Numbers with consent dates prior to this date will typically return a blank
IsReassigned value.Request
Headers
string
required
Your API Key (LoginId from your DNCScrub account)
string
required
Must be
application/jsonRequest Body
array
required
boolean
(Optional) Set to
true to use sandbox mode for testingstring
Project identifier for tracking purposes
Example Request
curl --location --request POST \
'https://dataapi.dncscrub.com/v1.5/Data/RNDBasic' \
--header 'loginId: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"Data": [
{ "phoneNumber": "5039367187", "date": "20211014" },
{ "phoneNumber": "7075276405", "date": "20211122" }
]
}'
const response = await fetch(
'https://dataapi.dncscrub.com/v1.5/Data/RNDBasic',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'loginId': 'YOUR_API_KEY'
},
body: JSON.stringify({
Data: [
{ phoneNumber: '5039367187', date: '20211014' },
{ phoneNumber: '7075276405', date: '20211122' }
]
})
}
);
const data = await response.json();
console.log(data);
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("loginId", "YOUR_API_KEY");
var requestData = new
{
Data = new[]
{
new { phoneNumber = "5039367187", date = "20211014" },
new { phoneNumber = "7075276405", date = "20211122" }
}
};
var content = new StringContent(
JsonSerializer.Serialize(requestData),
Encoding.UTF8,
"application/json"
);
var response = await client.PostAsync(
"https://dataapi.dncscrub.com/v1.5/Data/RNDBasic",
content
);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
[
{
"PhoneNumber": "5039367187",
"IsReassigned": false,
"HasSafeHarbor": true,
"IsSandBox": false
},
{
"PhoneNumber": "7075276405",
"IsReassigned": false,
"HasSafeHarbor": true,
"IsSandBox": false
}
]
Response Fields
Each object in the response array contains:string
The phone number that was checked
boolean | null
Indicates if the phone was reassigned after the consent date:
true- Reassigned. Do not call.false- Not reassigned.null- Insufficient FCC data.
boolean
true if an FCC safe harbor exemption may be availableboolean
true if the response was generated in sandbox mode (test data), false for production data.Error Responses
| Status Code | Description |
|---|---|
| 400 Bad Request | The data property is missing or empty, more than 1,000 phone numbers, or invalid phone number/date format |
| 401 Unauthorized | Invalid or missing API key |
Batch Processing Example
async function checkRNDBasic(phoneRecords) {
const response = await fetch(
'https://dataapi.dncscrub.com/v1.5/Data/RNDBasic',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'loginId': 'YOUR_API_KEY'
},
body: JSON.stringify({ data: phoneRecords })
}
);
const results = await response.json();
// Categorize results
const safeToCall = results.filter(r => r.IsReassigned === false);
const doNotCall = results.filter(r => r.IsReassigned === true);
const unknown = results.filter(r => r.IsReassigned === null);
console.log(`Safe: ${safeToCall.length}`);
console.log(`Do Not Call: ${doNotCall.length}`);
console.log(`Unknown (insufficient FCC data): ${unknown.length}`);
return { safeToCall, doNotCall, unknown };
}
// Usage
const records = [
{ phoneNumber: '5039367187', date: '20211014' },
{ phoneNumber: '7075276405', date: '20211122' }
];
await checkRNDBasic(records);
⌘I