Result Codes
TheResultCode 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 forversion=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
- 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). - API callers may supply the contact’s postal code per number, as
PHONE|ID|POSTALCODEinphoneList. 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, andTZSourceispostalCode. Mobile numbers keep their area code when their owner moves, so this is the more reliable choice when you know where the contact lives. - If the postal code is missing or not recognized, step 1 applies and
TZSourceisareaCode.
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:
- 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. - 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, orPostalCodewhen you supplied one — useIsCallAllowedATDS. - Your equipment actually generates numbers, or your counsel has not
confirmed otherwise — use
IsCallAllowedATDS.
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
Withoutput=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
TheReason 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:ResultCode is W, or L when the number is wireless in a state that
prohibits solicitation to wireless numbers:
FL while RegionAbbrev returns NJ:
Standalone reasons
Some results set the entireReason 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
TheCarrierInfo 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
- 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