Use the Address Normalization API to standardize a US postal address into a consistent, component-based format. Submit an address in FullContact's standard location format and receive a canonical version with consistent casing, abbreviations, region names, region codes, and county.
Before integrating, review the limitations below to confirm the service fits your use case.
POST https://addressapi.service.fullcontact.com/v3/address.normalize
Authorization: Bearer {Your API Key}
Content-Type: application/json
All requests require Bearer token authentication. Treat API keys as passwords — do not expose them in client-side code or public repositories.
The request body uses FullContact's standard location format, wrapped in an address object.
| Parameter | Type | Required | Description |
| ---------------------- | ------ | ----------- | --------------------------------------------------------------------------------------------------------------------------- |
| address | object | Yes | Wrapper for the address to be normalized. |
| address.addressLine1 | string | Yes | Primary street address line (e.g., "1801 California St"). |
| address.addressLine2 | string | No | Secondary line such as a suite, unit, or apartment (e.g., "Suite 2400"). |
| address.city | string | Conditional | City name. Required when postalCode is not provided. |
| address.region | string | Conditional | Full region/state name (e.g., "Colorado"). Either region or regionCode is required when postalCode is not provided. |
| address.regionCode | string | Conditional | Region/state code (e.g., "CO"). Either region or regionCode is required when postalCode is not provided. |
| address.postalCode | string | Conditional | Postal Code. Required when city and region/regionCode are not both provided. |
| address.county | string | No | County name. Generally returned, not submitted. |
| address.country | string | No | ISO country code (e.g., "US"). Defaults to US if omitted. |
Minimum required fields: addressLine1 plus either postalCode or both city and a region (region or regionCode). Requests that do not meet this threshold return a 400.
{
"address": {
"addressLine1": "1801 California St",
"addressLine2": "Suite 2400",
"city": "Denver",
"region": "CO",
"postalCode": "80202",
"country": "US"
}
}
| Field | Type | Description |
| ---------------------- | -------------- | --------------------------------------------------- |
| address | object | Wrapper for the normalized address. |
| address.addressLine1 | string | Canonical street address. |
| address.addressLine2 | string | null | Canonical secondary line, or null if not present. |
| address.city | string | Canonical city name. |
| address.region | string | Full region/state name (e.g., "Colorado"). |
| address.regionCode | string | Region/state code (e.g., "CO"). |
| address.postalCode | string | Canonical postal code. |
| address.county | string | County for the normalized address. |
| address.country | string | ISO country code. |
{
"address": {
"addressLine1": "1801 California St",
"addressLine2": "Suite 2400",
"city": "Denver",
"region": "Colorado",
"regionCode": "CO",
"postalCode": "80202",
"county": "Denver",
"country": "US"
}
}
Returned when a normalized version of the submitted address could not be found.
{
"message": "Address not found in normalization cache"
}
Returned when the request body is missing required fields or cannot be parsed.
{
"code": 400,
"message": "Address must include a street address and either a postal code or a city and region."
}
curl -X POST https://addressapi.service.fullcontact.com/v3/address.normalize \
-H "Authorization: Bearer {Your API Key}" \
-H "Content-Type: application/json" \
-d '{
"address": {
"addressLine1": "1801 California St",
"addressLine2": "Suite 2400",
"city": "Denver",
"region": "CO",
"postalCode": "80202",
"country": "US"
}
}'
| Code | Meaning |
| ----- | ------------------------------------------------------------------------- |
| 200 | Normalized address returned. |
| 400 | Request body is missing required fields or could not be parsed. |
| 401 | Authorization header is missing or the bearer token is invalid. |
| 404 | A normalized version of the submitted address could not be found. |
| 422 | The submitted address could not be processed after normalization cleanup. |
The examples below illustrate the kinds of variations the service can resolve. Each shows the JSON request body and the corresponding 200 OK response.
The service abbreviates the street type (Street → St), expands the region (CO → Colorado), and fills in the postal code and county.
Request
{
"address": {
"addressLine1": "1801 California Street",
"city": "Denver",
"region": "CO"
}
}
Response
{
"address": {
"addressLine1": "1801 California St",
"addressLine2": null,
"city": "Denver",
"region": "Colorado",
"regionCode": "CO",
"postalCode": "80202",
"county": "Denver",
"country": "US"
}
}
The service strips punctuation from directionals (N.W. → NW).
Request
{
"address": {
"addressLine1": "1600 Pennsylvania Ave N.W.",
"city": "Washington",
"region": "DC"
}
}
Response
{
"address": {
"addressLine1": "1600 Pennsylvania Ave NW",
"addressLine2": null,
"city": "Washington",
"region": "District of Columbia",
"regionCode": "DC",
"postalCode": "20500",
"county": "District of Columbia",
"country": "US"
}
}
The service converts word-form street numbers to digits (Fifth → 5th), abbreviates the street type, and fills in the postal code.
Request
{
"address": {
"addressLine1": "350 Fifth Avenue",
"city": "New York",
"region": "NY"
}
}
Response
{
"address": {
"addressLine1": "350 5th Ave",
"addressLine2": null,
"city": "New York",
"region": "New York",
"regionCode": "NY",
"postalCode": "10118",
"county": "New York",
"country": "US"
}
}
When the request supplies only addressLine1 and postalCode, the service infers city, region, regionCode, and county.
Request
{
"address": {
"addressLine1": "1600 Pennsylvania Avenue NW",
"postalCode": "20500"
}
}
Response
{
"address": {
"addressLine1": "1600 Pennsylvania Ave NW",
"addressLine2": null,
"city": "Washington",
"region": "District of Columbia",
"regionCode": "DC",
"postalCode": "20500",
"county": "District of Columbia",
"country": "US"
}
}
"123 Main St, Anytown, CA 90210"). Inputs must be broken into components.region (e.g., "Colorado") or regionCode (e.g., "CO") is accepted as input. Successful responses always include both.country is omitted, the service treats the request as a US address.address object mirrors the location fields used elsewhere in the FullContact API (Enrich, Resolve), so payloads can be reused across endpoints.