ZIP code API
Early access. API keys are issued by hand for now. Email [email protected] and say what you are building; early users get the Starter plan free for a year.
Same data as this site, same release id in every response. JSON, stable field names, no surprise bills: exceeding your plan returns 429 with an upgrade link rather than an invoice.
Want every ZIP code at once rather than one per request? The free ZIP code database has all of them as CSV, JSON and SQLite, under CC BY 4.0, built from the same data release the API serves.
Endpoints
| Method | Path | What it returns |
|---|---|---|
GET | /v1/zip/{zip} | Everything about one ZIP code. |
GET | /v1/zips?city=&state= | Every ZIP code for a city. |
GET | /v1/radius?zip=&miles= | ZIP codes within a radius, sorted by distance. Also accepts lat/lng. |
GET | /v1/distance?from=&to= | Great-circle distance between two ZIP codes. |
POST | /v1/bulk | Up to 1,000 ZIP codes in one request. |
GET | /v1/county/{fips}/zips | Every ZIP code in a county. |
GET | /v1/meta | Current data release, sources and their vintages. |
An OpenAPI 3.1 spec comes with every early-access key.
Try it without a key
Every ZIP page on this site already has a JSON twin, free and unauthenticated, with the same field names the API uses:
curl https://zipcodes.pro/zip/95014.json Authentication
curl -H "Authorization: Bearer YOUR_KEY" \
"https://api.zipcodes.pro/v1/radius?zip=95014&miles=25" Plans
| Plan | Requests / month | Monthly | Yearly | For |
|---|---|---|---|---|
| Free | 3,000 | Free | — | Trying it out, side projects, a form that validates a ZIP. |
| Starter | 100,000 | $19 | $182 | A production app with modest lookup volume. |
| Pro | 500,000 | $49 | $470 | Address validation or territory logic on every signup. |
| Business | 3,000,000 | $149 | $1430 | High-volume enrichment, or several products sharing one key. |
Yearly is 20% off. If your volume is steady and large, the dataset download is usually cheaper than any API plan — we would rather say so than sell you the wrong thing.
Limits and behaviour
- Per-minute rate limits apply on every plan to keep one client from starving another. A 429 includes
Retry-After. - Reaching your monthly quota returns 429 with an upgrade link. Nothing is billed automatically beyond your plan.
- Every response carries the data
release, so you can pin your own cache to it. - CORS is open for browser use on Free and Starter, with an optional domain allowlist per key.
- A field the source never published is
null. It is never0.