Skip to main content
This guide provides a complete reference for understanding the Scrub API response fields and result codes. These fields are also the same as in our batch scrub processing that can be either done thru the DNCScrub web portal or SFTP. Whether a call is permissible depends on the call’s content. We recommend each caller review the Consent Chart in our compliance guide with their legal counsel. Our responses are oriented around the call’s content being a marketing message.

Result Codes

The ResultCode field indicates the overall scrub result for a phone number:

Clean

Wireless \ VoIP Indicators

EBR (Existing Business Relationship)

VoIP

VoIP should be treated the same way as wireless. Federal and state laws that apply to Wireless apply to VoIP as well.

Industry Exemptions

Do Not Call

Invalid or Blocked

Response Fields

Types below are for version=8 JSON (see JSON response shape); earlier versions return every value as a string.

Phone Information

Location Information

Carrier Information

Timezone Information

How the time zone and calling window are determined

  1. By default the destination is located from the phone number’s area code and prefix (NPA-NXX). That gives the time zone (TZCode, UTCOffset) and the state whose calling hours, holidays and state-of-emergency blocks are applied (CallingWindow, CallingTimeRestrictions, DoNotCallToday).
  2. API callers may supply the contact’s postal code per number, as PHONE|ID|POSTALCODE in phoneList. When the postal code is recognized (5-digit US ZIP or Canadian postal code / FSA), the destination time zone and state come from the postal code instead, and TZSource is postalCode. Mobile numbers keep their area code when their owner moves, so this is the more reliable choice when you know where the contact lives.
  3. If the postal code is missing or not recognized, step 1 applies and TZSource is areaCode.
The postal code never changes ResultCode, Reason, RegionAbbrev, Country, Locale, DNC list matching or EBR handling — those always follow the phone number. Batch scrubs (portal upload and SFTP) do not accept a postal code.

EBR Information

Line Type Dates

Other Fields

EBRExpiresOn is returned only with version=6 or higher; WirelessPortDate and VoIPDate only with version=7 or higher; PostalCode, TZSource, IsCallAllowedNonATDS, IsCallAllowedATDS and IsCallAllowedAI only with version=8 or higher. Use version=8 to receive all fields.In versions 6–7, EBRExpiresOn is not an ISO 8601 timestamp: the time portion is always 23:59:00 (end of day) and no timezone is included. Treat it as a date — compare YYYY-MM-DD against your local calendar date rather than parsing it as a UTC timestamp. Version 8 returns the date only.

Is the call allowed?

ResultCode has many values because the right action depends on how you place the call. With version=8 the response includes three flags that collapse ResultCode, EBRType, DoNotCallToday and the calling window into one yes/no answer for a marketing call placed right now. They differ in how wireless numbers and consent are treated, because that is where the law forks. All three also require every check below: Everything else — D, P, B, I, M — returns false on all three. The flags are nested: IsCallAllowedAI implies IsCallAllowedATDS implies IsCallAllowedNonATDS. Consent is a Permission (P) EBR stored through the EBR and Consent API. Sale and Inquiry EBRs are DNC exemptions, not consent, and do not satisfy the ATDS or AI flags.

Which flag applies to you

Under the federal TCPA, an autodialer (ATDS) is equipment that stores or produces telephone numbers using a random or sequential number generator (Facebook v. Duguid, U.S. Supreme Court, 2021). Since that decision, courts have consistently held that a dialer — including a predictive dialer — that calls numbers from a list you loaded is not an ATDS, even if it uses a sequential counter to work through the list (e.g. Soliman v. Subway, 2d Cir. 2024). For a live-agent call from your own list, IsCallAllowedNonATDS is therefore usually the right flag under federal law. Three things move a call to a stricter flag regardless of the dialer:
  1. Voice. An artificial, prerecorded or AI-generated voice, or a voicemail drop, requires prior express written consent for marketing on its own — use IsCallAllowedAI. The FCC confirmed in February 2024 that AI-generated voices are artificial voices under the TCPA.
  2. State law. Florida, Oklahoma, Washington, Maryland and a growing list of states define “autodialer” more broadly than the federal test (typically any automated system for the selection or dialing of numbers) and attach their own consent and calling-hour rules. If the contact is in one of those states — use RegionAbbrev, or PostalCode when you supplied one — use IsCallAllowedATDS.
  3. Your equipment actually generates numbers, or your counsel has not confirmed otherwise — use IsCallAllowedATDS.
