USPS-verified address APIs for autocomplete, parsing, verification, geocoding, and IP geolocation. Get started in under 5 minutes.
All systems operational99.9% uptime100K free requests/moREST API
Quick Start
Make your first API call in under 5 minutes.
1
Create a Free Account
Sign up at sthan.io and subscribe to the Free tier. No credit card required. Get 100,000 requests/month instantly.
2
Get Your API Key
Go to your Dashboard and copy your API key. Use it in the Authorization header of every request.
3
Make Your First Call
Copy any example below and replace YOUR_API_KEY with your actual key. That's it!
Authentication
Sthan.io uses a two-step authentication flow. First, obtain a JWT token using your profile credentials. Then, include that token as a Bearer token in all subsequent API requests.
Step 1: Get Your Token
GET/Auth/Token
Send your profileName and profilePassword as request headers. The API returns a JWT access token and its expiration time.
using var client = newHttpClient();
client.DefaultRequestHeaders.Add("profileName", "YOUR_PROFILE_NAME");
client.DefaultRequestHeaders.Add("profilePassword", "YOUR_PROFILE_PASSWORD");
var json = await client.GetStringAsync("https://api.sthan.io/Auth/Token");
// Deserialize to get access_token
API requests are rate-limited per subscription plan. When you exceed your limit, the API returns 429 Too Many Requests. The response includes a Retry-After header indicating when you can retry.
Plan
Requests / Month
Burst Rate
Free
100,000
10 req/sec
Starter
500,000
50 req/sec
Basic
2,000,000
100 req/sec
429 Response Headers
HTTP/1.1 429 Too Many Requests
Retry-After: 30X-RateLimit-Limit: 100000X-RateLimit-Remaining: 0X-RateLimit-Reset: 1708300800
GET
Address Autocomplete
/AutoComplete/USA/Address/{text}
Returns real-time address suggestions as the user types. Powered by USPS data with support for abbreviations, apartment/suite numbers, and partial input. Ideal for checkout forms and address fields.
Parameters
Name
Type
Required
Description
text
string
Required
Partial address to search. URL-encoded. Min 3 chars for best results.
Response Codes
200 Success400 Bad Request401 Unauthorized429 Rate Limited
Request
curl -X GET \
"https://api.sthan.io/AutoComplete/USA/Address/123%20main%20st" \
-H "Authorization: Bearer YOUR_API_KEY"
const response = awaitfetch(
"https://api.sthan.io/AutoComplete/USA/Address/123%20main%20st",
{ headers: { "Authorization": "Bearer YOUR_API_KEY" } }
);
const data = await response.json();
// ["123 Main St APT 1, Andover, MA 01810-3816", ...]
import requests
response = requests.get(
"https://api.sthan.io/AutoComplete/USA/Address/123%20main%20st",
headers={"Authorization": "Bearer YOUR_API_KEY"}
)
print(response.json())
# ["123 Main St APT 1, Andover, MA 01810-3816", ...]
using var client = newHttpClient();
client.DefaultRequestHeaders.Authorization =
newAuthenticationHeaderValue("Bearer", "YOUR_API_KEY");
var json = await client.GetStringAsync(
"https://api.sthan.io/AutoComplete/USA/Address/123%20main%20st");
// ["123 Main St APT 1, Andover, MA 01810-3816", ...]
req, _ := http.NewRequest("GET",
"https://api.sthan.io/AutoComplete/USA/Address/123%20main%20st", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
// ["123 Main St APT 1, Andover, MA 01810-3816", ...]
200 Response
[
"123 Main St APT 1, Andover, MA 01810-3816",
"123 Main St APT 1, Delhi, NY 13753-1257",
"123 Main St STE 1, Caldwell, ID 83605-5476",
"123 Main St, White Plains, NY 10601-3104",
"123 Main St, Brockton, MA 02301-6204"
]
Try it live
Type-ahead demo — results appear as you type. Calls server-side proxy with demo credentials.
Need more than just the full address string? Explore related APIs:
Address Parser
From $9/mo
Break addresses into components: street, city, state, ZIP, county.
Parses a raw address string into structured components (street number, street name, unit, city, state, ZIP, county). Returns USPS-standardized results with confidence scores.
Parameters
Name
Type
Required
Description
address
string
Required
Full or partial US address to parse. URL-encoded.
Request
curl -X GET \
"https://api.sthan.io/AddressParser/USA/Single/1345%20avenue%20of%20americas" \
-H "Authorization: Bearer YOUR_API_KEY"
using var client = newHttpClient();
client.DefaultRequestHeaders.Authorization =
newAuthenticationHeaderValue("Bearer", "YOUR_API_KEY");
var json = await client.GetStringAsync(
"https://api.sthan.io/AddressParser/USA/Single/1345%20avenue%20of%20americas");
// Deserialize to your model class
{
"inputAddress": "1345 avenue of americas",
"fullAddress": "1345 Avenue of the Americas, New York, NY 10105-2701",
"addressLine1": "1345 Avenue of the Americas",
"addressNumber": "1345",
"streetName": "Avenue of the Americas",
"city": "New York",
"stateCode": "NY",
"state": "New York",
"zipCode": "10105",
"zip4": "2701",
"county": "New York",
"isUspsVerified": true,
"confidence": 0.98
}
Response Fields
Field
Type
Description
fullAddress
string
Standardized full address with ZIP+4
addressNumber
string
House/building number
streetName
string
Standardized street name
unitType
string?
APT, STE, UNIT, etc.
county
string
County name
isUspsVerified
bool
Whether USPS confirmed the address exists
confidence
float
Match confidence score (0.0 – 1.0)
Try it live
Live demo — calls server-side proxy with demo credentials. No API key needed.
GET
Address Verification
/AddressVerification/Usa/Single/{address}
Verifies a US address against USPS data and returns deliverability information including DPV confirmation, carrier route, ZIP+4, delivery point, and record type.
Parameters
Name
Type
Required
Description
address
string
Required
US address to verify. URL-encoded.
Request
curl -X GET \
"https://api.sthan.io/AddressVerification/Usa/Single/1111%20howe%20ave%20sacramento%20ca" \
-H "Authorization: Bearer YOUR_API_KEY"
using var client = newHttpClient();
client.DefaultRequestHeaders.Authorization =
newAuthenticationHeaderValue("Bearer", "YOUR_API_KEY");
var result = await client.GetFromJsonAsync<VerifiedAddress>(
"https://api.sthan.io/AddressVerification/Usa/Single/1111%20howe%20ave%20sacramento%20ca");
Console.WriteLine($"DPV: {result.DpvConfirmation}");
Returns real-time US city name suggestions as the user types. Supports multiple display formats combining city name with state code or full state name.
Parameters
Name
Type
Required
Description
displayType
int
Required
0 = City, StateCode (e.g., Sacramento, CA) 1 = City, State (e.g., Sacramento, California)
text
string
Required
Partial city name to search. URL-encoded.
Request
curl -X GET \
"https://api.sthan.io/AutoComplete/USA/City/DisplayType/0/sacram" \
-H "Authorization: Bearer YOUR_API_KEY"
using var client = newHttpClient();
client.DefaultRequestHeaders.Authorization =
newAuthenticationHeaderValue("Bearer", "YOUR_API_KEY");
var json = await client.GetStringAsync(
"https://api.sthan.io/AutoComplete/USA/City/DisplayType/0/sacram");
Returns real-time ZIP code suggestions for US addresses. Supports 4 display formats with varying levels of detail. Covers all ~42,000 active US ZIP codes.
Parameters
Name
Type
Required
Description
displayType
int
Required
0 = ZipCode, City, StateCode 1 = ZipCode, City, State 2 = ZipCode-Zip4, City, StateCode 3 = ZipCode-Zip4, City, State
text
string
Required
Partial ZIP code or city name. URL-encoded.
Request
curl -X GET \
"https://api.sthan.io/AutoComplete/USA/ZipCode/DisplayType/0/9582" \
-H "Authorization: Bearer YOUR_API_KEY"
using var client = newHttpClient();
client.DefaultRequestHeaders.Authorization =
newAuthenticationHeaderValue("Bearer", "YOUR_API_KEY");
var json = await client.GetStringAsync(
"https://api.sthan.io/AutoComplete/USA/ZipCode/DisplayType/0/9582");
Type-ahead demo — results appear as you type. Calls server-side proxy with demo credentials.
GET
Forward Geocoding
/Geocoding/USA/Forward/{address}
Converts a US street address into geographic coordinates (latitude and longitude). Returns matched address components along with high-accuracy coordinates.
Parameters
Name
Type
Required
Description
address
string
Required
Full US address to geocode. URL-encoded.
Request
curl -X GET \
"https://api.sthan.io/Geocoding/USA/Forward/1600%20Pennsylvania%20Ave%20NW%20Washington%20DC" \
-H "Authorization: Bearer YOUR_API_KEY"
Live demo — calls server-side proxy with demo credentials. No API key needed.
GET
Reverse Geocoding
/Geocoding/USA/Reverse/{lat}/{lon}
Converts geographic coordinates (latitude/longitude) into a human-readable street address. Returns the nearest matched address with city, state, ZIP, and county information.
Parameters
Name
Type
Required
Description
lat
double
Required
Latitude coordinate (-90 to 90)
lon
double
Required
Longitude coordinate (-180 to 180)
Request
curl -X GET \
"https://api.sthan.io/Geocoding/USA/Reverse/38.897676/-77.036530" \
-H "Authorization: Bearer YOUR_API_KEY"
using var client = newHttpClient();
client.DefaultRequestHeaders.Authorization =
newAuthenticationHeaderValue("Bearer", "YOUR_API_KEY");
var json = await client.GetStringAsync(
"https://api.sthan.io/AutoComplete/Ind/City/DisplayType/0/mumbai");
using var client = newHttpClient();
client.DefaultRequestHeaders.Authorization =
newAuthenticationHeaderValue("Bearer", "YOUR_API_KEY");
var json = await client.GetStringAsync(
"https://api.sthan.io/AutoComplete/Ind/Locality/DisplayType/0/koramangala");
using var client = newHttpClient();
client.DefaultRequestHeaders.Authorization =
newAuthenticationHeaderValue("Bearer", "YOUR_API_KEY");
var json = await client.GetStringAsync(
"https://api.sthan.io/AutoComplete/Ind/PinCode/DisplayType/0/400001");