API reference

Address validation API

Validate, standardize, and classify U.S. addresses from your own application. This reference covers the current production contract, authentication, request fields, response fields, limits, and errors.

Base URL
https://api.addrex.io
Auth
Bearer token or x-addrex-api-key header.
Free Beta
10,000 validation rows per day. Autocomplete excluded.

Endpoints

The validation endpoint is available to Free Beta and paid accounts. Autocomplete is available only for accounts with autocomplete enabled.

MethodPathAuthStatusDescription
POST/v1/validateAPI keyAvailableValidate one address from JSON input.
GET/v1/validateAPI keyAvailableValidate one address from query parameters.
GET/api/autocomplete/v1/suggestAPI keyPaid plansReturn address suggestions for type-ahead UI. Not included in Free Beta.
GET/api/autocomplete/v1/detailsAPI keyPaid plansReturn details for a selected autocomplete suggestion. Not included in Free Beta.

POST request

curl -X POST https://api.addrex.io/v1/validate \
  -H "Authorization: Bearer ADDREX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input": "1361 rich lane buda texas 78610"
  }'

GET request

curl -G https://api.addrex.io/v1/validate \
  -H "Authorization: Bearer ADDREX_API_KEY" \
  --data-urlencode "input=1361 rich lane buda texas 78610"

Node.js

const response = await fetch("https://api.addrex.io/v1/validate", {
  method: "POST",
  headers: {
    "Authorization": "Bearer ADDREX_API_KEY",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    address: {
      line1: "1361 Rich Lane",
      city: "Buda",
      state: "TX",
      zip: "78610"
    }
  })
});

const result = await response.json();
console.log(result.status, result.standardized);

Python

import requests

response = requests.post(
    "https://api.addrex.io/v1/validate",
    headers={"Authorization": "Bearer ADDREX_API_KEY"},
    json={"input": "1361 rich lane buda texas 78610"},
    timeout=30,
)

print(response.status_code)
print(response.json())

Request body

Send either input or address.line1. City, state, and ZIP improve match quality.

FieldTypeRequiredDescription
inputstringNoOne-line address. If provided, Addrex parses street, city, state, and ZIP.
address.line1stringYes*Street address. Required when input is not provided.
address.line2stringNoApartment, suite, unit, or secondary address line.
address.citystringNoCity name. Recommended for higher confidence.
address.statestringNoTwo-letter state code or full state name.
address.zipstringNo5-digit ZIP or ZIP+4. Recommended when available.

Response body

Responses are JSON. Successful responses use HTTP 200 and include normalized status, standardized address data, quality metadata, and latency.

FieldTypeDescription
idstringRequest ID. Also returned in x-request-id header.
statusstringProduct status: VALIDATED, CORRECTED, PARTIAL, or NOT_FOUND.
validation_statusstringSame normalized status as status for compatibility.
confidencenumber0.0 to 1.0 match confidence.
inputobjectNormalized version of the submitted input.
standardizedobjectStandardized address fields and delivery metadata.
standardized.line1stringStandardized street line.
standardized.citystringStandardized city.
standardized.statestringTwo-letter state code.
standardized.zip5string5-digit ZIP.
standardized.zip4stringZIP+4 when available.
standardized.carrier_routestringCarrier route when available.
standardized.countystringCounty name when available.
standardized.county_fipsstringCounty FIPS when available.
standardized.deliverabilitystringD, U, or N when available.
match_codestringEngine status/source code.
match_sourcestringSource layer that produced the match.
reason_codesstring[]Engine reason codes.
changesstring[]Human-readable standardization changes.
qualityobjectReference quality and review guidance.
suggested_addressstringOptional reference suggestion when review is needed.
display_addressstringOptional display-friendly address.
latency_msnumberEnd-to-end request latency measured by the API route.

Example response

{
  "id": "req_lx9h2m_ab12cd",
  "status": "CORRECTED",
  "validation_status": "CORRECTED",
  "confidence": 0.97,
  "input": {
    "line1": "1361 rich lane",
    "city": "buda",
    "state": "TX",
    "zip": "78610"
  },
  "standardized": {
    "line1": "1361 RICH LN",
    "city": "BUDA",
    "state": "TX",
    "zip5": "78610",
    "zip4": "1234",
    "carrier_route": "R001",
    "county": "HAYS",
    "county_fips": "48209",
    "deliverability": "D",
    "source": "rust-engine"
  },
  "geocode": null,
  "match_code": "ADDREX_ENGINE",
  "match_source": "ADDREX_ENGINE",
  "reason_codes": [],
  "changes": [
    "Street standardized from \"1361 rich lane\" to \"1361 RICH LN\""
  ],
  "latency_ms": 38
}

Usage headers

x-request-id
Support/debug ID for the request.
x-usage-used
Used lookups in the active period.
x-usage-limit
Included lookup allowance.
x-usage-remaining
Remaining included lookups.

Errors

Errors return JSON with error and message. Most validation errors also include request_id.

HTTPErrorMeaning
400bad_requestMissing address input or malformed request body.
401unauthorizedMissing, invalid, inactive, or revoked API key.
402lookup_limit_exceededProduction account has no remaining included lookups and overage is disabled.
403email_verification_requiredFree Beta account must verify email before using validation.
403feature_unavailableRequested feature is not available on the current plan.
403account_suspendedAccount is suspended.
429quota_exceededFree Beta daily row allowance is exhausted.
500service_unavailableAutocomplete service unavailable.
502validation_failedValidation engine request failed.

Production lookup limit

{
  "error": "lookup_limit_exceeded",
  "message": "No remaining lookup credits available. Upgrade your plan or enable overage processing.",
  "request_id": "req_lx9h2m_ab12cd",
  "limits": {
    "remainingLookupCredits": 0,
    "includedLookups": 2000,
    "usedLookups": 2000,
    "overageEnabled": false
  }
}

Free Beta autocomplete block

{
  "error": "feature_unavailable",
  "message": "Autocomplete is not included in the Free Beta program."
}

Beta and production behavior

Free Beta accounts can validate single addresses and process spreadsheet rows up to the daily allowance. Files larger than the remaining daily allowance process the allowed rows and report the unprocessed count. Paid production accounts use the plan's included lookup allowance; when overage is disabled, the API returns 402 before recording extra usage.

Key security

Keep API keys server-side.

Rotate keys if they are exposed.

Use request IDs when contacting support.