Skip to main content

When to use this

/v1/geocode answers “where is this address.” This endpoint answers a different question: “what are the canonical join keys for this place, and how confident should I be?” Use /v1/lookup when the input might be ambiguous, when you want a parcel attached, or when the input could be a coordinate or an APN instead of a clean address.
Every response says how it resolved and how confident it is. disposition is one of:
  • resolved — a coordinate, plus a parcel when the geocode cleared parcel-quality accuracy.
  • clarify — the input is genuinely ambiguous: multiple plausible matches at comparable confidence. You get candidates, never a silent pick.
  • no_match — an honest failure, with a reason.
The rule behind all three: a clarification or an honest no-match is always acceptable; a silently wrong place never is. An unqualified “1100 King St W, Toronto” can land on Toronto, Ontario or Toronto, Ohio at similar confidence — a single top-ranked geocode result can never reveal that a comparably-good alternative existed. This endpoint checks multiple candidates specifically so it can tell you when that’s happened, instead of picking one and hoping.

Request shape

Example: a clean, parcel-quality match

Area, hazard, and market context

Every resolved response carries free context beyond the coordinate and parcel, gathered concurrently with the parcel lookup (not after it — a slow enrichment call never adds to the parcel leg’s latency):
  • Jurisdiction codes, from the same Census Geocoder call as county_fips/county/tract_geoid: state_fips, state, block_group_geoid, block_geoid, congressional_district (e.g. "TX-27"), cbsa_name/cbsa_code (the metro or micro market, e.g. "Austin-Round Rock-San Marcos, TX Metro Area").
  • Elevation and flood risk: elevation_m, fema_flood_zone, within_floodplain, coastal_high_hazard — the same catalog sources /v1/fetch uses (3DEP/EPQS elevation, FEMA NFHL).
  • County market context: county_market bundles ten metrics from five federal sources (Census PEP/BPS/ACS, FHFA, BLS QCEW) — population and its 1-year growth, net domestic migration, building permits (total, single-family, YoY %), home-price YoY %, employment (total, YoY %), and median household income.
  • Opportunity Zone status: in_opportunity_zone (a federal tax-incentive designation) and opportunity_zone_tract_geoid when applicable.
  • Timezone: timezone, the IANA zone name (e.g. "America/Chicago").
Every one of these degrades independently to null on its own failure — none of them can turn an otherwise-successful resolved into anything else. Same guarantee parcel_unavailable already makes for the parcel leg, applied to enrichment too.

Example: genuine ambiguity — never a silent pick

Present the candidates to the user (or use a disambiguation hint you have — state, county) rather than picking the first one. Up to 3 candidates are returned per response.

Example: a lone winner in the wrong town is a no_match, never silent

Some inputs name a city Geocodio only has ONE plausible match for — but the wrong one, in a different town that happens to share the same street name and number. There’s no second candidate to offer, so this isn’t clarify; it’s an honest no_match, same governing rule as everywhere else on this page:
The check compares the city you named against the winning candidate’s actual city (normalizing a small set of common spelling variants — Saint/St., Mount/Mt., Fort/Ft. — so a legitimately-abbreviated city is never a false positive). It only fires when the input actually names a city; a street-only input has nothing to contradict.

Example: a parcel-lookup failure never demotes a good geocode

If the parcel vendor is unavailable — including a plan/quota issue on our end — the geocode still comes back honestly, just without a parcel:
This never becomes a 5xx, and it never demotes disposition away from resolved. The geocode succeeded; only the parcel attempt didn’t, and the response says exactly why.

A coarse geocode never gets a parcel

Below parcel-quality accuracy, resolved still returns the coordinate honestly — the parcel lookup is never even attempted. This is the same mechanism that protects /v1/geocode: a range_interpolation-grade match can be off by up to ~2,872 m in rural areas, which is easily a different parcel.

Swapped coordinates are a hard error, never a nearest-match

This is the one input class the design treats as a hard failure rather than a best-effort placement — a transposed lat/lng is a caller bug, not an ambiguous location, and silently “fixing” it would risk landing on a plausible-looking but wrong point.

APN-only lookup is not supported yet

Regrid’s only wired integration here is a point (lat/lng) lookup — there is no attribute-search-by-APN path. An APN-shaped input returns a clean no_match:

Response shape

Errors

Input-validation failures specific to this endpoint: A propagated address-leg failure (input that resolved to nothing at all, or hit a geocoder-level problem) shares /v1/geocode’s error taxonomy exactly: address_form_unsupported, geocode_unconfigured, geocode_forbidden, geocode_timeout, geocode_upstream_error. A parcel-leg failure is never one of these — see above, it degrades the response instead.

Limits

  • One input per request. No batching in V1; loop client-side.
  • 256 characters maximum, rejected rather than truncated.
  • Address-leg caching follows /v1/geocode’s rules: successful geocodes cache 30 days, negatives 24 hours, form-only normalization (case/whitespace/ punctuation) — see /v1/geocode’s Limits for the full detail, since the same cache backs both.
  • US only, same envelope as the rest of the API.
  • Parcel data depends on Regrid. There is no free parcel tier — a parcel is attached only when Regrid succeeds and the match is close enough to trust; every other case is an honest parcel_unavailable, not an error.

What we keep

Same retention as /v1/geocode: the input you send (when it’s an address) is recorded alongside the coordinate it resolved to, for 30 days, so a result can be audited later. If your use case cannot accommodate this, resolve client-side and call /v1/fetch or /v1/ask with lat/lng instead.