{
"generated_at": "<string>",
"coverage": [
{
"market": "<string>",
"state": "<string>",
"counties": [
{
"fips": "<string>",
"name": "<string>",
"data_end": "<string>"
}
],
"bbox": [
0,
0,
0,
0
],
"data_end": "<string>",
"build_run_id": 0,
"registry_run": 0,
"registry_version": "<string>",
"dataset_version": 0,
"loaded_at": "<string>",
"metro_buy_to_resale_ratio": 123,
"universe_zips": [
"<string>"
],
"point_tolerance_miles": 123,
"n_parcels": 0,
"listings_data_end": "<string>",
"agents_data_end": "<string>",
"wholesale_as_of": "<string>",
"str_as_of": "<string>",
"str": {
"jurisdictions": [
{
"name": "<string>",
"served": true,
"snapshot_only": true,
"licence_start": "<string>",
"snapshot_date": "<string>",
"feed_stale": true,
"sources": [
{
"source": "<string>",
"snapshot_date": "<string>",
"stale": true
}
],
"n_licensed": 0,
"n_pending": 0,
"n_expired": 0,
"n_advertised": 0,
"share_unmatched": 123,
"share_assumed": 123
}
]
},
"auction_counted": true,
"parcel_as_of": "<string>",
"address_as_of": "<string>",
"parcel": {
"parcel_as_of": "<string>",
"n_parcels": 0,
"sale_mortgage_measured": true,
"financing": {
"as_of": "<string>",
"dated": true,
"dated_reason": "<string>",
"n_parcels": 0,
"n_with_open_lien": 0,
"n_free_and_clear": 0,
"n_avm": 0,
"n_involuntary": 0,
"n_lenders": 0
},
"permits": {
"as_of": "<string>",
"n_permits": 0,
"n_parcels": 0,
"n_unmatched": 0,
"jurisdictions": [
{
"jurisdiction": "<string>",
"n_permits": 0,
"last_issue_date": "<string>",
"windows_measured": true
}
]
},
"owner_profile": {
"as_of": "<string>",
"n_parcels": 0,
"n_multi": 0,
"n_portfolio_5": 0
},
"history": {
"first_week": "<string>",
"last_week": "<string>",
"zips": [
"<string>"
],
"n_parcels": 0,
"n_events": 0,
"n_weeks": 0,
"domains": {}
}
},
"lenders": {
"as_of": "<string>",
"recordings_through": "<string>",
"counties": [
"<string>"
],
"history_capture_share": 123,
"n_lender_ids": 0,
"purchase_measured": true,
"investor_lending_measured": true,
"flips_measured": true,
"borrowers_measured": true,
"takebacks_measured": true,
"counties_measured": true,
"dated": true,
"n_parcels_uncovered": 0
}
}
],
"terms": "<string>",
"weights": {},
"resolved_from": [
"<string>"
],
"dated": [
{
"as_of": "<string>",
"reason": "<string>"
}
]
}The response envelope
data, page, summary and meta: the four keys every response carries.
data and meta. A list adds page, and some
lists add summary.
{
"data": [],
"page": { "next_cursor": "eyJ2IjoxLC...", "limit": 100, "returned": 100 },
"summary": { "n_investors_ranked": 5813 },
"meta": { "coverage": [], "terms": "..." }
}
| Key | What it is |
|---|---|
data | The answer: one record, or the rows of this page. |
page | next_cursor, limit and returned. Pass next_cursor back as cursor=. It is null on the last page. A paged list carries no total. The name searches add capped. It is true when more names matched than limit allowed and the API cut the page at it. So a page with exactly limit hits and capped: false is the whole set. When capped is true, narrow with market= or a longer query. See Pagination. |
summary | Totals over the whole filtered set, not this page. |
meta | Everything about the answer, not in it. The list below describes the parts. |
meta before you read the field list:
coverage[]is the markets that answered, the area each covers, and its as-of dates.dataset_versionis your cache key. Coverage and freshness has the rules.geometryappears 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_pointstays beside it as the point the API measures distances from.- A bare point carries the
radius_milesthat ran. - A
property_idrequest reads as aradiusaround the parcel’s centroid withproperty_idset. - A
bboxis the parsed tuple. - The API echoes a
ziplist as sent, and acityas the folded upper-case value the API compared. - The lender routes echo a geometry, a
zipor acityand never acounty. - A county-only parcel search echoes nothing.
- The property resolve echoes nothing. Its
lat+lngis a hint for the nearest parcel, not an area that ran.
- A bare point carries the
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 itsas_ofdate and the reason. Its presence is the test. Dated data explains the rule andrequire_current.resolved_fromappears 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.termsis a one-sentence attribution. Show it where you show the data. Terms and attribution carries the terms in full.
Response metadata: when the API produced it, which markets it covers, and how fresh they are.
When the API produced this response, ISO 8601. It does not change the ETag.
The markets the response draws on, with their counties, data end dates and data versions.
Show child attributes
Show child attributes
Attribution and data-use terms for the data in this response.
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.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
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_...).
^(inv|agt|len)_[0-9a-f]{12}$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.
Show child attributes
Show child attributes
Was this page helpful?