Geography API
API v1Resolve ZIP codes through versioned CMS crosswalks and browse Medicare payment localities.
Single ZIP → locality lookup
Resolve a ZIP code to its Medicare payment locality on its own, without also pricing a code —
useful for populating a locality picker or validating an address book against the crosswalk.
Accepts a bare 5-digit ZIP, a "ZIP+4" (90210-1234 or 902101234),
or a separate plus4 parameter.
This differs from passing zip= to the rate endpoints: a rate
lookup must reject an ambiguous ZIP outright, because silently picking a locality risks
pricing at the wrong rate. This endpoint instead returns the dominant locality with
ambiguous: true and a note — a useful answer on its own, honestly labeled.
/v1/zip/{zip}
- plus4
- string
- The ZIP+4 extension, if not already embedded in the path.
- year, quarter, as_of
- Resolve against a historical crosswalk release instead of the most recently published one.
| Param | Type | Description |
|---|---|---|
| plus4 | string | The ZIP+4 extension, if not already embedded in the path. |
| year, quarter, as_of | Resolve against a historical crosswalk release instead of the most recently published one. |
curl https://localishealth.com/v1/zip/90210 \
-H "Authorization: Bearer sk_live_…"
{
"status": "exact",
"input_zip": "90210",
"zip5": "90210",
"plus4": null,
"mac_code": "01182",
"locality_code": "18",
"locality": { "id": 1, "name": "Los Angeles, CA", "state": "CA" },
"ambiguous": false,
"crosswalk_release": { "year": 2026, "quarter": "A" },
"reason": null,
"citations": { "sources": { "zip_locality": { "file": "ZIP5_2026.csv", "row": 4, … } } }
}
status is one of exact, ambiguous,
not_found, or invalid_zip. Only
not_found and invalid_zip return a non-200 status (404).
Historical selectors also echo requested_period; substituted or reconstructed
crosswalks include notes and data_quality.
Bulk ZIP → locality lookup
Resolve up to 500 ZIPs in one request against a shared crosswalk release. Every entry resolves
independently and always comes back in results — an unresolvable
ZIP doesn't fail the batch, it comes back with its own status and reason.
/v1/zip/bulk
- zips
- array — required
- Up to 500 entries. Each is a string ("90210", "90210-1234") or an object { zip, plus4? }.
- year, quarter, as_of
- Resolve every ZIP in the batch against a historical crosswalk release instead of the most recently published one.
| Param | Type | Description |
|---|---|---|
| zips | array — required | Up to 500 entries. Each is a string ("90210", "90210-1234") or an object { zip, plus4? }. |
| year, quarter, as_of | Resolve every ZIP in the batch against a historical crosswalk release instead of the most recently published one. |
curl -X POST https://localishealth.com/v1/zip/bulk \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"zips": ["90210", "35801", {"zip": "90211"}]}'
{
"count": 3,
"crosswalk_release": { "year": 2026, "quarter": "A" },
"results": [
{ "status": "exact", "zip5": "90210", "mac_code": "01182", "locality_code": "18", … },
{ "status": "exact", "zip5": "35801", "mac_code": "10112", "locality_code": "00", … },
{ "status": "ambiguous", "zip5": "90211", "mac_code": "01182", "locality_code": "18", … }
]
}
Locality directory
Medicare payment localities with GPCI rows in the selected PFS release. The locality field
is the composite key the rate endpoints accept; name preserves the CMS label,
while display_name, short_name, and path
are UI-ready.
/v1/localities
- year, quarter, as_of
- Return localities with GPCI rows in the selected PFS release. Defaults to the current PFS release.
| Param | Type | Description |
|---|---|---|
| year, quarter, as_of | Return localities with GPCI rows in the selected PFS release. Defaults to the current PFS release. |
{
"count": 109,
"pfs_release": { "schedule": "pfs", "year": 2026, "quarter": "A", "revision": 1 },
"localities": [
{
"id": 1,
"locality": "01182-18",
"mac": "01182",
"code": "18",
"state": "CA",
"name": "LOS ANGELES-LONG BEACH-ANAHEIM (LOS ANGELES/ORANGE CNTY)",
"display_name": "Los Angeles-Long Beach-Anaheim (Los Angeles/Orange County)",
"short_name": "Los Angeles, Long Beach, and Anaheim",
"path": "/localities/ca/los-angeles"
}
]
}
GPCI rows
The raw work/PE/MP geographic practice cost indices behind every rate answer, one row per
locality, normalized into a stable shape independent of how CMS orders or names the columns
in a given quarter's GPCI{year}.csv. This is the same file
rate lookups read from — reach for this endpoint when the GPCI values themselves are what you need to reproduce a calculation or audit a locality, not just the priced result.
The response keeps the release-stable MAC/locality key and payment indices. Locality names and states live in a mutable cross-release directory, so they are omitted rather than attached to a historical source row they may not have come from.
/v1/gpci
- year, quarter, as_of
- Return GPCI rows from the selected PFS release. Defaults to the current PFS release.
| Param | Type | Description |
|---|---|---|
| year, quarter, as_of | Return GPCI rows from the selected PFS release. Defaults to the current PFS release. |
curl https://localishealth.com/v1/gpci \
-H "Authorization: Bearer sk_live_…"
{
"release": { "schedule": "pfs", "year": 2026, "quarter": "A", "revision": 1 },
"source": { "dataset": "gpci", "file": "GPCI2026.csv", "sha256": "f28471c5…", "row_count": 113 },
"count": 113,
"gpci": [
{
"locality": "01182-18",
"mac": "01182",
"code": "18",
"work_gpci": 1.041,
"work_gpci_no_floor": 1.041,
"pe_gpci": 1.183,
"mp_gpci": 0.664
}
]
}
Single locality GPCI row
One locality's GPCI row, addressed by the same composite {mac}-{code} key the rate endpoints accept — see the locality directory to look one up.
/v1/gpci/{locality}
- year, quarter, as_of
- Return GPCI rows from the selected PFS release. Defaults to the current PFS release.
| Param | Type | Description |
|---|---|---|
| year, quarter, as_of | Return GPCI rows from the selected PFS release. Defaults to the current PFS release. |
curl https://localishealth.com/v1/gpci/01182-18 \
-H "Authorization: Bearer sk_live_…"
{
"release": { "schedule": "pfs", "year": 2026, "quarter": "A", "revision": 1 },
"source": { "dataset": "gpci", "file": "GPCI2026.csv", "sha256": "f28471c5…", "row_count": 113 },
"locality": "01182-18",
"mac": "01182",
"code": "18",
"work_gpci": 1.041,
"work_gpci_no_floor": 1.041,
"pe_gpci": 1.183,
"mp_gpci": 0.664
}
An unknown locality, or a locality with no GPCI row in the selected release, returns 404 with an error — never a fabricated zero.