TruAddress Python SDK
Official Python SDK for TruAddress - Address validation, autocomplete, and geocoding API.
Installation
pip install truaddress
Quick Start
from truaddress import TruAddress
client = TruAddress(api_key="YOUR_API_KEY")
# Validate a US address
results = client.us_street(
street="1600 Pennsylvania Ave NW",
city="Washington",
state="DC",
zipcode="20500"
)
if results and TruAddress.is_deliverable(results[0]):
print("Valid address:", results[0]["delivery_line_1"])
Available Methods
US Endpoints
us_street() - US Street Address Validation
results = client.us_street(
street="350 5th Avenue",
city="New York",
state="NY",
zipcode="10118"
)
print(results[0]["analysis"]["dpv_match_code"]) # 'Y' = Deliverable
print(results[0]["metadata"]["latitude"]) # 40.748535
DPV Match Codes:
Y- Confirmed deliverableS- Secondary (apt/suite) missingD- Secondary invalidN- Not deliverable
us_zipcode() - ZIP Code Lookup
# By ZIP code
result = client.us_zipcode(zipcode="90210")
print(result[0]["city_states"][0]["city"]) # 'Beverly Hills'
# By city/state
result = client.us_zipcode(city="Austin", state="TX")
us_autocomplete() - Address Autocomplete
result = client.us_autocomplete(
search="350 5th Ave",
max_results=5,
state_filter=["NY"]
)
for s in result["suggestions"]:
print(f"{s['street_line']}, {s['city']}, {s['state']} {s['zipcode']}")
us_extract() - Extract Addresses from Text
result = client.us_extract("Ship to: 350 5th Avenue, New York, NY 10118. Thanks!")
print(result["meta"]["address_count"]) # 1
print(result["addresses"][0]["verified"]) # True
us_reverse_geo() - Reverse Geocoding
result = client.us_reverse_geo(
latitude=40.748535,
longitude=-73.9856571
)
for r in result["results"]:
print(f"{r['address']['street']} ({r['distance']:.0f}m away)")
International Endpoints
intl_street() - International Address Validation
results = client.intl_street(
country="GBR",
freeform="10 Downing Street, London"
)
print(results[0]["components"]["postal_code"]) # 'SW1A 2AB'
print(TruAddress.is_verified(results[0])) # True
intl_autocomplete() - International Autocomplete
result = client.intl_autocomplete(
search="Champs Elysees",
country="FRA",
max_results=5
)
Core Endpoints
validate() - Global Address Validation
results = client.validate(
country="US",
address1="350 5th Avenue",
locality="New York",
administrative_area="NY",
postal_code="10118"
)
correct() - Address Correction
results = client.correct(freeform="1600 pennsylvania ave washington dc 20500")
print(results[0]["address1"]) # Corrected address
autocomplete() - Global Autocomplete
result = client.autocomplete(q="Buckingham Palace London", limit=5)
Helper Methods
# Check if US address is deliverable
TruAddress.is_deliverable(result) # DPV code = 'Y'
# Check if US address is a mail drop (CMRA)
TruAddress.is_cmra(result)
# Check if US address is vacant
TruAddress.is_vacant(result)
# Check if international address is verified
TruAddress.is_verified(result)
# Format addresses as strings
TruAddress.format_us_address(result) # "350 5th Ave, New York NY 10118"
TruAddress.format_intl_address(result) # "10 Downing Street, London, SW1A 2AB"
Error Handling
from truaddress import TruAddress, TruAddressError
try:
results = client.us_street(street="123 Main St")
except TruAddressError as e:
print(f"Error: {e.message}")
print(f"Status code: {e.status_code}")
Configuration
client = TruAddress(
api_key="YOUR_API_KEY",
base_url="https://truaddress.net" # Optional: custom base URL
)
Django Integration
# settings.py
TRUADDRESS_API_KEY = os.environ.get("TRUADDRESS_API_KEY")
# views.py
from django.conf import settings
from truaddress import TruAddress
client = TruAddress(api_key=settings.TRUADDRESS_API_KEY)
def validate_address(request):
results = client.us_street(
street=request.POST["street"],
city=request.POST["city"],
state=request.POST["state"],
zipcode=request.POST["zipcode"]
)
return JsonResponse({"valid": len(results) > 0 and TruAddress.is_deliverable(results[0])})
Flask Integration
from flask import Flask, request, jsonify
from truaddress import TruAddress
app = Flask(__name__)
client = TruAddress(api_key=os.environ["TRUADDRESS_API_KEY"])
@app.route("/validate", methods=["POST"])
def validate():
data = request.json
results = client.us_street(**data)
return jsonify({"valid": len(results) > 0})
Requirements
- Python 3.8+
- requests >= 2.25.0
License
MIT
Metadata
Release files for truaddress 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| truaddress-1.0.0.tar.gz | 8.5 kB | Without provenance | Details for truaddress-1.0.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| truaddress-1.0.0-py3-none-any.whl | Python 3 | none | any | Details for truaddress-1.0.0-py3-none-any.whl |
Total release size: 15.9 kB
Release files / truaddress-1.0.0.tar.gz
| Download URL | truaddress-1.0.0.tar.gz |
|---|---|
| Size | 8.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0027e3db3aa3f43386884b6de5661ce88817489669cd95d8957d9a69483a3d37
|
|
BLAKE2b-256 checksum How to use checksums |
d1a7c55d3448e04fe78f342867fe7ab85936fde84101c4274ce41175e72fcba3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.0
|
Release files / truaddress-1.0.0-py3-none-any.whl
| Download URL | truaddress-1.0.0-py3-none-any.whl |
|---|---|
| Size | 7.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b319eb239f24322df8fb88be5bd280e21f0a1fd1f5ac7dab38acbe30a77e0185
|
|
BLAKE2b-256 checksum How to use checksums |
d026d5699696aff81e4a87c200d589347179feb81ec60eba79a73ddb2530e0c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.0
|
Security for truaddress 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.