Overview
The Do-Not-Call-DNC API allows developers to check a US phone number against the DNC database and determine whether it is listed DNC or NOT DNC.
Each successful lookup consumes one API credit. The API returns results in JSON, making it easy to integrate with websites, applications, CRMs, and other software.
Access to this API is available exclusively to users with an active DNC API Prepaid Credits.
Credit Balance
To view your current API credit balance, use this link format:
https://www.donotcalldnc.com/api/prepaid/YOUR_API_KEY/
Remaining credits are also included in API responses through the credits_remaining field.
Authentication
Every request requires a valid API key. Provide it in either of the following ways.
Header (recommended):
X-API-KEY: YOUR_API_KEY
Query string:
?apikey=YOUR_API_KEY
Using the HTTP header is recommended because it keeps the API key separate from the URL.
Single Lookup API
Use this endpoint to check one phone number per request.
Endpoint
https://www.donotcalldnc.com/api/v1/check-1/
Method
GET
Query Parameters
phone (string): Required. Phone number to check. A 10-digit US phone number is recommended.
apikey (string): Required unless the API key is provided in the X-API-KEY header.
Successful Response
{
"success": true,
"phone": "9254047311",
"is_dnc": true,
"status": "DNC",
"credits_remaining": 59999,
"timestamp": "2026-08-10T00:25:31.1234567Z"
}
The values above are illustrative. The returned DNC status and credit balance depend on the actual lookup and account.
Response Fields
| Field |
Type |
Description |
success |
Boolean |
Indicates whether the lookup was successfully processed. |
phone |
String |
The normalized 10-digit phone number. |
is_dnc |
Boolean |
true if the phone number is listed in the DNC database. |
status |
String |
Either DNC or NOT DNC. |
credits_remaining |
Integer |
Number of API credits remaining after the lookup. |
timestamp |
String |
UTC timestamp when the request was processed. |
Example Request: cURL
curl -X GET "https://www.donotcalldnc.com/api/v1/check-1/?phone=9254047311" ^
-H "X-API-KEY: YOUR_API_KEY"
Example Request: JavaScript
fetch("https://www.donotcalldnc.com/api/v1/check-1/?phone=9254047311", {
method: "GET",
headers: {
"X-API-KEY": "YOUR_API_KEY"
}
})
.then(response => response.json())
.then(data => {
console.log(data);
});
Example Request: PHP
<?php
$apiKey = "YOUR_API_KEY";
$phone = "9254047311";
$url = "https://www.donotcalldnc.com/api/v1/check-1/?phone=" . urlencode($phone);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"X-API-KEY: " . $apiKey
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
Single Lookup Error Codes
- 200 - Success
- 400 - Missing or invalid request parameters
- 401 - Invalid API key
- 403 - Insufficient API credit (if returned by the single-lookup implementation)
- 500 - Internal processing error
Single Lookup Workflow
A typical request validates the API key and phone number, checks the DNC database, deducts a credit for a successful lookup, and returns a JSON response.
Bulk Lookup API
Use the Bulk API to check multiple US phone numbers against the DNC database in one request.
Endpoint
https://www.donotcalldnc.com/api/v1/bulk/
Method and Headers
POST
Content-Type: application/json
X-API-KEY: YOUR_API_KEY
Request Body
Send a JSON object containing a phones array. Each entry may be a phone number represented as a string. The maximum batch size is 1,000 entries, and the request body limit is 1 MB.
{
"phones": [
"9254047311",
"2125551234",
"8005551234"
]
}
Example Request: cURL
curl -X POST "https://www.donotcalldnc.com/api/v1/bulk/" ^
-H "Content-Type: application/json" ^
-H "X-API-KEY: YOUR_API_KEY" ^
-d "{\"phones\":[\"9254047311\",\"2125551234\",\"8005551234\"]}"
Example Request: JavaScript
fetch("https://www.donotcalldnc.com/api/v1/bulk/", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-KEY": "YOUR_API_KEY"
},
body: JSON.stringify({
phones: [
"9254047311",
"2125551234",
"8005551234"
]
})
})
.then(response => response.json())
.then(data => {
console.log(data);
});
Example Request: PHP
<?php
$apiKey = "YOUR_API_KEY";
$phones = [
"9254047311",
"2125551234",
"8005551234"
];
$payload = json_encode(["phones" => $phones]);
$ch = curl_init("https://www.donotcalldnc.com/api/v1/bulk/");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"X-API-KEY: " . $apiKey
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
Example Response
{
"success": true,
"count": 3,
"processed_count": 3,
"unprocessed_count": 0,
"credits_used": 3,
"credits_remaining": 59997,
"timestamp": "2026-10-21T02:00:00.0000000Z",
"results": [
{
"input": "9254047311",
"processed": true,
"success": true,
"phone": "9254047311",
"is_dnc": true,
"status": "DNC",
"credits_remaining": 59999
},
{
"input": "2125551234",
"processed": true,
"success": true,
"phone": "2125551234",
"is_dnc": false,
"status": "NOT DNC",
"credits_remaining": 59998
},
{
"input": "8005551234",
"processed": true,
"success": true,
"phone": "8005551234",
"is_dnc": false,
"status": "NOT DNC",
"credits_remaining": 59997
}
]
}
Note: This response is illustrative only. Actual DNC results and credit balances depend on the numbers checked and the account's balance.
Bulk Response Fields
| Field |
Type |
Description |
success |
Boolean |
Indicates that the bulk request completed and a response was generated. Individual entries can still have success: false. |
count |
Integer |
Total number of submitted entries. |
processed_count |
Integer |
Number of entries handled, including invalid phone numbers. |
unprocessed_count |
Integer |
Number of entries not processed, for example because credits were exhausted. |
credits_used |
Integer |
Number of credits deducted during this request. |
credits_remaining |
Integer |
Final account credit balance returned by the API. |
results |
Array |
Per-entry results in the same order as submitted. |
input |
String |
Original submitted value for that result. |
processed |
Boolean |
Indicates whether that entry was handled. Invalid phone numbers can be processed while having success: false. |
is_dnc |
Boolean |
Returned for successful lookups; true means the number is listed in the DNC database. |
status |
String |
Returned for successful lookups: DNC or NOT DNC. |
Bulk Credit Usage
- One credit is deducted for each successfully completed lookup of a unique valid phone number within a batch.
- Duplicate valid numbers in the same batch reuse the cached result and do not consume additional credits.
- Invalid phone numbers do not consume credits.
- If credits are exhausted, remaining entries are returned with
processed: false.
- Submitting the same number in a separate request may consume another credit.
- Results are returned in the same order as the submitted entries.
Bulk API Error Codes
- 400 - Invalid JSON, missing or empty
phones array, or more than 1,000 entries
- 401 - Missing, invalid, or inactive API key
- 405 - HTTP method other than POST
- 413 - Request body exceeds the 1 MB limit
- 415 - Unsupported content type; use
application/json
- 500 - Internal server error
Bulk API Notes
- Send requests using HTTPS and the
application/json content type.
- The maximum batch size is 1,000 entries per request.
- Phone numbers are normalized by removing non-digit characters; an initial US country code of
1 is removed when the resulting number has 11 digits.
- A server error may occur after some entries have already been processed and charged. Clients should not automatically retry a failed batch unless they can safely account for possible partial processing.