Model MatchHelp

Properties

Resolve a batch of addresses to property ids

postapi.modelmatch.com/v1/properties/resolve

Resolve up to 2,000 postal addresses to property ids in one call — e.g. a mailing list before a bulk delivery. Free. Returns one result per input, in order, keyed by your ref. matched carries the parcel id and mmPropertyId — pass them to bulk delivery propertyIds or the list flatFilters.id, then join the rows back on ref. Each address is first matched on the normalized number + street + unit + zip key (suffix, directional, punctuation and case insensitive); misses fall back to a ranked search that only accepts a hit with the same house number, the same zip or city, and a near-identical street name. ambiguous lists candidates: unit_required (a building whose units are separate parcels — resend with the unit), duplicate_parcels (one address on several parcel records; usually safe to take them all), multiple_parcels. not_found gives a reason: no_parcel_at_number (no parcel at that house number in that zip/city), low_confidence, or an input problem (no_house_number, no_street, no_location).

Authorization

x-api-keystringrequired

API key or OAuth token. See Authentication.

Body application/json

addressesobject[]required
Show child attributes
addressstring

Street line, e.g. "123 N Main St Apt 4".

citystring
linestring

The whole address as one line ("123 Main St, Springfield, IL 62701"). Used for any part the fields leave empty.

refstring

Your row key, echoed back. Defaults to the row's 0-based position.

statestring
zipstring

Responses

200objectOne result per input address, in order
Show attributes
resultsobject[]required
Show child attributes
addressstring

The matched parcel's address as stored.

candidatesobject[]

Up to 5 competing parcels on an ambiguous row.

Show child attributes
addressstringrequired
idstringrequired
mmPropertyIdstring | nullrequired
scorenumberrequired
idstring

The parcel document id (pass to propertyIds / flatFilters.id). Absent when a multi-unit parcel matched without a unit — use mmPropertyId, which selects every unit.

matchedByenum
Options:exact_keysearch
mmPropertyIdstring
reasonenum
Options:unit_requiredduplicate_parcelsmultiple_parcelsno_parcel_at_numberlow_confidenceno_house_numberno_streetno_locationsearch_failedsearch_budget_exhausted
refstringrequired
scorenumber

Match confidence 0–1: 1 for an exact key match, street-name similarity for a search match.

statusenumrequired
Options:matchedambiguousnot_found
summaryobjectrequired
Show child attributes
ambiguousintegerrequired
matchedintegerrequired
notFoundintegerrequired
400objectValidation error
401objectUnauthorized
403objectForbidden (authenticated, but missing required context — e.g. no active organization)
404objectNot found
413objectResponse payload too large — detail endpoint capped to fit Lambda response limits
503objectSearch timed out or the cluster is overloaded — retry after `Retry-After` seconds.