Reassigned Authority Plus (POST)
curl --request POST \
--url https://dataapi.dncscrub.com/v1.5/Data/EnhancedRND \
--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/EnhancedRND"
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/EnhancedRND', 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/EnhancedRND",
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/EnhancedRND"
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/EnhancedRND")
.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/EnhancedRND")
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": "7075276405",
"IsReassigned": false,
"HasSafeHarbor": true,
"CCCIsReassigned": false,
"IsSandBox": false
},
{
"PhoneNumber": "5039367187",
"IsReassigned": false,
"HasSafeHarbor": true,
"CCCIsReassigned": false,
"IsSandBox": false
}
]
Reassigned Scrub
Reassigned Authority Plus (POST)
Reassigned Authority Plus - Enhanced reassigned number check combining carrier and FCC data
POST
/
v1.5
/
Data
/
EnhancedRND
Reassigned Authority Plus (POST)
curl --request POST \
--url https://dataapi.dncscrub.com/v1.5/Data/EnhancedRND \
--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/EnhancedRND"
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/EnhancedRND', 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/EnhancedRND",
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/EnhancedRND"
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/EnhancedRND")
.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/EnhancedRND")
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": "7075276405",
"IsReassigned": false,
"HasSafeHarbor": true,
"CCCIsReassigned": false,
"IsSandBox": false
},
{
"PhoneNumber": "5039367187",
"IsReassigned": false,
"HasSafeHarbor": true,
"CCCIsReassigned": false,
"IsSandBox": false
}
]
Batch check multiple phone numbers using TCPA Authority Plus (Enhanced RND), which combines CCC’s authoritative carrier data with the FCC Reassigned Number Database.
For single number lookups, use the GET
method instead.
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/EnhancedRND' \
--header 'loginId: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"Data": [
{ "phoneNumber": "7075276405", "date": "20211109" },
{ "phoneNumber": "5039367187", "date": "20211109" }
]
}'
const response = await fetch(
"https://dataapi.dncscrub.com/v1.5/Data/EnhancedRND",
{
method: "POST",
headers: {
"Content-Type": "application/json",
loginId: "YOUR_API_KEY",
},
body: JSON.stringify({
Data: [
{ phoneNumber: "7075276405", date: "20211109" },
{ phoneNumber: "5039367187", date: "20211109" },
],
}),
}
);
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 = "7075276405", date = "20211109" },
new { phoneNumber = "5039367187", date = "20211109" }
}
};
var content = new StringContent(
JsonSerializer.Serialize(requestData),
Encoding.UTF8,
"application/json"
);
var response = await client.PostAsync(
"https://dataapi.dncscrub.com/v1.5/Data/EnhancedRND",
content
);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
[
{
"PhoneNumber": "7075276405",
"IsReassigned": false,
"HasSafeHarbor": true,
"CCCIsReassigned": false,
"IsSandBox": false
},
{
"PhoneNumber": "5039367187",
"IsReassigned": false,
"HasSafeHarbor": true,
"CCCIsReassigned": false,
"IsSandBox": false
}
]
Response Fields
Each object in the response array contains:string
The phone number that was checked
boolean | null
Combined result - use this field to determine if to place the call: -
true - Reassigned. Do not call. - false - Not reassigned. Safe to
call. - null - Insufficient information.boolean
true if an FCC safe harbor exemption may be availableboolean | null
Result from CCC’s carrier data only. For informational purposes.
boolean
true if the response was generated in sandbox mode (test data), false for production data.Error Responses
| Status | Description |
|---|---|
| 400 Bad Request | Invalid request - missing/empty Data property, more than 1,000 phone numbers, or invalid phone/date format |
| 401 Unauthorized | Invalid or missing API key |
Batch Processing Example
async function checkEnhancedRND(phoneRecords) {
const response = await fetch(
"https://dataapi.dncscrub.com/v1.5/Data/EnhancedRND",
{
method: "POST",
headers: {
"Content-Type": "application/json",
loginId: "YOUR_API_KEY",
},
body: JSON.stringify({ Data: phoneRecords }),
}
);
const results = await response.json();
// Categorize by IsReassigned (the combined result)
const safeToCall = results.filter((r) => r.IsReassigned === false);
const doNotCall = results.filter((r) => r.IsReassigned === true);
const unknown = results.filter((r) => r.IsReassigned === null);
// Numbers with safe harbor protection
const withSafeHarbor = safeToCall.filter((r) => r.HasSafeHarbor);
return {
safeToCall: safeToCall.map((r) => r.PhoneNumber),
doNotCall: doNotCall.map((r) => r.PhoneNumber),
unknown: unknown.map((r) => r.PhoneNumber),
safeHarborCount: withSafeHarbor.length,
};
}
// Usage
const records = [
{ phoneNumber: "7075276405", date: "20211109" },
{ phoneNumber: "5039367187", date: "20211109" },
];
const result = await checkEnhancedRND(records);
console.log(`Safe to call: ${result.safeToCall.length}`);
console.log(`With safe harbor: ${result.safeHarborCount}`);
⌘I