US Address Enrichment API
This page describes how to retrieve data from various different datasets using the Smarty US Address Enrichment API.
Contents
- HTTP request
- HTTP response
- Supplementary materials
HTTP request: URL composition
Proper URL construction is required for all API requests. Here are some example URLs:
https://us-enrichment.api.smarty.com/lookup/1000000/property/principal?auth-id=12345&auth-token=abcdef
https://us-enrichment.api.smarty.com/lookup/1000000/geo-reference?auth-id=12345&auth-token=abcdef
https://us-enrichment.api.smarty.com/lookup/1000000/secondary?auth-id=12345&auth-token=abcdef
https://us-enrichment.api.smarty.com/lookup/search/secondary?auth-id=12345&auth-token=abcdef&street=1400+Sandhill+Rd+Orem+UT
Here is a more granular examination of the examples above:
URL components | Values | Notes |
---|---|---|
Scheme | https |
NOTE: Non-secure http requests are not supported |
Hostname | us-enrichment.api.smarty.com |
|
Path | /lookup |
|
SmartyKey or search |
/1000000 /search |
The unique id associated with the address you are looking for. OR the word search if you are using any input fields for address searching.
|
Dataset |
/property/principal /property/financial /geo-reference /geo-reference/2010 /geo-reference/2020 /secondary /secondary/count |
Specify one of the available Datasets |
Query string | ?auth-id=12345&auth-token=abcdef |
Authentication information |
For additional information about URLs, please read our article about URL components.
HTTP request: Supported methods
HTTP requests can be categorized according to their HTTP method. Most HTTP requests are defined using the
GET
method. We call these "get requests." Other common methods are PUT
,
POST
, and DELETE
.
The following methods are supported by this API:
GET
(for sending a single input)
HTTP request: Headers
Header | Description | Example |
---|---|---|
Content-type |
The purpose of the Content-Type field is to describe the data contained in the body fully enough that the receiving user agent can pick an appropriate agent or mechanism to present the data to the user, or otherwise deal with the data in an appropriate manner. | Content-type: application/json |
ETag |
The ETag header provides the ability to check if a record has been updated since the last query.
Every query to the API will return an ETag header which represents a hash of the record in the response. This value may be stored and used in subsequent queries for that same record. If the record data has NOT been updated since the last query, it will return a 304 (Not Modified) and the client will not be charged for the query. (The 304 response does not contain a body.) If the record data HAS been updated, the latest version of the record will be returned along with a new ETag value. Important: Only the latest ETag value is valid for each record. This feature is NOT designed to retrieve past record versions. Also note that the ETag value will change if ANY data in the record has been updated, regardless of which attributes are requested using the include and exclude parameters.
|
ETag: AUHQQBIPBQDAYAA |
Input fields
Name | Type | Default value | Description |
---|---|---|---|
include |
string | (empty) |
List of attributes that are allowed to be included in the response.
This list can include Group names and Attribute names
separated by commas. All values must be lowercase.
If the record in the response does not have a value for that attribute, it will not be included in the response. |
exclude |
string | (empty) | List of attributes that are not allowed to be included in the response. This list can include Group names and Attribute names separated by commas. All values must be lowercase. |
Optional Address Search Fields | IMPORTANT: When using any search field, you must specify the word search in place
of the SmartyKey in the URL. See examples.
|
||
freeform |
string | (empty) | A full address. |
street |
string | (empty) |
The street line of the address, or the entire address. You may also need to provide values for other component search fields. |
city |
string | (empty) |
The city name or a city, state, and ZIP Code combined. You may also need to provide values for other component search fields. |
state |
string | (empty) |
The state name or abbreviation. You may also need to provide values for other component search fields. |
zipcode |
string | (empty) |
The ZIP Code. You may also need to provide values for other component search fields. |
All input field parameters must be UTF-8 and then URL encoded.
HTTP response: Status codes and results
Responses will have a status
header with a numeric value. This value is what you should check for
when writing code to parse the response. The only response body that should be read and parsed is a
200
response.
Status code | Response and explanation |
---|---|
200 |
OK (success!): The response body is a JSON object containing metadata about the results and zero or one addresses from the input provided with the request. See the annotated example below for details. An ETag header value will also be returned which represents a hash of the current record. (See ETag header in the request.) |
304 |
Not modified: The requested ETag header represents the latest data available. |
400 |
Bad request (malformed payload): The request body was blank or otherwise malformed. |
401 |
Unauthorized: The credentials were provided incorrectly or did not match any existing, active credentials. |
402 |
Payment required: There is no active subscription for the account associated with the credentials submitted with the request. |
413 |
Request entity too large: The request body was larger than 64 Kilobytes. |
422 |
Unprocessable content: Some parameter values are not correct. Detailed messages will describe the problem. |
429 |
Too many requests: We restrict the number of requests coming from a given source over too short of a time. |
Example response - property/principal Dataset
[
{
"smarty_key": "4888552154",
"data_set_name": "property",
"data_subset_name": "principal",
"attributes": {
"1st_floor_sqft": "2302",
"2nd_floor_sqft": "0",
"acres": "0.3289945",
"address_info_privacy": "",
"air_conditioner": "yes",
"arbor_pergola": "unknown",
"assessed_improvement_percent": "0.00",
"assessed_improvement_value": "0",
"assessed_land_value": "0",
"assessed_value": "399960",
"assessor_last_update": "2023-01-05",
"assessor_taxroll_update": "2022-01-01",
"attic_area": "405",
...
}
}
]
Example response - property/financial Dataset
[
{
"smarty_key": "9856148841",
"data_set_name": "property",
"data_subset_name": "financial",
"attributes": {
"assessor_taxroll_update": "2022-01-01",
"attic_area": "405",
"recorder": [
{
"recording_date": "2022-01-01",
"instrument_date": "2022-01-01",
"sale_price": "1",
...
},
{
"recording_date": "2023-01-01",
"instrument_date": "2023-01-01",
"sale_price": "2",
...
}
],
...
}
}
]
Example response - Geo-reference dataset
[
{
"smarty_key": "1601354568",
"data_set_name": "geo-reference",
"data_set_version": "census-2020",
"attributes": {
"census_block": {
"accuracy": "block",
"geoid": "530050109014000"
},
"census_county_division": {
"accuracy": "exact",
"code": "5300592768",
"name": "Richland-Kennewick"
},
"census_tract": {
"code": "0109.01"
},
"core_based_stat_area": {
"code": "28420",
"name": "Kennewick-Richland, WA"
},
"place": {
"accuracy": "exact",
"code": "5335275",
"name": "Kennewick",
"type": "incorporated"
}
}
}
]
Example response - Secondary dataset
[
{
"smarty_key": "1106658436",
"root_address": {
"secondary_count": 3,
"smarty_key": "1106658436",
"primary_number": "11401",
"street_name": "Dr Martin Luther King Jr",
"street_suffix": "St",
"street_postdirection": "N",
"city_name": "Saint Petersburg",
"state_abbreviation": "FL",
"zipcode": "33716",
"plus4_code": "2345"
},
"aliases": [
{
"smarty_key": "1106658436",
"primary_number": "11401",
"street_name": "9th",
"street_suffix": "St",
"street_postdirection": "N",
"city_name": "Saint Petersburg",
"state_abbreviation": "FL",
"zipcode": "33716",
"plus4_code": "2345"
}
],
"secondaries": [
{
"smarty_key": "347247266",
"secondary_designator": "Apt",
"secondary_number": "101",
"plus4_code": "2310"
},
{
"smarty_key": "1301723551",
"secondary_designator": "Apt",
"secondary_number": "102",
"plus4_code": "2310"
},
{
"smarty_key": "538303441",
"secondary_designator": "Apt",
"secondary_number": "103",
"plus4_code": "2313"
}
]
}
]
Example response - Secondary/count dataset
[
{
"smarty_key": "1166392406",
"count": 12
}
]
Data sets
See URL composition for all available options.
- US Property Principal Data (
property/principal
)- Contains all property data attributes including tax assessor and recorder data
- Recorder data will be last available financial transaction for the property
- US Property Financial Data (
property/financial
)- Dataset that contains historical financial data attributes pertaining to the property and property owner.
- US GeoReference Data (
geo-reference, geo-reference/2010, geo-reference/2020
)- The GeoReference Data product provides useful geographic data for geocoded addresses, such as census block id.
- Request legacy data, such as the 2010 and 2020 census, by specifying a data subset of
2010
or2020
.
For example: To return 2010 census data, specifygeo-reference/2010
. - To request the latest census information available, simply specify
geo-reference
with no trailing subset. -
The census version will be returned in the
data_set_version
property in the response.
Category Data element Definition census_block
An id of up to 15 characters that identifies a geographical area for statistical analysis. accuracy
Represents the accuracy of the geocode associated with the SmartyKey which was used to find the block. Values are block
,tract
, orcounty
.geoid
The census geoid can have different meanings based on the accuracy field. - If geocode accuracy is parcel or rooftop, the id is the 15 character
block
id. - If geocode accuracy is zip9, the id is the census
tract
id. (first 11 digits of block id) - If geocode accuracy is less than zip9, the id is the
county
FIPS. (first 5 digits of block id)
census_county_division
The county subdivision identifier and name (equivalent to townships). accuracy
Represents the accuracy of the geocode associated with the SmartyKey. Less than Zip9 accuracy will be inferred
. Otherwise, it will beexact
.code
The 10-digit census id code of the CCD. name
The name of the census county division. census_tract
Geographic entities within counties (or the statistical equivalent of counties). code
Census tracts within a county are identified by a 4-digit basic code between 0001
and9999
, and may have a 2-digit suffix ranging from.01
to.98
; (e.g.6059.02
)core_based_stat_area
Refers collectively to metropolitan statistical areas and micropolitan statistical areas. CBSAs consist of the county or counties (or equivalent entities) associated with at least one core (urban area) with a population of at least 10,000, plus adjacent counties having a high degree of social and economic integration with the core as measured through commuting ties. code
A 5-digit unique id of the CBSA (e.g. 39340
)name
The name of the CBSA (e.g. Provo-Orem, UT
)place
The Bureau of the Census defines a place as a concentration of population. It consists of a geographical boundary. accuracy
Represents the accuracy of the geocode associated with the SmartyKey. Less than Zip9 accuracy will be inferred
. Otherwise, it will beexact
.code
A 7-digit code that identifies the place. The first 2 digits identify the state. The last 5 identify the place within the state. name
The name of the place boundary. type
Indicates if the Census Place is incorporated
orunincorporated
. - Secondary data (
secondary, secondary/count
)- The secondary data product returns all secondaries and aliases associated with a SmartyKey.
- The SmartyKey can be that of the root address, any of the aliases, or any of the secondaries. Each will return the same related data.
- The
count
subset only returns the number of secondaries associated with the SmartyKey. Detailed data is not returned.
Address searching
To perform an address search instead of providing a SmartyKey, you may use the
search input fields. Note that you replace the SmartyKey
value with the string search
in the URL.
You will also need a subscription that allows Address Searching.
Example address search requests:
https://us-enrichment.api.smarty.com/lookup/search/property/principal?auth-id=12345&auth-token=abcdef&freeform=1400+Sandhill+Rd+Orem+UT+84058
https://us-enrichment.api.smarty.com/lookup/search/property/principal?auth-id=12345&auth-token=abcdef&street=1400+Sandhill+Rd&city=Orem+UT+84058
https://us-enrichment.api.smarty.com/lookup/search/geo-reference?auth-id=12345&auth-token=abcdef&street=1400+Sandhill+Rd&city=Orem&state=UT&zipcode=84058
This example address search response shows the search result in matched_address
. If no match is found,
an empty result will be returned similar to when an invalid SmartyKey is provided during a standard lookup.
If multiple matches are found because the input was ambiguous, the SmartyKey from the first result will be used.
[
{
"smarty_key": "2127882360",
"data_set_name": "property",
"data_subset_name": "principal",
"matched_address": {
"street": "1400 Sandhill Rd",
"city": "Orem",
"state": "UT",
"zipcode": "84058-7310"
},
"attributes": {
"acres": "7.0159998",
"air_conditioner": "yes",
"assessed_value": "14308800"
}
}
]
Attribute groups (For US property datasets)
The following attribute groups are supported in the
include
and exclude
input parameters when performing a request for
Group name | Description | Attributes included |
---|---|---|
group_financial |
Financial attributes in the Principal Dataset records |
assessed_improvement_percent
|
group_location |
Location attributes in the Principal Dataset records |
block1
|
group_structural |
Structural attributes in the Principal Dataset records |
1st_floor_sqft
|
Basic use cases
HTTP GET - SmartyKey valid - Property data exists
Precondition | SmartyKey is valid. Property data exists. |
Action | https://us-enrichment.api.smarty.com/lookup/111111/property/principal |
Result | All results for specific SmartyKey returned. |
HTTP GET - SmartyKey Has No Property Data
Precondition | SmartyKey has no property data |
Action | https://us-enrichment.api.smarty.com/lookup/111111/property/principal |
Result | Empty results returned. |
HTTP GET - Use include
and exclude
Parameters Containing a Group in Principal Data
Precondition | SmartyKey is valid. Property data exists. |
Action | https://us-enrichment.api.smarty.com/lookup/111111/property/principal?include=group_structural&exclude=attic_flag,boat_lift |
Result |
Available data for that SmartyKey within the attribute group
group_structural , excluding
the attic_flag and boat_lift attributes.
|
HTTP GET - SmartyKey valid - Property financial data exists
Precondition | SmartyKey is valid. Property data exists. |
Action | https://us-enrichment.api.smarty.com/lookup/111111/property/financial |
Result | All results for specific SmartyKey returned. |
HTTP GET - Use of ETag Header Where Data Has Not Been Updated
Precondition | SmartyKey is valid. Property data exists. An ETag value from a previous query and the data has not changed. |
Action | Header: ETag: AABBCCDD https://us-enrichment.api.smarty.com/lookup/111111/property/financial |
Result | HTTP 304 indicating that the data has not changed. There was no charge for the lookup. |
HTTP GET - Use of ETag Header Where Data Has Changed
Precondition | SmartyKey is valid. Property data exists. An ETag value from a previous query and the data has changed. |
Action | Header: ETag: AABBCCDD https://us-enrichment.api.smarty.com/lookup/111111/property/financial |
Result | All results for specific SmartyKey returned. A new ETag value is also returned. |