These flags encode DNC status, stored consent, line type and calling hours — the data DNCScrub holds. They do not know how you obtained the number, whether your consent language meets a given state’s standard, or what your dialer does. Which flag is correct for your operation is a determination for you and your counsel; when in doubt, use the stricter flag. A false on any flag does not mean the call is illegal for every use case (for example informational or non-marketing calls); use ResultCode, LineType and CallingWindow for those.
All flags are evaluated at scrub time. The calling-window check makes them change during the day, so for lists you scrub in advance rely on CallingWindow and UTCOffset at dial time rather than a stored flag.

JSON response shape

With output=json, version 8 returns an object:
results has one row per number, in the order submitted. Errors (HTTP 4xx/5xx) are also objects ({"message": "..."}), so a client never has to test whether the body is an array. Values are typed: Phone stays a string: it is an identifier, not a quantity. Field names are unchanged from earlier versions, so a v7 client moving to v8 changes only where it reads the array and how it compares booleans.
Versions 5–7 return a bare JSON array with every value quoted as a string ("UTCOffset": "-420", "IsWirelessOrVoIP": "1", "WirelessPortDate": "0" for none, "EBRExpiresOn": "2027-02-09 23:59:00", and "DoNotCallToday": "" when no calling window applies — treat empty as 0). Those versions are unchanged. CSV output is identical across versions apart from the added columns.

Reason Field Format

The Reason field provides detail about why a number was flagged. For a Do Not Call result (ResultCode D or O), it is a fixed set of semicolon-separated positions, one per database. Each position is always present and always in the same order; a position is left empty when the number is not on that database. Parse by position — for example, the state entry is always the second position. Country is USA or CAN. The date is the date the number was added to that registry.
The StateList in State (StateList) is the state DNC registry the number is listed on — not where the number is geographically from. Those differ more often than you might expect: a number can be on one state’s registry while its area code belongs to another (a ported number, or a state that publishes out-of-state area codes). For example, 2036295673 has a Connecticut area code but is on Florida’s registry, so it returns State (FL).Use the separate RegionAbbrev field for the number’s geographic state/province. A number listed on several state registries reports one of them; the Reason field has a single State position by design, so parsing by position stays reliable.

Examples

National DNC only:
State DNC only (note the leading empty National position):
On National, State, and TPS:
Wireless number with no DNC-list match (position 4 set, others empty). The ResultCode is W, or L when the number is wireless in a state that prohibits solicitation to wireless numbers:
Wireless number that is also on a state DNC list (positions 2 and 4 set). This number has a New Jersey area code but is listed on Florida’s registry, so the State position reports FL while RegionAbbrev returns NJ:

Standalone reasons

Some results set the entire Reason to a single value instead of the positional format above:
For these standalone reasons, the single value replaces the positional databases — the number may also be on other DNC databases that the Reason field does not list in this case. Wireless is not a standalone reason; it appears in position 4 as W (see the examples above).

Carrier Information Format

The CarrierInfo field contains three parts separated by semicolons:

Carrier Types

Line Types

Timezone Codes

TZCode values for US and Canadian destinations. UTCOffset is returned separately and already accounts for DST, so most integrations only need UTCOffset and CallingWindow.

Example Response Analysis

Analysis:
  • Result: D = Do Not Call
  • Reason: On National DNC since June 1, 2003
  • Location: Santa Rosa, CA, USA
  • Carrier: AT&T California (landline)
  • Line Type: Landline (AllOther, IsWirelessOrVoIP = false)
  • Timezone: Pacific (code 4, UTC-420 minutes, derived from the area code)
  • Callable now?: No on all three flags — the number is on the National DNC