Submit One-Time Scan
curl --request POST \
--url https://dataapi.dncscrub.com/v1.5/TrustCall/OneTimeScan \
--header 'Content-Type: <content-type>' \
--header 'loginId: <loginid>' \
--data '
{
"PhoneNumbers": [
"<string>"
],
"NotificationURL": "<string>",
"NotificationAPIKey": "<string>",
"ScanType": "<string>",
"TestNotificationURL": true
}
'import requests
url = "https://dataapi.dncscrub.com/v1.5/TrustCall/OneTimeScan"
payload = {
"PhoneNumbers": ["<string>"],
"NotificationURL": "<string>",
"NotificationAPIKey": "<string>",
"ScanType": "<string>",
"TestNotificationURL": True
}
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({
PhoneNumbers: ['<string>'],
NotificationURL: '<string>',
NotificationAPIKey: '<string>',
ScanType: '<string>',
TestNotificationURL: true
})
};
fetch('https://dataapi.dncscrub.com/v1.5/TrustCall/OneTimeScan', 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/TrustCall/OneTimeScan",
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([
'PhoneNumbers' => [
'<string>'
],
'NotificationURL' => '<string>',
'NotificationAPIKey' => '<string>',
'ScanType' => '<string>',
'TestNotificationURL' => true
]),
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/TrustCall/OneTimeScan"
payload := strings.NewReader("{\n \"PhoneNumbers\": [\n \"<string>\"\n ],\n \"NotificationURL\": \"<string>\",\n \"NotificationAPIKey\": \"<string>\",\n \"ScanType\": \"<string>\",\n \"TestNotificationURL\": true\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/TrustCall/OneTimeScan")
.header("loginId", "<loginid>")
.header("Content-Type", "<content-type>")
.body("{\n \"PhoneNumbers\": [\n \"<string>\"\n ],\n \"NotificationURL\": \"<string>\",\n \"NotificationAPIKey\": \"<string>\",\n \"ScanType\": \"<string>\",\n \"TestNotificationURL\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://dataapi.dncscrub.com/v1.5/TrustCall/OneTimeScan")
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 \"PhoneNumbers\": [\n \"<string>\"\n ],\n \"NotificationURL\": \"<string>\",\n \"NotificationAPIKey\": \"<string>\",\n \"ScanType\": \"<string>\",\n \"TestNotificationURL\": true\n}"
response = http.request(request)
puts response.read_body{
"JobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"Status": "Submitted",
"PhoneCount": 3
}
Call Deliverability (TrustCall)
Submit One-Time Scan
Submit a batch of phone numbers for one-time carrier spam score scanning
POST
/
v1.5
/
TrustCall
/
OneTimeScan
Submit One-Time Scan
curl --request POST \
--url https://dataapi.dncscrub.com/v1.5/TrustCall/OneTimeScan \
--header 'Content-Type: <content-type>' \
--header 'loginId: <loginid>' \
--data '
{
"PhoneNumbers": [
"<string>"
],
"NotificationURL": "<string>",
"NotificationAPIKey": "<string>",
"ScanType": "<string>",
"TestNotificationURL": true
}
'import requests
url = "https://dataapi.dncscrub.com/v1.5/TrustCall/OneTimeScan"
payload = {
"PhoneNumbers": ["<string>"],
"NotificationURL": "<string>",
"NotificationAPIKey": "<string>",
"ScanType": "<string>",
"TestNotificationURL": True
}
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({
PhoneNumbers: ['<string>'],
NotificationURL: '<string>',
NotificationAPIKey: '<string>',
ScanType: '<string>',
TestNotificationURL: true
})
};
fetch('https://dataapi.dncscrub.com/v1.5/TrustCall/OneTimeScan', 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/TrustCall/OneTimeScan",
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([
'PhoneNumbers' => [
'<string>'
],
'NotificationURL' => '<string>',
'NotificationAPIKey' => '<string>',
'ScanType' => '<string>',
'TestNotificationURL' => true
]),
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/TrustCall/OneTimeScan"
payload := strings.NewReader("{\n \"PhoneNumbers\": [\n \"<string>\"\n ],\n \"NotificationURL\": \"<string>\",\n \"NotificationAPIKey\": \"<string>\",\n \"ScanType\": \"<string>\",\n \"TestNotificationURL\": true\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/TrustCall/OneTimeScan")
.header("loginId", "<loginid>")
.header("Content-Type", "<content-type>")
.body("{\n \"PhoneNumbers\": [\n \"<string>\"\n ],\n \"NotificationURL\": \"<string>\",\n \"NotificationAPIKey\": \"<string>\",\n \"ScanType\": \"<string>\",\n \"TestNotificationURL\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://dataapi.dncscrub.com/v1.5/TrustCall/OneTimeScan")
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 \"PhoneNumbers\": [\n \"<string>\"\n ],\n \"NotificationURL\": \"<string>\",\n \"NotificationAPIKey\": \"<string>\",\n \"ScanType\": \"<string>\",\n \"TestNotificationURL\": true\n}"
response = http.request(request)
puts response.read_body{
"JobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"Status": "Submitted",
"PhoneCount": 3
}
Submit a batch of phone numbers for one-time carrier spam score scanning. Results are delivered asynchronously via webhook notification.
Unlike TrustCall monitoring, one-time scans do not add numbers to ongoing
monitoring. Results are delivered to your webhook URL when the scan completes.
Request
Headers
string
required
Your API Key (LoginId from your DNCScrub account)
string
required
Must be
application/jsonRequest Body
string[]
required
Array of 10-digit phone number strings to scan
string
required
Webhook URL where scan results will be POSTed when complete. Maximum 1500 characters.
Consider using webhook.site to generate a temporary
URL for testing. It lets you inspect the exact payload and headers sent by the
callback, making it easy to understand the webhook structure before
implementing your production endpoint.
string
Optional API key to include in the webhook notification header. Maximum 1500 characters.
string
required
Type of scan to perform: -
carrier - Carrier scores only (Verizon, AT&T,
T-Mobile) - carrierandapps - Carrier scores plus app scores (RoboKiller,
Nomorobo, FTC complaints)boolean
Set to
true to test your webhook URL without performing an actual scan. The system will send a test payload to verify your endpoint is reachable.Example Request
curl --location --request POST \
'https://dataapi.dncscrub.com/v1.5/TrustCall/OneTimeScan' \
--header 'loginId: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"PhoneNumbers": ["5039367187", "8084565302", "7867056421"],
"NotificationURL": "https://your-server.com/webhook/trustcall",
"NotificationAPIKey": "your-webhook-api-key",
"ScanType": "carrierandapps"
}'
const response = await fetch(
"https://dataapi.dncscrub.com/v1.5/TrustCall/OneTimeScan",
{
method: "POST",
headers: {
"Content-Type": "application/json",
loginId: "YOUR_API_KEY",
},
body: JSON.stringify({
PhoneNumbers: ["5039367187", "8084565302", "7867056421"],
NotificationURL: "https://your-server.com/webhook/trustcall",
NotificationAPIKey: "your-webhook-api-key",
ScanType: "carrierandapps",
}),
}
);
const data = await response.json();
console.log(data);
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("loginId", "YOUR_API_KEY");
var requestData = new
{
PhoneNumbers = new[] { "5039367187", "8084565302", "7867056421" },
NotificationURL = "https://your-server.com/webhook/trustcall",
NotificationAPIKey = "your-webhook-api-key",
ScanType = "carrierandapps"
};
var content = new StringContent(
JsonSerializer.Serialize(requestData),
Encoding.UTF8,
"application/json"
);
var response = await client.PostAsync(
"https://dataapi.dncscrub.com/v1.5/TrustCall/OneTimeScan",
content
);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
{
"JobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"Status": "Submitted",
"PhoneCount": 3
}
Response Fields
string (UUID)
Unique identifier for the scan job. Use this to check scan status.
string
Initial status of the scan:
Submittedinteger
Number of phone numbers submitted for scanning
Webhook Notification
When the scan completes, results are POSTed to yourNotificationURL:
{
"JobId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"Status": "Complete",
"Results": [
{
"Phone": "5039367187",
"CurrScore": "Clean",
"VerizonScore": "Clean",
"ATTScore": "Clean",
"TMobileScore": "Clean",
"RoboKillerStatus": "Clean",
"NomoroboStatus": "Clean",
"FTCComplaints": null
}
]
}
Error Responses
| Status | Description |
|---|---|
| 400 Bad Request | Invalid request body or phone number format |
| 401 Unauthorized | Invalid or missing API key |
| 403 Forbidden | Account not authorized for one-time scan or insufficient credits |
| 500 Server Error | Internal server error |
Scan Types
| Scan Type | Included Data |
|---|---|
carrier | Verizon, AT&T, T-Mobile scores |
carrierandapps | Carrier scores + RoboKiller, Nomorobo, FTC complaints |
⌘I