USA Address Autocomplete
USPS-powered address suggestions with sub-100ms response times and 100,000 free requests per month.
Last updated: March 7, 2026
Integrate in Minutes
Two steps: get your token, then make the GET request. Pick your language and start building.
# Step 1: Get your auth token TOKEN=$(curl -s "https://api.sthan.io/Auth/Token" \ -H "profileName: YOUR_PROFILE_NAME" \ -H "profilePassword: YOUR_PROFILE_PASSWORD" | jq -r '.access_token') # Step 2: Make the API call ADDRESS="123 main st" ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$ADDRESS'))") curl "https://api.sthan.io/AutoComplete/USA/Address/$ENCODED" \ -H "Authorization: Bearer $TOKEN"
// Step 1: Get your auth token const auth = await fetch("https://api.sthan.io/Auth/Token", { headers: { "profileName": "YOUR_PROFILE_NAME", "profilePassword": "YOUR_PROFILE_PASSWORD" } }); const { access_token } = await auth.json(); // Step 2: Make the API call const address = "123 main st"; const encoded = encodeURIComponent(address); const response = await fetch( `https://api.sthan.io/AutoComplete/USA/Address/${encoded}`, { headers: { "Authorization": `Bearer ${access_token}` } }); const data = await response.json(); console.log(data);
import requests from urllib.parse import quote # Step 1: Get your auth token auth = requests.get( "https://api.sthan.io/Auth/Token", headers={ "profileName": "YOUR_PROFILE_NAME", "profilePassword": "YOUR_PROFILE_PASSWORD" } ) token = auth.json()["access_token"] # Step 2: Make the API call address = "123 main st" encoded = quote(address) response = requests.get( f"https://api.sthan.io/AutoComplete/USA/Address/{encoded}", headers={"Authorization": f"Bearer {token}"} ) data = response.json() print(data)
using var client = new HttpClient(); // Step 1: Get your auth token client.DefaultRequestHeaders.Add("profileName", "YOUR_PROFILE_NAME"); client.DefaultRequestHeaders.Add("profilePassword", "YOUR_PROFILE_PASSWORD"); var authJson = await client.GetStringAsync("https://api.sthan.io/Auth/Token"); var auth = JsonSerializer.Deserialize<JsonElement>(authJson); var token = auth.GetProperty("access_token").GetString(); // Step 2: Make the API call client.DefaultRequestHeaders.Clear(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); var address = "123 main st"; var encoded = Uri.EscapeDataString(address); var response = await client.GetStringAsync( $"https://api.sthan.io/AutoComplete/USA/Address/{encoded}"); Console.WriteLine(response);
import java.net.*; import java.net.http.*; // Step 1: Get your auth token HttpClient client = HttpClient.newHttpClient(); HttpRequest authReq = HttpRequest.newBuilder() .uri(URI.create("https://api.sthan.io/Auth/Token")) .header("profileName", "YOUR_PROFILE_NAME") .header("profilePassword", "YOUR_PROFILE_PASSWORD") .build(); HttpResponse<String> authResp = client.send(authReq, HttpResponse.BodyHandlers.ofString()); // Parse access_token from authResp.body() // Step 2: Make the API call String address = "123 main st"; String encoded = URLEncoder.encode(address, "UTF-8"); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.sthan.io/AutoComplete/USA/Address/" + encoded)) .header("Authorization", "Bearer " + token) .build(); HttpResponse<String> resp = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(resp.body());
// Step 1: Get your auth token $ch = curl_init("https://api.sthan.io/Auth/Token"); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "profileName: YOUR_PROFILE_NAME", "profilePassword: YOUR_PROFILE_PASSWORD" ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = json_decode(curl_exec($ch), true); $token = $data["access_token"]; // Step 2: Make the API call $address = "123 main st"; $encoded = urlencode($address); $ch = curl_init("https://api.sthan.io/AutoComplete/USA/Address/" . $encoded); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer " . $token ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); echo $response;
require 'net/http' require 'json' require 'uri' # Step 1: Get your auth token uri = URI("https://api.sthan.io/Auth/Token") req = Net::HTTP::Get.new(uri) req["profileName"] = "YOUR_PROFILE_NAME" req["profilePassword"] = "YOUR_PROFILE_PASSWORD" resp = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) } token = JSON.parse(resp.body)["access_token"] # Step 2: Make the API call address = "123 main st" encoded = URI.encode_www_form_component(address) uri = URI("https://api.sthan.io/AutoComplete/USA/Address/#{encoded}") req = Net::HTTP::Get.new(uri) req["Authorization"] = "Bearer #{token}" resp = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) } puts JSON.parse(resp.body)
import ("net/http"; "net/url"; "io"; "fmt") // Step 1: Get your auth token authReq, _ := http.NewRequest("GET", "https://api.sthan.io/Auth/Token", nil) authReq.Header.Set("profileName", "YOUR_PROFILE_NAME") authReq.Header.Set("profilePassword", "YOUR_PROFILE_PASSWORD") authResp, _ := http.DefaultClient.Do(authReq) defer authResp.Body.Close() // Parse access_token from response JSON // Step 2: Make the API call address := "123 main st" encoded := url.QueryEscape(address) req, _ := http.NewRequest("GET", "https://api.sthan.io/AutoComplete/USA/Address/" + encoded, nil) req.Header.Set("Authorization", "Bearer " + token) resp, _ := http.DefaultClient.Do(req) defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) fmt.Println(string(body))
[ "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 STE 1, Corinth, NY 12822-1010", "123 Main St STE 1, Delhi, NY 13753-1258" ]
Effortless, Accurate & Instant Address Autocomplete
Speed up address entry with real-time suggestions powered by reliable USPS data.
Start for Free – No Credit Card Required
Enjoy 100,000 free address lookups per month at no cost! Perfect for startups, testing, development, and production applications.
Intelligent Address Autocomplete
Our advanced AI-powered autocomplete ensures quick and accurate address entry while reducing typos and errors.
Powered by Trusted USPS Data
Our database is continuously updated to provide real-time, accurate address suggestions based on official USPS data.
Affordable & Flexible Pricing
Premium address autocomplete at unbeatable rates:
Full Control & Hassle-Free Subscription
We do not store your payment details, and you can cancel your subscription anytime—no commitments, no hidden charges.
Frequently Asked Questions
Ready to Get Started?
Start with 100,000 free requests every month. No credit card required.