Skip to main content
Every JSON response has the same shape. A single record carries data and meta. A list adds page, and some lists add summary.
Know five parts of meta before you read the field list:
  • coverage[] is the markets that answered, the area each covers, and its as-of dates. dataset_version is your cache key. Coverage and freshness has the rules.
  • geometry appears on every route that takes a location. It is the shape that ran, with the defaults filled. It carries the keys of the query: kind, lat, lng, radius_miles, bbox, property_id, zip, city. A key is null where the kind has no such value. Copy it back as the query to repeat the request. reference_point stays beside it as the point the API measures distances from.
    • A bare point carries the radius_miles that ran.
    • A property_id request reads as a radius around the parcel’s centroid with property_id set.
    • A bbox is the parsed tuple.
    • The API echoes a zip list as sent, and a city as the folded upper-case value the API compared.
    • The lender routes echo a geometry, a zip or a city and never a county.
    • A county-only parcel search echoes nothing.
    • The property resolve echoes nothing. Its lat + lng is a hint for the nearest parcel, not an area that ran.
  • dated[] appears only when the response carries a block that is a dated snapshot, not current data. Those blocks are the financing, lien and valuation blocks of the parcel routes. It has one entry per block, with its as_of date and the reason. Its presence is the test. Dated data explains the rule and require_current.
  • resolved_from appears when an id you sent was an old one from an earlier refresh: an investor, an agent or, since 0.17.0, a lender id. It lists the ids the API followed, in order. Store the current one.
  • terms is a one-sentence attribution. Show it where you show the data. Terms and attribution carries the terms in full.
An error replaces the whole envelope with an RFC 9457 problem body. Every code has its own section on the Errors page.

Response metadata: when the API produced it, which markets it covers, and how fresh they are.

generated_at
string
required

When the API produced this response, ISO 8601. It does not change the ETag.

coverage
object[]
required

The markets the response draws on, with their counties, data end dates and data versions.

terms
string
required

Attribution and data-use terms for the data in this response.

weights
object

The effective match weights, one per factor, rounded to 4 decimals (buyers/match only). The API rescales the weights of the scored factors to sum 1 before it reports them.

reference_point
object

The point the API measures every distance in the response from: lat + lng, or the centre of the property_id parcel. Absent with a bare bbox.

geometry
object

The location that ran, defaults filled and keyed as the query is (see MetaGeometry), on REST only: the MCP meta carries reference_point alone. Present on every route that takes a location: the deal lists, summary and cells, the investors, wholesale listings and short-term rental parcels, and /v1/buyers/match. Also on the comps of a parcel, kind radius around the subject and property_id the subject, and on POST /v1/properties/search (a county-only body echoes nothing). The lender list and a lender's loans carry it when you gave a geometry, a zip or a city. They apply a geometry as the H3 res-8 cells whose centre lies inside it, and echo no county, because MetaGeometry has no county slot. Absent on a route with no location, and on /v1/properties/resolve, whose lat + lng is a hint for the nearest parcel, not an area that ran.

resolved_from
string[]

Present when an id in the request was an old id from an earlier data refresh: the old ids the API followed, in order. The ids are the investor id, from the path or the investor_id filter, the agent id and the lender id. The lender id comes from the path of the lender routes, the financed_by filter or filters.financing.lender_id. Store the id the response carries, not the old one.

An investor id (inv_...), a listing agent id (agt_...) or a lender id (len_...).

Pattern: ^(inv|agt|len)_[0-9a-f]{12}$
dated
object[]

Present when the response carries a block that is a dated snapshot at its as-of date, not current data. Those blocks are the financing, lien and valuation blocks of the parcel products. One entry per dated block, with its as-of date. Absent when nothing in the response is dated.