Skip to main content
All APIs have rate limits to ensure fair usage and system stability.

Standard Rate Limits

APIRate LimitBatch Size
Scrub API (GET)100 requests/minute10 numbers
Scrub API (POST)100 requests/minute10,000 numbers
Litigator-Only API (GET)1,000 requests/minute10 numbers
Litigator-Only API (POST)1,000 requests/minute10,000 numbers
Reassigned APIs500 requests/minute1,000 numbers
TrustCall100 requests/minute50 numbers (add)

Average API Response Times

Average response time per request with 1 phone number. These are average measured by third-party monitoring services. Outliers will exist that are both faster and slower.
APIAverage Response Time
Full Scrub API600ms
Litigator-Only API400ms
Reassigned Authority Plus700ms
Reassigned Authority500ms
RND Basic700ms
Right Party ID1600ms

HTTP Method Requirements

NumbersRequired Method
1-10GET or POST
11+POST required
Requests with more than 50 phone numbers must use HTTP POST. GET requests will fail. If you don’t know your payload size, use HTTP POST to prevent future issue.

Retry Example

You must plan what your system will do in the event of a network or service outage. Our recommendation is to implement retries with exponential backoff.
async function scrubWithRetry(phoneNumbers, apiKey, maxRetries = 5) {
  const baseUrl = "https://www.dncscrub.com/scrub";
  const url = `${baseUrl}?phone=${phoneNumbers.join(",")}`;
  const baseDelay = 1000; // Start with 1 second

  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    const response = await fetch(url, { headers: { loginId: apiKey } });

    if (response.ok) {
      return await response.json();
    }

    if (response.status >= 500 && attempt < maxRetries) {
      // Exponential backoff: 1s, 2s, 4s, 8s, 16s
      const delay = baseDelay * Math.pow(2, attempt - 1);
      console.log(
        `Request failed with ${response.status}. Retrying in ${
          delay / 1000
        }s (attempt ${attempt}/${maxRetries})...`
      );
      await new Promise((resolve) => setTimeout(resolve, delay));
      continue;
    }

    throw new Error(`Request failed with status ${response.status}`);
  }
  throw new Error("Max retries exceeded");
}

// Usage
const results = await scrubWithRetry(
  ["5551234567", "5559876543"],
  "your-api-key"
);

Best Practices

Instead of making 100 requests with 1 number each, make 1 request with 100 numbers.
If you receive a 5xx response, wait and retry with exponential backoff.
Cache scrub results to avoid re-checking the same numbers unnecessarily.
Consider what your system will do in the event of a network or service outage. Implement retry logic with exponential backoff and have a fallback plan for when the API is unavailable.
For very large batches of phone numbers where real-time checking is not needed, consider using SFTP file upload instead of the API. This is more efficient for processing millions of records.

File Upload Limits for SFTP or Web Portal

ProductMax Rows Per FileMax File Size
Reassigned Authority Plus1,000,000500MB
Reassigned Authority10,000,000650MB
DNC Scrub15,000,000800MB