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.