> ## Documentation Index
> Fetch the complete documentation index at: https://developers.investorlift.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Search parcels

> Every parcel in a location that matches your filter groups and quicklists, with the blocks you ask for.

Every parcel inside a location that matches the filter groups and the quicklists, one
[parcel search row](/api-reference/objects/parcel-search-row) each. A row always carries the address and the
assessor facts. It carries the owner, sale, tax, listing, valuation, financing, permit and history blocks when you
ask for them.

## Use it when

The property search screen, and any list built from parcel criteria instead of deeds. For example: absentee owners
with equity, houses with a solar permit, parcels with a price cut since they were listed.

| Instead use                                                                   | When                                                                  |
| ----------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| [`GET /v1/deals`](/api-reference/endpoints/deals-list)                        | Investor purchases around a location, not every parcel.               |
| [`GET /v1/properties/resolve`](/api-reference/endpoints/properties-resolve)   | One parcel id from a point, an address or an APN.                     |
| [`GET /v1/properties/{property_id}`](/api-reference/endpoints/properties-get) | One parcel you have an id for, with its deals and its licence record. |
| [`GET /v1/str-parcels`](/api-reference/endpoints/str-parcels)                 | Parcels on a city's short-term rental licence roll.                   |

## The request body

This is the one route that takes a `POST`, because the criteria nest. Send the same bearer key as everywhere else
and `Content-Type: application/json`. This example asks for absentee owners of three-bedroom houses in one
Scottsdale ZIP. The owners hold two or more properties and have most of their equity. The request sorts the best
equity first and drops parcels on the market at the feed's data end:

<CodeGroup>
  ```bash curl theme={null}
  curl -X POST "https://api.investorlift.com/v1/properties/search" \
    -H "Authorization: Bearer $GM_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "location": { "zip": ["85251"] },
      "filters": {
        "building": {
          "beds": { "min": 3 },
          "sqft": { "min": 1200, "max": 2400 }
        },
        "owner": { "absentee": true, "portfolio_count": { "min": 2 } }
      },
      "quicklists": ["absentee-owner", "high-equity"],
      "not_quicklists": ["on-market"],
      "datasets": [
        "core",
        "owner",
        "owner_profile",
        "valuation",
        "quicklists"
      ],
      "sort": "equity_percent_desc",
      "limit": 100
    }'
  ```

  ```javascript Node.js theme={null}
  const res = await fetch("https://api.investorlift.com/v1/properties/search", {
    method: "POST",
    headers: { Authorization: `Bearer ${process.env.GM_API_KEY}`, "Content-Type": "application/json" },
    body: JSON.stringify({
      "location": { "zip": ["85251"] },
      "filters": {
        "building": {
          "beds": { "min": 3 },
          "sqft": { "min": 1200, "max": 2400 },
        },
        "owner": { "absentee": true, "portfolio_count": { "min": 2 } },
      },
      "quicklists": ["absentee-owner", "high-equity"],
      "not_quicklists": ["on-market"],
      "datasets": [
        "core",
        "owner",
        "owner_profile",
        "valuation",
        "quicklists",
      ],
      "sort": "equity_percent_desc",
      "limit": 100,
    }),
  });
  if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
  const body = await res.json();
  ```

  ```python Python theme={null}
  import os

  import requests

  r = requests.post(
      "https://api.investorlift.com/v1/properties/search",
      json={
          "location": {"zip": ["85251"]},
          "filters": {
              "building": {"beds": {"min": 3}, "sqft": {"min": 1200, "max": 2400}},
              "owner": {"absentee": True, "portfolio_count": {"min": 2}},
          },
          "quicklists": ["absentee-owner", "high-equity"],
          "not_quicklists": ["on-market"],
          "datasets": [
              "core",
              "owner",
              "owner_profile",
              "valuation",
              "quicklists",
          ],
          "sort": "equity_percent_desc",
          "limit": 100,
      },
      headers={"Authorization": f"Bearer {os.environ['GM_API_KEY']}"},
      timeout=30,
  )
  r.raise_for_status()
  body = r.json()
  ```
</CodeGroup>

**You must send `location`.** Give at least one of `zip`, `county_fips`, `point`, `bbox` or `property_id`. The three
geometries exclude each other, and you can narrow any one of them further with `zip` or `county_fips`.
`property_id` searches around that parcel's centre, and `radius_miles` beside it widens the circle. A `point` carries
its own `radius_miles`. `market` restricts the search to one loaded market by code.

**A `zip` list alone chooses the markets.** With no `point`, `bbox` or `property_id`, the API searches only the markets whose
parcels carry those ZIP codes. A ZIP no market carries is `422 outside_coverage`, and the problem names it in `zips_unknown`.

**The API combines the filter groups with AND**, and every field inside a group the same way. The groups are
`general`, `building`, `lot`, `legal`, `owner`, `sale`, `tax`, `listing`, `valuation`, `financing`, `liens`, `permits`
and `history`. A range is `{ "min": ..., "max": ... }` and both ends are inclusive. A parcel whose value is null does
not pass a range.

**A quicklist is a named predicate** over the same columns. `quicklists` keeps the parcels that match all of them.
`any_quicklists` keeps those that match at least one. `not_quicklists` drops those that match any.
[Every quicklist and its predicate in words](/guides/concepts/quicklists).

## Datasets: what each row carries

`datasets` decides the blocks on a row. The default set is `core`, `owner`, `sale`, `tax` and `listing`. The rest are
`owner_profile`, `valuation`, `financing`, `permits`, `history` and `quicklists`. A block you did not ask for is
**null**. That null is not the same answer as "this parcel has none", so read `summary.datasets` and do not guess
from the row. For a name this API does not serve, the API answers
[`400 dataset_unavailable`](/guides/concepts/errors#dataset_unavailable) naming it.

`owner_profile` adds `owner.profile`, the owner's portfolio across every property BatchData links to them, read from
the latest weekly delivery. It is what the `owner.portfolio_count`, `portfolio_equity` and `portfolio_mortgages`
filters and the `tired-landlord` quicklist read.

## Dated blocks

The `valuation` and `financing` datasets read a snapshot valued at `meta.coverage[].parcel.financing.as_of` and not
current data. So do the `valuation`, `financing` and `liens` filter groups, the dated quicklists, and the
`equity_percent_desc`, `equity_percent_asc` and `avm_desc` sorts.

* `summary.dated_filters` names the parts of **your request** that read it, for example `filters.valuation`,
  `quicklist high-equity`, `sort avm_desc`. It is empty when nothing did.
* `meta.dated[]` names the blocks **on the wire**, each with its as-of date and the reason.
* With `require_current: true`, the API refuses such a request with
  [`422 dated_refused`](/guides/concepts/errors#dated_refused) and does not serve the snapshot.

[Dated data](/guides/concepts/dated-data) explains the rule and what changes when the datasets return to the
delivery.

## Read the response

* `data[]` is one [parcel search row](/api-reference/objects/parcel-search-row) per parcel. Its `id` is the
  `prop_` id every other property route takes.
* The API sets `distance_miles` only when the location was a `point` or a `property_id`. In that case
  `sort: "distance"` is the default. Without one, the default order is `id`: market, then parcel id, the table's
  primary key order. That order is stable and pages quickly over any location, but it means nothing.
* `meta.geometry` is the location that ran. A `point` echoes as a `radius`. A `property_id` echoes as a `radius`
  around the parcel's centroid, with `property_id` set, and with the default `radius_miles` when the body named none.
  A `bbox` echoes as the tuple, and a `zip` list alone echoes as a `place`. A `county_fips` list alone echoes
  nothing, and the API applies a `zip` or `county_fips` list beside a geometry as sent, without an echo. See
  [the envelope](/api-reference/objects/envelope).
* `quicklists[]` on a row lists every quicklist the parcel matches, and it appears only when you ask for the
  `quicklists` dataset. The API computes it from the same expressions the filters use, so a row can never match a
  filter it does not report.
* This host does not serve `owner.names` and `owner.mailing`: the owner block carries no such keys.
* `count_only: true` answers with `summary.total` and no rows. A paged request leaves `total` null: follow
  `page.next_cursor` instead.

## Gotchas

* `sort: "distance"` needs a `point` or a `property_id`. Without one, the API answers
  [`400 sort_requires_point`](/guides/concepts/errors#sort_requires_point). Every other sort puts null values last
  in both directions.
* The `history` filter group, the `history` dataset and the history quicklists only answer inside the ZIP codes the
  history lake covers. `meta.coverage[].parcel.history.zips` and [Counties, cities and ZIP codes](/coverage/places)
  list them. Elsewhere the block is null and those filters match nothing.
* This host has no owner-name filter: it does not serve the owner names such a filter reads.
* `financing.lender_name_contains` reads the lender, a business name, and is dated like the rest of the financing
  group. A lender's profile, [the Lender object](/api-reference/objects/lender), lists in `names[]` every spelling
  its instruments use. So you can widen a search on one spelling to the others.
* `financing.lender_id`, in the same group, takes the registry id: `len_` plus 12 hex, from a lender search, a ranking row or
  a parcel's financing block. It matches the parcels whose last recorded mortgage's lender carries that id, every
  spelling at once, over an index. For an id whose market has no lender registry, the API answers
  [`400 validation_error`](/guides/concepts/errors#validation_error) naming the field. Since 0.17.0 the API follows
  an old `lender_id` to the current lender with `meta.resolved_from`. A retired one is
  [`410 gone`](/guides/concepts/errors#gone) ([Retired ids](/api-reference/objects/lender#retired-ids)).
* The `private-lender-financed` quicklist reads the same last mortgage. Its lender is a private party or a person
  (`lender_class` `PRIVATE` or `INDIVIDUAL`), or a hard-money lender of the registry (`is_hard_money`). See
  [Quicklists](/guides/concepts/quicklists).
* A cursor is valid only for the market's `dataset_version` and the body you sent. If you page across a refresh or
  with a changed body, the API answers [`400 invalid_cursor`](/guides/concepts/errors#invalid_cursor).
* For a market with no published parcel tables, the API answers
  [`422 parcels_unavailable`](/guides/concepts/errors#parcels_unavailable), and `meta.coverage[].parcel` is null
  there.

## Related

[New construction near here](/guides/walkthroughs/new-construction): the search around a point and around a resolved
address, with the listing, valuation and owner blocks read end to end.


## OpenAPI

````yaml POST /v1/properties/search
openapi: 3.1.0
info:
  title: God Mode API
  version: 0.33.1
  description: >-
    You have a house to sell, usually a wholesale contract. You want to know
    **who nearby buys houses like this one and how to reach them**. County deed
    records already hold the answer. This API reads them for each loaded market
    and serves three things: deals, investors and a ranking. On every response,
    `meta.coverage[]` lists the markets and the area each covers.


    **Deals** are every investment purchase, flip, wholesale and current
    investor holding. **Investors** are the buyers behind them, grouped so that
    the LLCs of an operator and the person behind them count as one. **A
    ranking** says, for a given house, which investors are the best fit and why.


    The documentation site at https://developers.investorlift.com carries the
    guides, the walkthroughs, the error catalogue and the connection steps for
    MCP clients. https://developers.investorlift.com/llms.txt indexes the site
    for a model. This document is the machine-readable reference behind the API
    tab of the site.


    **Start here.** Ranked buyers for a house at 7522 E Cholla St, Scottsdale,
    under contract at $410,000 and in need of a major rehab:


    ```

    GET
    https://api.investorlift.com/v1/buyers/match?lat=33.476917&lng=-111.920385&radius_miles=2&subject_asking_price=410000&subject_condition=MAJOR_REHAB

    Authorization: Bearer zpka_...

    ```


    **Conventions.** Responses are `{ data, meta }`. Lists add `page` (an opaque
    cursor) and sometimes `summary`. A list parameter takes commas or repeated
    keys. Dates are YYYY-MM-DD. Ids carry a prefix: `deal_`, `prop_`, `inv_`,
    `agt_`, `wl_`, `wsr_`.


    Money is whole dollars. It is null, never 0, when the deed carries no price.
    Coordinates are WGS84. A location is a point and radius (`lat`, `lng`,
    `radius_miles`), a viewport (`bbox=west,south,east,north`) or a parcel
    (`property_id`).


    This host does not serve the people behind an entity, mailing addresses,
    owner identity, mortgage borrowers or lien parties. It does not serve the
    names, phones, emails and licence numbers of listing agents. It serves the
    entities, the deals, the listings and the ranking.


    Errors are RFC 9457 problem+json with a `code` to switch on. The catalogue
    is https://developers.investorlift.com/problems.json and the Errors page of
    the site. The field `meta.coverage[].dataset_version` changes only when a
    refresh rebuilds the tables of a market. Use it in cache keys, or poll `GET
    /v1/dataset`.


    **MCP.** The API serves the same data to Model Context Protocol clients at
    `POST https://api.investorlift.com/mcp` with the same key: twenty-six
    read-only tools, four resources, seven prompts. The MCP tab of the
    documentation site has the client setup. The file `mcp-manifest.json` beside
    this document lists the tools with their input schemas.


    Problem codes: 400 validation_error, 400 unknown_parameter, 400
    invalid_cursor, 400 geometry_required, 400 geometry_conflict, 400
    sort_requires_point, 400 invalid_id, 400 market_required, 401 unauthorized,
    403 quota_exceeded, 403 subscription_required, 403 payment_overdue, 403
    plan_limit, 404 not_found, 406 not_acceptable, 410 gone, 422
    outside_coverage, 422 ambiguous_apn, 422 ambiguous_address, 422
    csv_cap_exceeded, 422 listings_unavailable, 422 agents_unavailable, 422
    lenders_unavailable, 422 wholesale_unavailable, 422 str_unavailable, 422
    cash_sale_unavailable, 422 auction_unavailable, 422 parcels_unavailable, 422
    addresses_unavailable, 422 dated_refused, 422 history_unavailable, 400
    quicklist_unavailable, 400 dataset_unavailable, 429 rate_limited, 500
    internal_error, 503 database_unavailable, 503 pool_saturated, 503
    ledger_unavailable, 504 statement_timeout.
servers:
  - url: https://api.investorlift.com
security:
  - bearerAuth: []
tags:
  - name: buyers
    x-group: Buyers
    description: >-
      Which investors are the best fit for this house: the API ranks nearby
      investors against a subject property and explains each score.
  - name: deals
    x-group: Deals
    description: >-
      What occurred around a location: deals for a table, cells for a map,
      summary stats, and one deal by id.
  - name: investors
    x-group: Investors
    description: >-
      Who the buyers are: investors active in an area, a full profile, and their
      metro-wide history. A search finds an investor by any name they buy under.
  - name: properties
    x-group: Properties
    description: >-
      One parcel: find it from a point or an APN, then read its facts, owner
      information, short-term rental licence and every deal on it. The owner
      information covers investor holdings and business-use short-term rentals.
  - name: agents
    x-group: Listing agents
    description: >-
      Who the listing agents are: find one by name or licence number, then read
      the profile and every listing of theirs. The profile holds the licence,
      the brokerages, the listing counts and the investors they belong to.
  - name: wholesale
    x-group: Investorlift listings
    description: >-
      Investorlift listings as wholesale transactions: the houses listed, and
      what the county deeds show for each (closed, to whom, which deed). Also
      the listing companies, and what each investor bought off Investorlift.
  - name: lenders
    x-group: Lenders
    description: >-
      Who lends on houses in a market: find a lender by any spelling of its
      name. Rank the lenders of a market, or of one ZIP, city or county. Read a
      profile: loans counted once across the open-lien and recorded-history
      tables, the open book, terms, geography and rankings. List every loan of
      one lender.
  - name: dataset
    x-group: Dataset and coverage
    description: >-
      What the API serves, how fresh it is and which data is available where.
      The dataset version and the last deed date of every market, for cache keys
      and freshness checks. The coverage matrix, with a place lookup.
  - name: contract
    x-group: By contract
    description: >-
      Routes sold per jurisdiction under an order form and not reachable on a
      self-serve key. Ask through the console.
externalDocs:
  description: >-
    The documentation site: the guides, the walkthroughs, the error catalogue
    and the MCP connection steps.
  url: https://developers.investorlift.com
paths:
  /v1/properties/search:
    post:
      tags:
        - properties
      summary: Search parcels by location, filters and quicklists
      description: >-
        Every parcel inside a location that matches the filter groups and
        quicklists. Every row carries the address and the assessor facts. The
        owner, sale, tax, listing, valuation, financing, permit and history
        blocks come when you request them.


        Use it for a BatchData-shaped property search over the loaded markets.
        The valuation and financing blocks are a dated snapshot, and every
        response that carries them says so in `meta.dated[]`.


        [Filter groups, quicklists, datasets and the dated
        rule](https://developers.investorlift.com/api-reference/endpoints/properties-search).
      operationId: searchParcels
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                location:
                  type: object
                  properties:
                    zip:
                      description: >-
                        ZIP codes, up to 50. Alone they choose the markets. An
                        unknown ZIP is 422 outside_coverage.
                      minItems: 1
                      maxItems: 50
                      type: array
                      items:
                        type: string
                        pattern: ^\d{5}$
                    county_fips:
                      description: >-
                        County FIPS codes to search, up to 20 (04013 Maricopa,
                        04021 Pinal).
                      minItems: 1
                      maxItems: 20
                      type: array
                      items:
                        type: string
                        pattern: ^\d{5}$
                    point:
                      description: >-
                        A point and a radius. Rows then carry distance_miles,
                        and sort=distance is available.
                      type: object
                      properties:
                        lat:
                          type: number
                          minimum: -90
                          maximum: 90
                          description: WGS84 latitude.
                        lng:
                          type: number
                          minimum: -180
                          maximum: 180
                          description: WGS84 longitude.
                        radius_miles:
                          type: number
                          exclusiveMinimum: 0
                          maximum: 20
                          description: Radius in miles, up to 20.
                      required:
                        - lat
                        - lng
                        - radius_miles
                      additionalProperties: false
                    bbox:
                      description: A viewport as [west, south, east, north].
                      type: array
                      prefixItems:
                        - type: number
                          minimum: -180
                          maximum: 180
                          description: West edge (longitude).
                        - type: number
                          minimum: -90
                          maximum: 90
                          description: South edge (latitude).
                        - type: number
                          minimum: -180
                          maximum: 180
                          description: East edge (longitude).
                        - type: number
                          minimum: -90
                          maximum: 90
                          description: North edge (latitude).
                      items: false
                      minItems: 4
                      maxItems: 4
                    property_id:
                      description: >-
                        A parcel: the search runs around its centre with
                        radius_miles.
                      type: string
                      pattern: ^prop_[0-9a-f]{32}$
                    radius_miles:
                      description: The radius around property_id, miles (default 1).
                      type: number
                      exclusiveMinimum: 0
                      maximum: 20
                    market:
                      description: >-
                        Restrict to one loaded market by code (phx). Default:
                        every loaded market the location admits.
                      type: string
                      minLength: 1
                      maxLength: 16
                  additionalProperties: false
                  description: >-
                    Where to search: at least one of zip, county_fips, point,
                    bbox or property_id. Send only one of point, bbox and
                    property_id. You can combine that one with zip or
                    county_fips.
                filters:
                  type: object
                  properties:
                    general:
                      description: Classification and occupancy flags.
                      type: object
                      properties:
                        segment:
                          description: Parcel segments to keep.
                          minItems: 1
                          type: array
                          items:
                            type: string
                            enum:
                              - SFR
                              - CONDO_TH
                              - OTHER
                            description: >-
                              Parcel segment: SFR, CONDO_TH (condo or townhouse)
                              or OTHER, a mixed bucket of manufactured,
                              multi-family, land and commercial parcels.
                        property_type_category:
                          description: >-
                            BatchData property type categories to keep, for
                            example ["Residential"].
                          minItems: 1
                          maxItems: 50
                          type: array
                          items:
                            type: string
                            minLength: 1
                            maxLength: 64
                        property_type_detail:
                          description: BatchData property type details to keep.
                          minItems: 1
                          maxItems: 50
                          type: array
                          items:
                            type: string
                            minLength: 1
                            maxLength: 64
                        vacant:
                          description: >-
                            True keeps parcels the USPS marks vacant. False
                            keeps the rest.
                          type: boolean
                        mailing_address_vacant:
                          description: >-
                            True keeps parcels whose owner mailing address the
                            delivery marks vacant.
                          type: boolean
                      additionalProperties: false
                    building:
                      description: The structure.
                      type: object
                      properties:
                        beds:
                          description: Bedrooms, as an inclusive min / max range.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 50
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 50
                          additionalProperties: false
                        baths:
                          description: Bathrooms, as an inclusive min / max range.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: number
                            max:
                              description: Inclusive upper bound.
                              type: number
                          additionalProperties: false
                        sqft:
                          description: The living area, square feet.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 1000000
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 1000000
                          additionalProperties: false
                        year_built:
                          description: Year built.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 1600
                              maximum: 2100
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 1600
                              maximum: 2100
                          additionalProperties: false
                        stories:
                          description: Stories, as an inclusive min / max range.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: number
                            max:
                              description: Inclusive upper bound.
                              type: number
                          additionalProperties: false
                        pool:
                          description: True keeps parcels with a private pool.
                          type: boolean
                        garage:
                          description: True keeps parcels with at least one garage space.
                          type: boolean
                        condition:
                          description: Assessor condition labels to keep.
                          minItems: 1
                          maxItems: 50
                          type: array
                          items:
                            type: string
                            minLength: 1
                            maxLength: 64
                      additionalProperties: false
                    lot:
                      description: 'The lot: size and zoning.'
                      type: object
                      properties:
                        acres:
                          description: Lot size, acres.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: number
                            max:
                              description: Inclusive upper bound.
                              type: number
                          additionalProperties: false
                        sqft:
                          description: Lot size, square feet.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                          additionalProperties: false
                        zoning:
                          description: Zoning codes to keep.
                          minItems: 1
                          maxItems: 50
                          type: array
                          items:
                            type: string
                            minLength: 1
                            maxLength: 64
                      additionalProperties: false
                    legal:
                      description: Legal description keys.
                      type: object
                      properties:
                        subdivision:
                          description: >-
                            Subdivision name contains this text,
                            case-insensitive.
                          type: string
                          minLength: 2
                          maxLength: 80
                      additionalProperties: false
                    owner:
                      description: >-
                        The current owner: the facts, and the portfolio filters
                        from the Owner Profile block.
                      type: object
                      properties:
                        kind:
                          description: Owner kinds to keep.
                          minItems: 1
                          type: array
                          items:
                            type: string
                            enum:
                              - PERSON
                              - TRUST
                              - ENTITY
                              - PUBLIC_INSTITUTIONAL
                            description: >-
                              Kind of the owner at the deed data end: PERSON,
                              TRUST, ENTITY or PUBLIC_INSTITUTIONAL (a public
                              body).
                        owner_occupied:
                          description: >-
                            True keeps owner-occupied parcels. False keeps the
                            rest.
                          type: boolean
                        absentee:
                          description: True keeps absentee owners.
                          type: boolean
                        is_trust:
                          description: True keeps trust-owned parcels.
                          type: boolean
                        is_public:
                          description: >-
                            True keeps public-body owners. False excludes them.
                            The default excludes nothing.
                          type: boolean
                        mailing_state:
                          description: Owner mailing states to keep, 2 letters each.
                          minItems: 1
                          maxItems: 60
                          type: array
                          items:
                            type: string
                            minLength: 2
                            maxLength: 2
                        out_of_state:
                          description: >-
                            True keeps owners whose mailing state differs from
                            the parcel's state.
                          type: boolean
                        held_since:
                          description: When the current ownership started.
                          type: object
                          properties:
                            min:
                              description: On or after, YYYY-MM-DD.
                              type: string
                            max:
                              description: On or before, YYYY-MM-DD.
                              type: string
                          additionalProperties: false
                        portfolio_count:
                          description: Properties the owner holds (Owner Profile block).
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                          additionalProperties: false
                        portfolio_equity:
                          description: The owner's total estimated equity, dollars.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: -9007199254740991
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: -9007199254740991
                              maximum: 9007199254740991
                          additionalProperties: false
                        portfolio_mortgages:
                          description: The owner's open mortgage count.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                          additionalProperties: false
                      additionalProperties: false
                    sale:
                      description: The last sale as the deed feed summarises it.
                      type: object
                      properties:
                        last_sale_date:
                          description: The last sale date.
                          type: object
                          properties:
                            min:
                              description: On or after, YYYY-MM-DD.
                              type: string
                            max:
                              description: On or before, YYYY-MM-DD.
                              type: string
                          additionalProperties: false
                        last_sale_price:
                          description: The last sale price, dollars.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                          additionalProperties: false
                        price_per_sqft:
                          description: Last sale price per living square foot.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: number
                            max:
                              description: Inclusive upper bound.
                              type: number
                          additionalProperties: false
                        document_type:
                          description: Deed types to keep, as the feed writes them.
                          minItems: 1
                          maxItems: 50
                          type: array
                          items:
                            type: string
                            minLength: 1
                            maxLength: 64
                        cash_sale:
                          description: >-
                            True keeps last sales with a price and no recorded
                            purchase mortgage (the cash_sale_proxy flag). The
                            API answers 422 cash_sale_unavailable when a market
                            of the location does not measure it
                            (meta.coverage[].parcel.sale_mortgage_measured
                            false).
                          type: boolean
                      additionalProperties: false
                    tax:
                      description: Assessment and tax.
                      type: object
                      properties:
                        assessed_value:
                          description: Total assessed value, dollars.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                          additionalProperties: false
                        market_value:
                          description: The assessor's total market value, dollars.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                          additionalProperties: false
                        tax_amount:
                          description: Annual tax, dollars.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                          additionalProperties: false
                        delinquent:
                          description: >-
                            True keeps parcels with a delinquent tax year on the
                            roll.
                          type: boolean
                        exemptions:
                          description: Keep parcels carrying any of these exemptions.
                          minItems: 1
                          maxItems: 50
                          type: array
                          items:
                            type: string
                            minLength: 1
                            maxLength: 64
                      additionalProperties: false
                    listing:
                      description: The newest MLS record the listing feed carries.
                      type: object
                      properties:
                        status:
                          description: >-
                            Feed statuses to keep, for example ["Active",
                            "Pending"].
                          minItems: 1
                          maxItems: 50
                          type: array
                          items:
                            type: string
                            minLength: 1
                            maxLength: 64
                        price:
                          description: List price, dollars.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                          additionalProperties: false
                        listed_since:
                          description: Original listing date on or after this date.
                          type: string
                        sold_since:
                          description: Sold date on or after this date.
                          type: string
                        is_rental:
                          description: >-
                            True keeps rental listings. False keeps sale
                            listings.
                          type: boolean
                      additionalProperties: false
                    valuation:
                      description: The AVM block (dated).
                      type: object
                      properties:
                        estimated_value:
                          description: AVM, dollars (dated).
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                          additionalProperties: false
                        equity_percent:
                          description: Equity percent (dated).
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: number
                            max:
                              description: Inclusive upper bound.
                              type: number
                          additionalProperties: false
                        ltv:
                          description: Loan-to-value percent (dated).
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: number
                            max:
                              description: Inclusive upper bound.
                              type: number
                          additionalProperties: false
                        equity_balance:
                          description: Equity balance, dollars (dated).
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: -9007199254740991
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: -9007199254740991
                              maximum: 9007199254740991
                          additionalProperties: false
                      additionalProperties: false
                    financing:
                      description: The open liens and the last recorded mortgage (dated).
                      type: object
                      properties:
                        open_lien_count:
                          description: Open liens at the slice date (dated).
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 20
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 20
                          additionalProperties: false
                        open_lien_balance:
                          description: Open balance, dollars (dated).
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                          additionalProperties: false
                        lender_name_contains:
                          description: >-
                            The last recorded mortgage's lender name contains
                            this text, case-insensitive (dated).
                          type: string
                          minLength: 2
                          maxLength: 80
                        lender_id:
                          description: >-
                            The last recorded mortgage's lender is this registry
                            lender: a len_ id from /v1/lenders (dated). The API
                            matches on the id that every spelling of the lender
                            folds to. So a renamed or truncated spelling is the
                            same filter. The API answers 400 when no market of
                            the location has a lender registry
                            (meta.coverage[].lenders null).
                          type: string
                          pattern: ^len_[0-9a-f]{12}$
                        lender_class:
                          description: >-
                            Lender classes of the last recorded mortgage to keep
                            (dated).
                          minItems: 1
                          type: array
                          items:
                            type: string
                            enum:
                              - BANK
                              - NONBANK
                              - PRIVATE
                              - INDIVIDUAL
                              - GOVERNMENT
                            description: >-
                              How the lender name reads. BANK: a bank, credit
                              union or thrift. NONBANK: a mortgage company or
                              other lending business. PRIVATE: a trust, a seller
                              carry-back or another private party, not the
                              hard-money sense of private lender, which the
                              Lender object carries as is_hard_money.
                              INDIVIDUAL: a person's name. GOVERNMENT: an agency
                              or a public body.
                        has_heloc:
                          description: True keeps parcels with an open HELOC (dated).
                          type: boolean
                        free_and_clear:
                          description: True keeps parcels with zero open liens (dated).
                          type: boolean
                        last_mortgage_since:
                          description: >-
                            The recording date of the last recorded mortgage is
                            on or after this date (dated).
                          type: string
                        interest_rate:
                          description: >-
                            The senior open lien's estimated rate, percent
                            (dated).
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: number
                            max:
                              description: Inclusive upper bound.
                              type: number
                          additionalProperties: false
                      additionalProperties: false
                    liens:
                      description: Involuntary liens (dated).
                      type: object
                      properties:
                        involuntary:
                          description: >-
                            True keeps parcels with an involuntary lien on
                            record (dated).
                          type: boolean
                        count:
                          description: Involuntary liens on record (dated).
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 20
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 20
                          additionalProperties: false
                      additionalProperties: false
                    permits:
                      description: The permit aggregates.
                      type: object
                      properties:
                        since:
                          description: >-
                            The issue date of the newest permit is on or after
                            this date.
                          type: string
                        count_24m:
                          description: >-
                            Permits issued in the 24 months before the permit
                            snapshot date (the permit block's as_of).
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                          additionalProperties: false
                        tags:
                          description: >-
                            Keep parcels with a permit that carries any of these
                            tags, for example ["Solar", "Pool and Hot Tub"]. The
                            API reads only the permits of the 24 months before
                            the permit snapshot date (as_of).
                          minItems: 1
                          maxItems: 50
                          type: array
                          items:
                            type: string
                            minLength: 1
                            maxLength: 64
                        open:
                          description: >-
                            True keeps parcels with a permit active or in review
                            for more than 12 months at the permit snapshot date
                            (as_of). False keeps parcels with none. False leaves
                            out a parcel whose jurisdiction has unmeasured
                            permit windows (coverage windows_measured false).
                          type: boolean
                        major_work_36m:
                          description: >-
                            True keeps parcels with a major-work permit in the
                            36 months before the permit snapshot date (as_of).
                            False keeps parcels with none. False leaves out a
                            parcel whose jurisdiction has unmeasured permit
                            windows (coverage windows_measured false).
                          type: boolean
                        job_value_24m:
                          description: >-
                            Declared job value over the 24 months before the
                            permit snapshot date (as_of), dollars.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                          additionalProperties: false
                      additionalProperties: false
                    history:
                      description: The history summary (history ZIP set only).
                      type: object
                      properties:
                        owner_changes_3y:
                          description: >-
                            Owner changes in the 3 years before the data end
                            (history ZIP set only).
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                          additionalProperties: false
                        last_owner_change:
                          description: The week of the last owner change.
                          type: object
                          properties:
                            min:
                              description: On or after, YYYY-MM-DD.
                              type: string
                            max:
                              description: On or before, YYYY-MM-DD.
                              type: string
                          additionalProperties: false
                        listing_cycles_1y:
                          description: >-
                            Listings started in the year before the data end
                            (history ZIP set only).
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                          additionalProperties: false
                        price_cuts_current_listing:
                          description: Price cuts since the current listing started.
                          type: object
                          properties:
                            min:
                              description: Inclusive lower bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                            max:
                              description: Inclusive upper bound.
                              type: integer
                              minimum: 0
                              maximum: 9007199254740991
                          additionalProperties: false
                        became_vacant_since:
                          description: >-
                            The parcel became vacant in this week or later and
                            is still vacant at the data end.
                          type: string
                        delinquent_since:
                          description: >-
                            The parcel went tax delinquent in this week or later
                            and is still delinquent at the data end.
                          type: string
                      additionalProperties: false
                  additionalProperties: false
                  description: >-
                    The filter groups. Every group and every field is optional.
                    The API combines the groups with AND.
                quicklists:
                  description: Every listed quicklist must match (AND).
                  minItems: 1
                  maxItems: 20
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 64
                    description: >-
                      A quicklist name, for example absentee-owner,
                      free-and-clear, price-cut-listing, tired-landlord. The
                      quicklists guide documents the list and every predicate.
                      The API answers 400 quicklist_unavailable to an
                      unavailable name.
                any_quicklists:
                  description: At least one listed quicklist must match (OR).
                  minItems: 1
                  maxItems: 20
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 64
                    description: >-
                      A quicklist name, for example absentee-owner,
                      free-and-clear, price-cut-listing, tired-landlord. The
                      quicklists guide documents the list and every predicate.
                      The API answers 400 quicklist_unavailable to an
                      unavailable name.
                not_quicklists:
                  description: Keep parcels that match none of the listed quicklists.
                  minItems: 1
                  maxItems: 20
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 64
                    description: >-
                      A quicklist name, for example absentee-owner,
                      free-and-clear, price-cut-listing, tired-landlord. The
                      quicklists guide documents the list and every predicate.
                      The API answers 400 quicklist_unavailable to an
                      unavailable name.
                datasets:
                  description: >-
                    Which blocks each row carries: core, owner, owner_profile,
                    sale, tax, listing, valuation, financing, permits, history,
                    quicklists. Default: core, owner, sale, tax, listing. The
                    valuation and financing blocks are dated (meta.dated[]). The
                    API answers 400 dataset_unavailable to an unavailable name.
                  minItems: 1
                  maxItems: 20
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 32
                    description: >-
                      Which blocks each row carries: core, owner, owner_profile,
                      sale, tax, listing, valuation, financing, permits,
                      history, quicklists. Default: core, owner, sale, tax,
                      listing. The valuation and financing blocks are dated
                      (meta.dated[]). The API answers 400 dataset_unavailable to
                      an unavailable name.
                require_current:
                  default: false
                  description: >-
                    With true, the API answers 422 dated_refused when the
                    request filters on, sorts by or returns a dated block
                    (valuation, financing, liens). Default false: the API serves
                    dated blocks and stamps them in meta.dated[].
                  type: boolean
                sort:
                  type: string
                  enum:
                    - distance
                    - id
                    - last_sale_date_desc
                    - last_sale_date_asc
                    - last_owner_change_desc
                    - equity_percent_desc
                    - equity_percent_asc
                    - listing_price_asc
                    - listing_price_desc
                    - avm_desc
                    - year_built_desc
                    - year_built_asc
                    - sqft_desc
                    - last_permit_desc
                  description: >-
                    Row order, null values last on every sort. distance: nearest
                    first, the default with a point or a property_id. The sort
                    id orders rows by market then id, the primary key order:
                    stable and fast over any location, the default otherwise.
                    The sorts last_sale_date_desc and last_sale_date_asc order
                    by the last sale date, listing_price_asc and
                    listing_price_desc by the list price. The sort
                    last_owner_change_desc puts the history ZIP set first and
                    the others last. The sorts equity_percent_desc,
                    equity_percent_asc and avm_desc are dated (meta.dated[]).
                    The sorts year_built_desc, year_built_asc, sqft_desc and
                    last_permit_desc order by year built, the living area and
                    the newest permit.
                limit:
                  default: 100
                  description: Page size, 1-500 (default 100).
                  type: integer
                  minimum: 1
                  maximum: 500
                cursor:
                  description: >-
                    Opaque cursor from page.next_cursor of the previous page. A
                    change of query, sort, weights or data version invalidates
                    it (400 invalid_cursor). Then restart from page 1.
                  type: string
                  minLength: 1
                  maxLength: 4096
                count_only:
                  default: false
                  description: >-
                    True returns the count of matching parcels in summary.total
                    and no rows.
                  type: boolean
              required:
                - location
              additionalProperties: false
      responses:
        '200':
          description: >-
            One page of parcels that match the location, filters and quicklists,
            in the requested sort, with the cursor for the next page. With
            count_only the response has no rows and carries summary.total.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/ParcelSearchRow'
                    description: The rows of this page.
                  page:
                    $ref: '#/components/schemas/Page'
                  meta:
                    $ref: '#/components/schemas/Meta'
                  summary:
                    $ref: '#/components/schemas/ParcelSearchSummary'
                required:
                  - data
                  - page
                  - meta
                  - summary
                additionalProperties: false
                description: >-
                  One page of parcels that match the location, filters and
                  quicklists, in the requested sort, with the cursor for the
                  next page. With count_only the response has no rows and
                  carries summary.total.
              example:
                data:
                  - id: prop_e93c776c53354a88de4e58448a6bf21b
                    market: phx
                    distance_miles: 0
                    address:
                      street: 7436 E Virginia Ave
                      unit: null
                      city: SCOTTSDALE
                      state: AZ
                      zip: '85257'
                      county_fips: '04013'
                      apn: 131-28-253
                      latitude: 33.476917
                      longitude: -111.920385
                      census_tract: '040132179.002006'
                      school_district: Scottsdale Unified District
                    general:
                      segment: SFR
                      property_type_category: Residential
                      property_type_detail: Single Family
                      land_use_code: R2
                      vacant: false
                      mailing_address_vacant: false
                      parcel_count: 1
                    building:
                      bedrooms: 3
                      bathrooms: 2
                      sqft: 1409
                      total_building_sqft: 1409
                      year_built: 1959
                      effective_year_built: 1959
                      stories: 1
                      pool: true
                      garage_spaces: 2
                      building_condition: Average
                      construction_type: Concrete Block
                      building_count: 1
                      unit_count: 1
                      fireplace_count: 1
                      roof_type: null
                      heat_source: 'Yes'
                      ac_source: Refrigeration
                    lot:
                      lot_sqft: 6938
                      lot_acres: 0.159
                      zoning_code: R-7
                      subdivision: CAVALIER VISTA 4A
                      section_township_range: SEC 35 TWN 2N RNG 4E
                    owner:
                      kind: PERSON
                      owner_occupied: false
                      absentee: true
                      is_trust: false
                      is_public: false
                      holding_kind: ABSENTEE_INDIVIDUAL
                      held_since: '2023-03-03'
                      mailing_state: NY
                      profile: null
                    sale:
                      last_sale_date: '2023-03-03'
                      last_sale_recording_date: '2023-03-03'
                      last_sale_price: 735000
                      last_sale_document_type: Warranty Deed
                      last_sale_transaction_type: New construction residential transactions
                      last_sale_price_per_sqft: 522
                      last_sale_mortgage_amount: null
                      last_sale_lender: null
                      cash_sale_proxy: null
                      prior_sale_date: '2022-07-15'
                      prior_sale_price: 585000
                      last_purchase_date: '2023-03-03'
                      last_purchase_price: 735000
                    tax:
                      assessed_total: 51800
                      assessed_land: null
                      assessed_improvement: null
                      assessment_year: 2026
                      market_value_total: 518000
                      tax_amount: 1321
                      tax_year: 2025
                      tax_delinquent_year: null
                      tax_exemptions: null
                    listing:
                      status: Sold
                      status_category: Sold
                      price: null
                      listed_on: '2022-12-22'
                      status_updated_on: null
                      sold_on: '2023-03-03'
                      sold_price: 735000
                      is_rental: false
                      mls_number: null
                      brokerage: null
                    valuation: null
                    financing: null
                    permits: null
                    history: null
                    quicklists: null
                  - id: prop_5398c4996bbcf9bc93d181af1395b093
                    market: phx
                    distance_miles: 0.01
                    address:
                      street: 7430 E Virginia Ave
                      unit: null
                      city: SCOTTSDALE
                      state: AZ
                      zip: '85257'
                      county_fips: '04013'
                      apn: 131-28-254
                      latitude: 33.476936
                      longitude: -111.920598
                      census_tract: '040132179.002006'
                      school_district: Scottsdale Unified District
                    general:
                      segment: SFR
                      property_type_category: Residential
                      property_type_detail: Single Family
                      land_use_code: R2
                      vacant: false
                      mailing_address_vacant: false
                      parcel_count: 1
                    building:
                      bedrooms: 3
                      bathrooms: 2
                      sqft: 1428
                      total_building_sqft: 1428
                      year_built: 1959
                      effective_year_built: 1959
                      stories: 1
                      pool: true
                      garage_spaces: 2
                      building_condition: Average
                      construction_type: Concrete Block
                      building_count: 1
                      unit_count: 1
                      fireplace_count: 0
                      roof_type: null
                      heat_source: 'Yes'
                      ac_source: Refrigeration
                    lot:
                      lot_sqft: 6177
                      lot_acres: 0.142
                      zoning_code: R-7
                      subdivision: CAVALIER VISTA 4A
                      section_township_range: SEC 35 TWN 2N RNG 4E
                    owner:
                      kind: PERSON
                      owner_occupied: true
                      absentee: false
                      is_trust: false
                      is_public: false
                      holding_kind: OWNER_OCCUPIED
                      held_since: '2022-06-09'
                      mailing_state: AZ
                      profile: null
                    sale:
                      last_sale_date: '2022-06-09'
                      last_sale_recording_date: '2022-06-15'
                      last_sale_price: 650000
                      last_sale_document_type: Warranty Deed
                      last_sale_transaction_type: Arms-length residential transactions (purchase/resales)
                      last_sale_price_per_sqft: 455
                      last_sale_mortgage_amount: null
                      last_sale_lender: null
                      cash_sale_proxy: null
                      prior_sale_date: null
                      prior_sale_price: 79000
                      last_purchase_date: '2022-06-09'
                      last_purchase_price: 650000
                    tax:
                      assessed_total: 47260
                      assessed_land: null
                      assessed_improvement: null
                      assessment_year: 2026
                      market_value_total: 472600
                      tax_amount: 1548
                      tax_year: 2025
                      tax_delinquent_year: null
                      tax_exemptions: null
                    listing:
                      status: Off Market
                      status_category: Failed
                      price: 649999
                      listed_on: '2025-04-16'
                      status_updated_on: '2025-04-16'
                      sold_on: '2022-06-17'
                      sold_price: 650000
                      is_rental: false
                      mls_number: null
                      brokerage: null
                    valuation: null
                    financing: null
                    permits: null
                    history: null
                    quicklists: null
                  - id: prop_2a3aa3e08680f3b9a838e58c6e8081e9
                    market: phx
                    distance_miles: 0.01
                    address:
                      street: 7442 E Virginia Ave
                      unit: null
                      city: SCOTTSDALE
                      state: AZ
                      zip: '85257'
                      county_fips: '04013'
                      apn: 131-28-252
                      latitude: 33.476909
                      longitude: -111.920155
                      census_tract: '040132179.002006'
                      school_district: Scottsdale Unified District
                    general:
                      segment: SFR
                      property_type_category: Residential
                      property_type_detail: Single Family
                      land_use_code: R2
                      vacant: false
                      mailing_address_vacant: false
                      parcel_count: 1
                    building:
                      bedrooms: null
                      bathrooms: 2
                      sqft: 1375
                      total_building_sqft: 1375
                      year_built: 1959
                      effective_year_built: 1959
                      stories: 1
                      pool: null
                      garage_spaces: 2
                      building_condition: Average
                      construction_type: Concrete Block
                      building_count: 1
                      unit_count: 1
                      fireplace_count: null
                      roof_type: null
                      heat_source: 'Yes'
                      ac_source: Refrigeration
                    lot:
                      lot_sqft: 6943
                      lot_acres: 0.159
                      zoning_code: R-7
                      subdivision: CAVALIER VISTA 4A
                      section_township_range: SEC 35 TWN 2N RNG 4E
                    owner:
                      kind: PERSON
                      owner_occupied: true
                      absentee: false
                      is_trust: false
                      is_public: false
                      holding_kind: OWNER_OCCUPIED
                      held_since: '2005-02-15'
                      mailing_state: AZ
                      profile: null
                    sale:
                      last_sale_date: null
                      last_sale_recording_date: null
                      last_sale_price: null
                      last_sale_document_type: null
                      last_sale_transaction_type: null
                      last_sale_price_per_sqft: null
                      last_sale_mortgage_amount: null
                      last_sale_lender: null
                      cash_sale_proxy: null
                      prior_sale_date: null
                      prior_sale_price: null
                      last_purchase_date: null
                      last_purchase_price: null
                    tax:
                      assessed_total: 45870
                      assessed_land: null
                      assessed_improvement: null
                      assessment_year: 2026
                      market_value_total: 458700
                      tax_amount: 1228
                      tax_year: 2025
                      tax_delinquent_year: null
                      tax_exemptions: null
                    listing:
                      status: Off Market
                      status_category: Off Market
                      price: null
                      listed_on: null
                      status_updated_on: null
                      sold_on: null
                      sold_price: null
                      is_rental: false
                      mls_number: null
                      brokerage: null
                    valuation: null
                    financing: null
                    permits: null
                    history: null
                    quicklists: null
                page:
                  next_cursor: >-
                    eyJ2IjoxLCJydW4iOiIxNzg5NTc0MjY4IiwicSI6ImNiMzdhYTZjZDI0ZWYxYWY4Nzk4YTk5Y2I1MGFiMjAxYzc4YzBkMjAyZGNjMDhlNjg5YTdjMjkzMWU5ZDBkYTQiLCJrIjpbMjEuMzUwNzQ1NjY1ODUwNTQzLCIyYTNhYTNlMDg2ODBmM2I5YTgzOGU1OGM2ZTgwODFlOSJdfQ
                  limit: 3
                  returned: 3
                meta:
                  generated_at: '2026-09-16T21:00:00.000Z'
                  reference_point:
                    lat: 33.476917
                    lng: -111.920385
                  geometry:
                    kind: radius
                    lat: 33.476917
                    lng: -111.920385
                    radius_miles: 2
                    bbox: null
                    property_id: null
                    zip: null
                    city: null
                  coverage:
                    - market: phx
                      state: AZ
                      counties:
                        - fips: '04013'
                          name: Maricopa
                          data_end: '2026-08-12'
                        - fips: '04021'
                          name: Pinal
                          data_end: '2026-08-06'
                      bbox:
                        - -113.332773
                        - 32.46915
                        - -110.455491
                        - 33.999503
                      data_end: '2026-08-27'
                      build_run_id: 3
                      registry_run: 11
                      registry_version: v6-auction
                      dataset_version: 1789574268
                      loaded_at: '2026-09-16T15:57:47.926Z'
                      metro_buy_to_resale_ratio: 0.719
                      universe_kind: metro
                      universe_zips: null
                      point_tolerance_miles: 20
                      n_parcels: 1836311
                      listings_data_end: '2026-08-31'
                      agents_data_end: '2026-08-31'
                      wholesale_as_of: '2026-09-09'
                      str_as_of: '2026-09-10'
                      str:
                        jurisdictions:
                          - name: APACHE_JUNCTION
                            regime: NOT_REQUIRED
                            coverage_reason: NO_REQUIREMENT
                            served: false
                            snapshot_only: false
                            licence_start: null
                            snapshot_date: null
                            feed_stale: false
                            sources: []
                            n_licensed: 0
                            n_pending: 0
                            n_expired: 0
                            n_advertised: 0
                            share_unmatched: null
                            share_assumed: null
                          - name: AVONDALE
                            regime: REQUIRED
                            coverage_reason: REQUIRED_NOT_PUBLISHED
                            served: false
                            snapshot_only: false
                            licence_start: null
                            snapshot_date: null
                            feed_stale: false
                            sources: []
                            n_licensed: 0
                            n_pending: 0
                            n_expired: 0
                            n_advertised: 0
                            share_unmatched: null
                            share_assumed: null
                      auction_counted: true
                      parcel_as_of: '2026-08-27'
                      address_as_of: '2026-08-27'
                      parcel:
                        parcel_as_of: '2026-08-27'
                        n_parcels: 1836311
                        sale_mortgage_measured: false
                        financing:
                          as_of: '2026-06-25'
                          dated: true
                          dated_reason: dataset not in current delivery
                          n_parcels: 1611957
                          n_with_open_lien: 1032808
                          n_free_and_clear: 579149
                          n_avm: 1528967
                          n_involuntary: 192400
                          n_lenders: 76212
                        permits:
                          as_of: '2026-09-01'
                          n_permits: 2377496
                          n_parcels: 663045
                          n_unmatched: 355
                          jurisdictions:
                            - jurisdiction: PHOENIX
                              n_permits: 795764
                              last_issue_date: '2026-05-11'
                              windows_measured: null
                            - jurisdiction: MESA
                              n_permits: 330809
                              last_issue_date: '2026-05-29'
                              windows_measured: null
                        owner_profile:
                          as_of: '2026-09-09'
                          n_parcels: 1611077
                          n_multi: 646963
                          n_portfolio_5: 277841
                        history:
                          first_week: '2025-07-24'
                          last_week: '2026-09-09'
                          zips:
                            - '85251'
                          n_parcels: 18774
                          n_events: 236022
                          n_weeks: 62
                          domains:
                            tax:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 18597
                            deed:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 17615
                            sale:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 1700
                            listing:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 21122
                            mailing:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 2128
                            vacancy:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 2583
                            financing:
                              first_week: '2025-12-02'
                              last_week: '2026-06-25'
                              n_events: 6420
                            occupancy:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 1297
                            ownership:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 3238
                            structure:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 2548
                            valuation:
                              first_week: '2025-07-24'
                              last_week: '2026-06-25'
                              n_events: 83657
                            assessment:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 16450
                            owner_profile:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 58404
                            classification:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 263
                      lenders:
                        as_of: '2026-06-25'
                        recordings_through: '2026-06-11'
                        counties:
                          - '04013'
                        history_capture_share: 0.183706
                        n_lender_ids: 32046
                        purchase_measured: true
                        investor_lending_measured: true
                        flips_measured: true
                        borrowers_measured: true
                        takebacks_measured: true
                        counties_measured: false
                        dated: true
                        n_parcels_uncovered: 224192
                  terms: >-
                    Data: Investorlift Data Services. Public-record and MLS
                    listing data licensed through BatchData; municipal
                    short-term rental registries; Investorlift marketplace
                    records. Attribution and data-use terms:
                    https://developers.investorlift.com/guides/terms
                summary:
                  total: null
                  datasets:
                    - core
                    - owner
                    - sale
                    - tax
                    - listing
                  dated_filters: []
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            X-Rows:
              $ref: '#/components/headers/X-Rows'
            X-Dataset-Version:
              $ref: '#/components/headers/X-Dataset-Version'
            X-Data-End:
              $ref: '#/components/headers/X-Data-End'
            X-Credits-Charged:
              $ref: '#/components/headers/X-Credits-Charged'
            X-Credits-Remaining:
              $ref: '#/components/headers/X-Credits-Remaining'
        '400':
          description: >-
            Bad request (dataset_unavailable, geometry_conflict,
            geometry_required, invalid_cursor, invalid_id, market_required,
            quicklist_unavailable, sort_requires_point, unknown_parameter,
            validation_error)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                dataset_unavailable:
                  summary: Dataset unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#dataset_unavailable
                    title: Dataset unavailable
                    status: 400
                    code: dataset_unavailable
                    detail: demographic is not a block this API serves (demographics).
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    errors:
                      - param: datasets
                        message: demographic needs demographics
                        code: dataset_unavailable
                geometry_conflict:
                  summary: Geometry conflict
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#geometry_conflict
                    title: Geometry conflict
                    status: 400
                    code: geometry_conflict
                    detail: >-
                      You cannot combine radius_miles with bbox. Send one
                      geometry only.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                geometry_required:
                  summary: Geometry required
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#geometry_required
                    title: Geometry required
                    status: 400
                    code: geometry_required
                    detail: >-
                      The request needs one geometry: lat and lng with
                      radius_miles, bbox, property_id, zip (a list) or city.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                invalid_cursor:
                  summary: Invalid cursor
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#invalid_cursor
                    title: Invalid cursor
                    status: 400
                    code: invalid_cursor
                    detail: >-
                      The API issued the cursor for another query. Restart from
                      page 1.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                invalid_id:
                  summary: Invalid id
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#invalid_id
                    title: Invalid id
                    status: 400
                    code: invalid_id
                    detail: >-
                      An investor id is inv_ followed by 12 hex characters. The
                      prefix is part of the id.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                market_required:
                  summary: Market required
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#market_required
                    title: Market required
                    status: 400
                    code: market_required
                    detail: >-
                      inv_0a20a550f33b exists in 2 loaded markets. Pass market=.
                      The codes are in markets[].
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    markets:
                      - phx
                      - hou
                    errors:
                      - param: market
                        message: one of phx, hou
                        code: market_required
                quicklist_unavailable:
                  summary: Quicklist unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#quicklist_unavailable
                    title: Quicklist unavailable
                    status: 400
                    code: quicklist_unavailable
                    detail: >-
                      notice-of-default needs pre-foreclosure notices, which no
                      delivery carries.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    errors:
                      - param: quicklists
                        message: notice-of-default needs pre-foreclosure notices
                        code: quicklist_unavailable
                sort_requires_point:
                  summary: Sort requires a reference point
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#sort_requires_point
                    title: Sort requires a reference point
                    status: 400
                    code: sort_requires_point
                    detail: >-
                      sort=distance needs a reference point: add lat and lng, or
                      property_id.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                unknown_parameter:
                  summary: Unknown parameter
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#unknown_parameter
                    title: Unknown parameter
                    status: 400
                    code: unknown_parameter
                    detail: >-
                      The query carries a parameter this endpoint does not
                      define: kind[]. Write the list as kind=flip,hold or as
                      repeated keys.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    errors:
                      - param: kind[]
                        message: unknown parameter
                        code: unknown_parameter
                validation_error:
                  summary: Validation error
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#validation_error
                    title: Validation error
                    status: 400
                    code: validation_error
                    detail: radius_miles must be 20 or less.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    errors:
                      - param: radius_miles
                        message: must be 20 or less
                        code: too_big
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '401':
          description: Unauthorized (unauthorized)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                unauthorized:
                  summary: Unauthorized
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#unauthorized
                    title: Unauthorized
                    status: 401
                    code: unauthorized
                    detail: 'Send Authorization: Bearer with a current key.'
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '403':
          description: >-
            Forbidden (payment_overdue, plan_limit, quota_exceeded,
            subscription_required)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                plan_limit:
                  summary: Plan limit
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#plan_limit
                    title: Plan limit
                    status: 403
                    code: plan_limit
                    detail: >-
                      The free plan searches within 5 miles of a point, a
                      viewport up to 10 miles across, or one ZIP code. Your zip
                      parameter lists 2 ZIP codes. Upgrade in the developer
                      console for city-wide and multi-ZIP searches.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    tier: free
                    limit: geometry
                    max_radius_miles: 5
                    max_bbox_diagonal_miles: 10
                    max_zips: 1
                quota_exceeded:
                  summary: Quota exceeded
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#quota_exceeded
                    title: Quota exceeded
                    status: 403
                    code: quota_exceeded
                    detail: >-
                      Your requests spent the plan's credits for this billing
                      period (5000 of 5000). Wait for the period to reset on the
                      subscription's billing date, or upgrade in the developer
                      console.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    used: 5000
                    line: 5000
                subscription_required:
                  summary: Subscription required
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#subscription_required
                    title: Subscription required
                    status: 403
                    code: subscription_required
                    detail: >-
                      This key has no active plan subscription. Subscribe in the
                      developer console.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                payment_overdue:
                  summary: Payment overdue
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#payment_overdue
                    title: Payment overdue
                    status: 403
                    code: payment_overdue
                    detail: >-
                      The subscription's payment is overdue and the grace period
                      passed. Update the card under Manage Billing in the
                      developer console.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '404':
          description: Not found (not_found)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                not_found:
                  summary: Not found
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#not_found
                    title: Not found
                    status: 404
                    code: not_found
                    detail: No such deal in any loaded market.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '406':
          description: Not acceptable (not_acceptable)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                not_acceptable:
                  summary: Not acceptable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#not_acceptable
                    title: Not acceptable
                    status: 406
                    code: not_acceptable
                    detail: >-
                      Accept text/html names no representation this endpoint
                      produces (application/json).
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '410':
          description: >-
            Gone: a retired investor, agent or lender id, with superseded_by
            (gone)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                gone:
                  summary: Gone
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#gone
                    title: Gone
                    status: 410
                    code: gone
                    detail: >-
                      The registry retired investor inv_003c1db2782c in run 8
                      (RETIRED). No current investor holds its names. Use
                      /v1/investors/search instead.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    superseded_by: null
                    reason: RETIRED
                    market: phx
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '422':
          description: >-
            Unprocessable (addresses_unavailable, agents_unavailable,
            ambiguous_address, ambiguous_apn, auction_unavailable,
            cash_sale_unavailable, dated_refused, history_unavailable,
            lenders_unavailable, listings_unavailable, outside_coverage,
            parcels_unavailable, str_unavailable, wholesale_unavailable)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                agents_unavailable:
                  summary: Agents unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#agents_unavailable
                    title: Agents unavailable
                    status: 422
                    code: agents_unavailable
                    detail: >-
                      This market has no published agent registry. See
                      meta.coverage[].agents_data_end.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                auction_unavailable:
                  summary: Auction counts unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#auction_unavailable
                    title: Auction counts unavailable
                    status: 422
                    code: auction_unavailable
                    detail: >-
                      This market has no published foreclosure-auction counts:
                      its registry predates them. So the API cannot answer
                      buys_at_auction, buys_reo and bought_auction_kind there,
                      and meta.coverage[].auction_counted is false for it. Drop
                      the parameter to list every row.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                cash_sale_unavailable:
                  summary: Cash sale proxy unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#cash_sale_unavailable
                    title: Cash sale proxy unavailable
                    status: 422
                    code: cash_sale_unavailable
                    detail: >-
                      The delivery records a purchase mortgage on fewer than one
                      priced last sale in five of phx. So
                      meta.coverage[].parcel.sale_mortgage_measured is false and
                      cash_sale_proxy is null on every parcel there.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    errors:
                      - param: quicklists
                        message: cash sale proxy not measured for phx
                        code: cash_sale_unavailable
                dated_refused:
                  summary: Dated data refused
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#dated_refused
                    title: Dated data refused
                    status: 422
                    code: dated_refused
                    detail: >-
                      require_current is true and the request reads dated
                      blocks: filters.financing, datasets valuation. The
                      financing, lien and valuation data is a snapshot valued at
                      2026-06-25.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    as_of: '2026-06-25'
                    errors:
                      - param: filters.financing
                        message: reads the dated financing slice
                        code: dated
                      - param: datasets
                        message: valuation is a dated block
                        code: dated
                lenders_unavailable:
                  summary: Lenders unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#lenders_unavailable
                    title: Lenders unavailable
                    status: 422
                    code: lenders_unavailable
                    detail: >-
                      Market hou has no published lender registry
                      (meta.coverage[].lenders is null there). The API still
                      serves the financing block on parcels where the slice is.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    markets:
                      - hou
                listings_unavailable:
                  summary: Listings unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#listings_unavailable
                    title: Listings unavailable
                    status: 422
                    code: listings_unavailable
                    detail: >-
                      You gave listing_status for a market with no published
                      listing tables. See meta.coverage[].listings_data_end.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                outside_coverage:
                  summary: Outside coverage
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#outside_coverage
                    title: Outside coverage
                    status: 422
                    code: outside_coverage
                    detail: >-
                      The point 40.712776, -74.005974 is outside every loaded
                      market's point tolerance (loaded: phx, hou). See
                      meta.coverage[].bbox and point_tolerance_miles on any list
                      response.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                parcels_unavailable:
                  summary: Parcel products unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#parcels_unavailable
                    title: Parcel products unavailable
                    status: 422
                    code: parcels_unavailable
                    detail: >-
                      Market hou has no published parcel product tables
                      (meta.coverage[].parcel is null). The location matches no
                      market that carries them.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    markets:
                      - hou
                str_unavailable:
                  summary: Short-term rental data unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#str_unavailable
                    title: Short-term rental data unavailable
                    status: 422
                    code: str_unavailable
                    detail: >-
                      This market has no published short-term rental tables. See
                      meta.coverage[].str_as_of.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                wholesale_unavailable:
                  summary: Wholesale transactions unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#wholesale_unavailable
                    title: Wholesale transactions unavailable
                    status: 422
                    code: wholesale_unavailable
                    detail: >-
                      This market has no published Investorlift wholesale
                      tables. See meta.coverage[].wholesale_as_of.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '429':
          description: Rate limited, with Retry-After (rate_limited)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                rate_limited:
                  summary: Rate limited
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#rate_limited
                    title: Rate limited
                    status: 429
                    code: rate_limited
                    detail: >-
                      The request exceeded the per-key budget. Retry in 12
                      seconds.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    retry_after: 12
                    bucket: key
          headers:
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '500':
          description: Internal error (internal_error)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                internal_error:
                  summary: Internal error
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#internal_error
                    title: Internal error
                    status: 500
                    code: internal_error
                    detail: The request failed. Quote request_id when you report it.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '503':
          description: >-
            Unavailable, with Retry-After on pool_saturated and
            ledger_unavailable (database_unavailable, ledger_unavailable,
            pool_saturated)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                database_unavailable:
                  summary: Database unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#database_unavailable
                    title: Database unavailable
                    status: 503
                    code: database_unavailable
                    detail: >-
                      The service failed to reach the database and did not run
                      the request.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                ledger_unavailable:
                  summary: Ledger unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#ledger_unavailable
                    title: Ledger unavailable
                    status: 503
                    code: ledger_unavailable
                    detail: >-
                      The credit ledger is unreachable. The API charged nothing.
                      Retry in 5 seconds.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    retry_after: 5
                pool_saturated:
                  summary: Pool saturated
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#pool_saturated
                    title: Pool saturated
                    status: 503
                    code: pool_saturated
                    detail: >-
                      No pooled connection was free. The service did not run the
                      request.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '504':
          description: Statement timeout (statement_timeout)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                statement_timeout:
                  summary: Statement timeout
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#statement_timeout
                    title: Statement timeout
                    status: 504
                    code: statement_timeout
                    detail: >-
                      The query exceeded the 10 second statement timeout. Narrow
                      the geometry or filters.
                    instance: /v1/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
components:
  schemas:
    ParcelSearchRow:
      type: object
      properties:
        id:
          type: string
          pattern: ^prop_[0-9a-f]{32}$
          description: Parcel id, the key to every other property route.
        market:
          type: string
          description: The market the parcel belongs to.
        distance_miles:
          description: Miles from the point or the property_id centre. Null without one.
          type:
            - number
            - 'null'
        address:
          $ref: '#/components/schemas/ParcelAddress'
        general:
          $ref: '#/components/schemas/ParcelGeneral'
        building:
          $ref: '#/components/schemas/ParcelBuilding'
        lot:
          $ref: '#/components/schemas/ParcelLot'
        owner:
          anyOf:
            - $ref: '#/components/schemas/ParcelOwner'
            - type: 'null'
          description: Null when you did not request the owner dataset.
        sale:
          anyOf:
            - $ref: '#/components/schemas/ParcelSale'
            - type: 'null'
          description: Null when you did not request the sale dataset.
        tax:
          anyOf:
            - $ref: '#/components/schemas/ParcelTax'
            - type: 'null'
          description: Null when you did not request the tax dataset.
        listing:
          anyOf:
            - $ref: '#/components/schemas/ParcelListing'
            - type: 'null'
          description: >-
            Null when you did not request the listing dataset, or the parcel
            carries no MLS record.
        valuation:
          anyOf:
            - $ref: '#/components/schemas/ParcelValuation'
            - type: 'null'
          description: >-
            Dated. Null when you did not request it, or the slice carries no AVM
            for the parcel.
        financing:
          anyOf:
            - $ref: '#/components/schemas/FinancingSummary'
            - type: 'null'
          description: >-
            Dated. Null when you did not request it, or the slice carries no row
            for the parcel.
        permits:
          anyOf:
            - $ref: '#/components/schemas/PermitSummary'
            - type: 'null'
          description: Null when you did not request it, or the parcel carries no permit.
        history:
          anyOf:
            - $ref: '#/components/schemas/ParcelHistorySummary'
            - type: 'null'
          description: >-
            Null when you did not request it, or the parcel is outside the
            history lake's ZIP set.
        quicklists:
          anyOf:
            - type: array
              items:
                type: string
            - type: 'null'
          description: >-
            Every quicklist the parcel matches, when you requested the
            quicklists dataset. Null otherwise.
      required:
        - id
        - market
        - distance_miles
        - address
        - general
        - building
        - lot
        - owner
        - sale
        - tax
        - listing
        - valuation
        - financing
        - permits
        - history
        - quicklists
      additionalProperties: false
      description: >-
        One parcel of a search result: the address and assessor blocks always,
        the other blocks when datasets names them.
    Page:
      type: object
      properties:
        next_cursor:
          description: >-
            Opaque cursor for the next page: pass it back as cursor= with the
            same query. Null on the last page.
          type:
            - string
            - 'null'
        limit:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The page size the API applied.
        returned:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Rows in this page.
      required:
        - next_cursor
        - limit
        - returned
      additionalProperties: false
      description: >-
        Pagination: the page size, the rows returned and the cursor for the next
        page. Paged lists carry no total. The summary block does.
    Meta:
      type: object
      properties:
        generated_at:
          type: string
          description: >-
            When the API produced this response, ISO 8601. It does not change
            the ETag.
        weights:
          description: >-
            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.
          type: object
          propertyNames:
            type: string
          additionalProperties:
            type: number
        reference_point:
          description: >-
            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.
          type: object
          properties:
            lat:
              type: number
              minimum: -90
              maximum: 90
              description: Latitude of the reference point.
            lng:
              type: number
              minimum: -180
              maximum: 180
              description: Longitude of the reference point.
          required:
            - lat
            - lng
          additionalProperties: false
        geometry:
          $ref: '#/components/schemas/MetaGeometry'
          description: >-
            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:
          description: >-
            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.
          type: array
          items:
            type: string
            pattern: ^(inv|agt|len)_[0-9a-f]{12}$
            description: >-
              An investor id (inv_...), a listing agent id (agt_...) or a lender
              id (len_...).
        coverage:
          type: array
          items:
            $ref: '#/components/schemas/Coverage'
          description: >-
            The markets the response draws on, with their counties, data end
            dates and data versions.
        dated:
          description: >-
            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.
          type: array
          items:
            $ref: '#/components/schemas/Dated'
        terms:
          type: string
          description: Attribution and data-use terms for the data in this response.
      required:
        - generated_at
        - coverage
        - terms
      additionalProperties: false
      description: >-
        Response metadata: when the API produced it, which markets it covers,
        and how fresh they are.
    ParcelSearchSummary:
      type: object
      properties:
        total:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The count of matching parcels when count_only is true. Null on a
            paged request (page the rows instead).
        datasets:
          type: array
          items:
            type: string
          description: The datasets the rows carry.
        dated_filters:
          type: array
          items:
            type: string
          description: >-
            The filter groups, quicklists and sorts of this request that read
            dated columns. Empty when none do.
      required:
        - total
        - datasets
        - dated_filters
      additionalProperties: false
      description: What the request asked for and, on count_only, how many parcels match.
    Problem:
      type: object
      properties:
        type:
          type: string
          description: >-
            URI of the problem: the Errors page of the documentation site,
            anchored at the code.
        title:
          type: string
          description: Short human-readable summary of the problem code.
        status:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: HTTP status.
        code:
          type: string
          description: >-
            Stable machine-readable code from the catalogue at
            https://developers.investorlift.com/problems.json.
        detail:
          type: string
          description: Human-readable explanation specific to this occurrence.
        instance:
          type: string
          description: Request path.
        request_id:
          type: string
          description: Request id to quote when you report a problem.
        errors:
          description: Per-parameter validation failures (400 only).
          type: array
          items:
            type: object
            properties:
              param:
                description: >-
                  The offending parameter. Null when the problem is not about
                  one parameter.
                type:
                  - string
                  - 'null'
              message:
                type: string
                description: What is wrong with it.
              code:
                type: string
                description: Machine-readable reason, for example invalid_enum_value.
            required:
              - param
              - message
              - code
            additionalProperties: false
            description: One validation failure.
      required:
        - type
        - title
        - status
        - code
        - detail
        - instance
        - request_id
      additionalProperties: {}
      description: >-
        RFC 9457 problem details (application/problem+json). Some codes add
        extra fields beside these: superseded_by, candidates, n_deals, cap,
        suggestion, markets, retry_after.
    ParcelAddress:
      type: object
      properties:
        street:
          description: >-
            Situs street line as the delivery formats it, for example "4120 E
            Saguaro Blossom Dr"; null when the delivery does not record it.
          type:
            - string
            - 'null'
        unit:
          description: Unit, for example "Unit 12"; null on a single house.
          type:
            - string
            - 'null'
        city:
          description: City, upper case; null when the delivery does not record it.
          type:
            - string
            - 'null'
        state:
          description: State, 2 letters; null when the delivery does not record it.
          type:
            - string
            - 'null'
        zip:
          description: 5-digit ZIP; null when the delivery does not record it.
          type:
            - string
            - 'null'
        county_fips:
          description: 5-digit county FIPS; null when the delivery does not record it.
          type:
            - string
            - 'null'
        apn:
          description: >-
            Assessor parcel number as recorded; null when the delivery does not
            record it.
          type:
            - string
            - 'null'
        latitude:
          anyOf:
            - type: number
              minimum: -90
              maximum: 90
              description: WGS84 latitude.
            - type: 'null'
          description: WGS84 latitude of the parcel centre.
        longitude:
          anyOf:
            - type: number
              minimum: -180
              maximum: 180
              description: WGS84 longitude.
            - type: 'null'
          description: WGS84 longitude of the parcel centre.
        census_tract:
          description: Census tract; null when the delivery does not record it.
          type:
            - string
            - 'null'
        school_district:
          description: >-
            School district as the delivery names it; null when the delivery
            does not record it.
          type:
            - string
            - 'null'
      required:
        - street
        - unit
        - city
        - state
        - zip
        - county_fips
        - apn
        - latitude
        - longitude
        - census_tract
        - school_district
      additionalProperties: false
      description: The situs address and location keys of a parcel.
    ParcelGeneral:
      type: object
      properties:
        segment:
          anyOf:
            - type: string
              enum:
                - SFR
                - CONDO_TH
                - OTHER
              description: >-
                Parcel segment: SFR, CONDO_TH (condo or townhouse) or OTHER, a
                mixed bucket of manufactured, multi-family, land and commercial
                parcels.
            - type: 'null'
          description: >-
            Parcel segment: SFR, CONDO_TH or OTHER. Null when the use code is
            unknown.
        property_type_category:
          description: >-
            BatchData property type category, for example "Residential"; null
            when the delivery does not record it.
          type:
            - string
            - 'null'
        property_type_detail:
          description: >-
            BatchData property type detail, for example "Single Family
            Residential"; null when the delivery does not record it.
          type:
            - string
            - 'null'
        land_use_code:
          description: >-
            Standardised land use code; null when the delivery does not record
            it.
          type:
            - string
            - 'null'
        vacant:
          description: >-
            True when the USPS marks the situs address vacant; null when the
            delivery does not record it.
          type:
            - boolean
            - 'null'
        mailing_address_vacant:
          description: >-
            True when the delivery marks the owner's mailing address vacant;
            null when the delivery does not record it.
          type:
            - boolean
            - 'null'
        parcel_count:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Parcels under the same address; null when the delivery does not
            record it.
      required:
        - segment
        - property_type_category
        - property_type_detail
        - land_use_code
        - vacant
        - mailing_address_vacant
        - parcel_count
      additionalProperties: false
      description: Classification and occupancy flags.
    ParcelBuilding:
      type: object
      properties:
        bedrooms:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Bedrooms; null when the delivery does not record it.
        bathrooms:
          description: >-
            Bathrooms, halves allowed; null when the delivery does not record
            it.
          type:
            - number
            - 'null'
        sqft:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The living area, square feet; null when the delivery does not record
            it.
        total_building_sqft:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Total building area, square feet; null when the delivery does not
            record it.
        year_built:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Year built; null when the delivery does not record it.
        effective_year_built:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Effective year built after a major renovation; null when the
            assessor records no renovation.
        stories:
          description: Stories; null when the delivery does not record it.
          type:
            - number
            - 'null'
        pool:
          description: >-
            True when the assessor records a private pool; null when the
            delivery does not record it.
          type:
            - boolean
            - 'null'
        garage_spaces:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Garage parking spaces; null when the delivery does not record it.
        building_condition:
          description: Assessor condition label; null when the delivery does not record it.
          type:
            - string
            - 'null'
        construction_type:
          description: Construction type; null when the delivery does not record it.
          type:
            - string
            - 'null'
        building_count:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Buildings on the parcel; null when the delivery does not record it.
        unit_count:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Units on the parcel; null when the delivery does not record it.
        fireplace_count:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Fireplaces; null when the delivery does not record it.
        roof_type:
          description: Roof type; null when the delivery does not record it.
          type:
            - string
            - 'null'
        heat_source:
          description: Heat source; null when the delivery does not record it.
          type:
            - string
            - 'null'
        ac_source:
          description: Air conditioning source; null when the delivery does not record it.
          type:
            - string
            - 'null'
      required:
        - bedrooms
        - bathrooms
        - sqft
        - total_building_sqft
        - year_built
        - effective_year_built
        - stories
        - pool
        - garage_spaces
        - building_condition
        - construction_type
        - building_count
        - unit_count
        - fireplace_count
        - roof_type
        - heat_source
        - ac_source
      additionalProperties: false
      description: The structure as the assessor records it.
    ParcelLot:
      type: object
      properties:
        lot_sqft:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Lot size, square feet; null when the delivery does not record it.
        lot_acres:
          description: Lot size, acres; null when the delivery does not record it.
          type:
            - number
            - 'null'
        zoning_code:
          description: Zoning code; null when the delivery does not record it.
          type:
            - string
            - 'null'
        subdivision:
          description: Subdivision name; null when the delivery does not record it.
          type:
            - string
            - 'null'
        section_township_range:
          description: >-
            Section, township, range and meridian; null when the delivery does
            not record it.
          type:
            - string
            - 'null'
      required:
        - lot_sqft
        - lot_acres
        - zoning_code
        - subdivision
        - section_township_range
      additionalProperties: false
      description: The lot and its legal description keys.
    ParcelOwner:
      type: object
      properties:
        kind:
          anyOf:
            - type: string
              enum:
                - PERSON
                - TRUST
                - ENTITY
                - PUBLIC_INSTITUTIONAL
              description: >-
                Kind of the owner at the deed data end: PERSON, TRUST, ENTITY or
                PUBLIC_INSTITUTIONAL (a public body).
            - type: 'null'
          description: >-
            Null when the county roll does not say. Kind of the owner at the
            deed data end: PERSON, TRUST, ENTITY or PUBLIC_INSTITUTIONAL (a
            public body).
        owner_occupied:
          description: >-
            True when the owner's mailing address is the parcel itself; null
            when the delivery does not record it.
          type:
            - boolean
            - 'null'
        absentee:
          description: >-
            True when the owner's mailing address is elsewhere; null when the
            delivery does not record it.
          type:
            - boolean
            - 'null'
        is_trust:
          description: >-
            True when the owner is a trust; null when the delivery does not
            record it.
          type:
            - boolean
            - 'null'
        is_public:
          description: >-
            True when the owner is a public body; null when the delivery does
            not record it.
          type:
            - boolean
            - 'null'
        holding_kind:
          anyOf:
            - type: string
              enum:
                - OWNER_OCCUPIED
                - ABSENTEE_INDIVIDUAL
                - ABSENTEE_ENTITY
                - RENTAL_REGISTERED
                - RENTAL_SIGNAL
                - UNKNOWN
              description: >-
                How the owner holds the parcel at the deed data end
                (meta.coverage[].data_end), read from the county owner roll
                behind the row. OWNER_OCCUPIED means the owner lives there,
                ABSENTEE_INDIVIDUAL a person whose mailing address is elsewhere,
                and ABSENTEE_ENTITY an LLC or trust. RENTAL_REGISTERED means the
                parcel is on the county rental registry. RENTAL_SIGNAL means an
                owner-attributed business-use short-term-rental licence in any
                market. In Texas it also means an absentee owner with no
                homestead exemption or a rental listing. The short_term_rental
                block says which. UNKNOWN means the county roll does not say.
            - type: 'null'
          description: >-
            Null when unknown. How the owner holds the parcel at the deed data
            end (meta.coverage[].data_end), read from the county owner roll
            behind the row. OWNER_OCCUPIED means the owner lives there,
            ABSENTEE_INDIVIDUAL a person whose mailing address is elsewhere, and
            ABSENTEE_ENTITY an LLC or trust. RENTAL_REGISTERED means the parcel
            is on the county rental registry. RENTAL_SIGNAL means an
            owner-attributed business-use short-term-rental licence in any
            market. In Texas it also means an absentee owner with no homestead
            exemption or a rental listing. The short_term_rental block says
            which. UNKNOWN means the county roll does not say.
        held_since:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: When the current ownership started, YYYY-MM-DD.
        mailing_state:
          description: >-
            The owner's mailing state, 2 letters (the full mailing address is
            not served on this host); null when the delivery does not record it.
          type:
            - string
            - 'null'
        profile:
          anyOf:
            - $ref: '#/components/schemas/OwnerProfile'
            - type: 'null'
          description: >-
            The owner's portfolio from the Owner Profile block. Null when the
            parcel carries none, or when you did not request the owner_profile
            dataset.
      required:
        - kind
        - owner_occupied
        - absentee
        - is_trust
        - is_public
        - holding_kind
        - held_since
        - mailing_state
        - profile
      additionalProperties: false
      description: >-
        The current owner: the facts, and the portfolio when requested. This
        host never names the holder.
    ParcelSale:
      type: object
      properties:
        last_sale_date:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The last sale date the deed feed summarises.
        last_sale_recording_date:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: Its recording date.
        last_sale_price:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            Its price; null when the deed carries no price. Also null when it
            carries a Washington recorder's nominal consideration ($200, $313,
            $370) on an excise-exempt transfer. The API serves that as no price.
        last_sale_document_type:
          description: >-
            The deed type, for example "Warranty Deed"; null when the delivery
            does not record it.
          type:
            - string
            - 'null'
        last_sale_transaction_type:
          description: >-
            The transaction type as the feed classifies it; null when the
            delivery does not record it.
          type:
            - string
            - 'null'
        last_sale_price_per_sqft:
          description: >-
            Price per living square foot; null when the deed carries no price.
            Also null when it carries a Washington recorder's nominal
            consideration ($200, $313, $370) on an excise-exempt transfer. The
            API serves that as no price. Also null when the living area is
            unknown.
          type:
            - number
            - 'null'
        last_sale_mortgage_amount:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The purchase mortgage recorded on the last sale; null when the deed
            feed records no purchase mortgage. Also null on every parcel of a
            market whose delivery does not record the column
            (meta.coverage[].parcel.sale_mortgage_measured false).
        last_sale_lender:
          description: >-
            Its lender; null when the deed feed records no purchase mortgage,
            and on every parcel where
            meta.coverage[].parcel.sale_mortgage_measured is false.
          type:
            - string
            - 'null'
        cash_sale_proxy:
          description: >-
            True when the last sale carries a price and no purchase mortgage: a
            proxy for a cash sale, as the name says; null when the last sale
            carries no price, or when the parcel has no sale summary. Also null
            on every parcel of a market whose delivery records a purchase
            mortgage on fewer than one priced last sale in five. That market
            carries meta.coverage[].parcel.sale_mortgage_measured false. There
            the sale.cash_sale filter and the cash-buyer quicklist answer 422
            cash_sale_unavailable.
          type:
            - boolean
            - 'null'
        prior_sale_date:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The sale before the last one.
        prior_sale_price:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            Its price; null when the deed carries no price. Also null when it
            carries a Washington recorder's nominal consideration ($200, $313,
            $370) on an excise-exempt transfer. The API serves that as no price.
        last_purchase_date:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The registry's last arm's-length purchase deed on the parcel. This
            is God Mode's own rule, distinct from the feed's last sale.
        last_purchase_price:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: Its price; null when the deed carries no price.
      required:
        - last_sale_date
        - last_sale_recording_date
        - last_sale_price
        - last_sale_document_type
        - last_sale_transaction_type
        - last_sale_price_per_sqft
        - last_sale_mortgage_amount
        - last_sale_lender
        - cash_sale_proxy
        - prior_sale_date
        - prior_sale_price
        - last_purchase_date
        - last_purchase_price
      additionalProperties: false
      description: >-
        The last and prior sales as the deed feed summarises them, plus the
        registry's own last purchase.
    ParcelTax:
      type: object
      properties:
        assessed_total:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: Total assessed value; null when the delivery does not record it.
        assessed_land:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: Assessed land value; null when the delivery does not record it.
        assessed_improvement:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            Assessed improvement value; null when the delivery does not record
            it.
        assessment_year:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Assessment year; null when the delivery does not record it.
        market_value_total:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The assessor's total market value; null when the delivery does not
            record it.
        tax_amount:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: Annual tax amount; null when the delivery does not record it.
        tax_year:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Tax year; null when the delivery does not record it.
        tax_delinquent_year:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The year taxes went delinquent; null when the taxes are current.
        tax_exemptions:
          anyOf:
            - type: array
              items:
                type: string
            - type: 'null'
          description: Exemptions as the roll lists them, for example ["Homestead"].
      required:
        - assessed_total
        - assessed_land
        - assessed_improvement
        - assessment_year
        - market_value_total
        - tax_amount
        - tax_year
        - tax_delinquent_year
        - tax_exemptions
      additionalProperties: false
      description: Assessment and tax as the county roll carries them.
    ParcelListing:
      type: object
      properties:
        status:
          description: >-
            The MLS status as the feed writes it, for example "Active",
            "Pending", "Sold", "Off Market"; null when the delivery does not
            record it.
          type:
            - string
            - 'null'
        status_category:
          description: >-
            The feed's status category; null when the delivery does not record
            it.
          type:
            - string
            - 'null'
        price:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: The list price; null when off market.
        listed_on:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The original listing date of the current record.
        status_updated_on:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: When the status last changed.
        sold_on:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The sold date when the record is a sale.
        sold_price:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: The sold price; null unless the record is a sale.
        is_rental:
          description: >-
            True when the record is a rental listing; null when the delivery
            does not record it.
          type:
            - boolean
            - 'null'
        mls_number:
          description: The MLS number; null when the delivery does not record it.
          type:
            - string
            - 'null'
        brokerage:
          description: The listing brokerage; null when the delivery does not record it.
          type:
            - string
            - 'null'
      required:
        - status
        - status_category
        - price
        - listed_on
        - status_updated_on
        - sold_on
        - sold_price
        - is_rental
        - mls_number
        - brokerage
      additionalProperties: false
      description: The newest MLS record the feed carries for the parcel.
    ParcelValuation:
      type: object
      properties:
        as_of:
          type: string
          description: 'The delivery the AVM comes from. Dated: see meta.dated[].'
        estimated_value:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            BatchData's automated valuation; null when the slice carries no AVM
            for the parcel.
        range_low:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The low end of the valuation range; null when the slice carries no
            AVM for the parcel.
        range_high:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: The high end; null when the slice carries no AVM for the parcel.
        confidence:
          description: >-
            The valuation confidence score; null when the slice carries no AVM
            for the parcel.
          type:
            - number
            - 'null'
        avm_date:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The valuation date the file carried.
        equity_balance:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            Estimated equity: value minus open lien balances; null without an
            AVM.
        equity_percent:
          description: Equity as a percent of value; null without an AVM.
          type:
            - number
            - 'null'
        ltv:
          description: Loan-to-value, percent; null without an AVM.
          type:
            - number
            - 'null'
      required:
        - as_of
        - estimated_value
        - range_low
        - range_high
        - confidence
        - avm_date
        - equity_balance
        - equity_percent
        - ltv
      additionalProperties: false
      description: >-
        The AVM, equity and LTV at the slice date. A dated block: every response
        that carries it lists it in meta.dated[].
    FinancingSummary:
      type: object
      properties:
        as_of:
          type: string
          description: 'The delivery the slice comes from. Dated: see meta.dated[].'
        open_lien_count:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Open liens at as_of. 0 is a value (free and clear); null when the
            slice carries no lien data for the parcel.
        open_lien_balance:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            Estimated total open balance; null when the slice carries no lien
            data for the parcel.
        first_lien_lender:
          description: The senior lien's lender; null when the parcel has no open lien.
          type:
            - string
            - 'null'
        first_lien_lender_class:
          anyOf:
            - type: string
              enum:
                - BANK
                - NONBANK
                - PRIVATE
                - INDIVIDUAL
                - GOVERNMENT
              description: >-
                How the lender name reads. BANK: a bank, credit union or thrift.
                NONBANK: a mortgage company or other lending business. PRIVATE:
                a trust, a seller carry-back or another private party, not the
                hard-money sense of private lender, which the Lender object
                carries as is_hard_money. INDIVIDUAL: a person's name.
                GOVERNMENT: an agency or a public body.
            - type: 'null'
          description: >-
            Null when the parcel has no senior lien. How the lender name reads.
            BANK: a bank, credit union or thrift. NONBANK: a mortgage company or
            other lending business. PRIVATE: a trust, a seller carry-back or
            another private party, not the hard-money sense of private lender,
            which the Lender object carries as is_hard_money. INDIVIDUAL: a
            person's name. GOVERNMENT: an agency or a public body.
        first_lien_rate:
          description: >-
            The senior lien's estimated rate, percent; null when the parcel has
            no open lien, or when the file carries no rate.
          type:
            - number
            - 'null'
        first_lien_balance:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The senior lien's estimated balance; null when the parcel has no
            open lien.
        has_heloc:
          description: >-
            True when any open lien is a HELOC; null when the slice carries no
            lien data for the parcel.
          type:
            - boolean
            - 'null'
        cash_purchase:
          description: >-
            The file's cash-purchase flag on the senior lien; null when the file
            leaves it blank, which is most rows.
          type:
            - boolean
            - 'null'
        free_and_clear:
          description: >-
            True when open_lien_count is 0; null when the slice carries no lien
            data for the parcel.
          type:
            - boolean
            - 'null'
        involuntary_lien_count:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Involuntary liens on record at as_of; null when the slice carries no
            lien data for the parcel.
        last_mortgage_recording_date:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The recording date of the newest recorded mortgage.
        last_mortgage_lender:
          description: Its lender; null when the file records no mortgage.
          type:
            - string
            - 'null'
        last_mortgage_lender_class:
          anyOf:
            - type: string
              enum:
                - BANK
                - NONBANK
                - PRIVATE
                - INDIVIDUAL
                - GOVERNMENT
              description: >-
                How the lender name reads. BANK: a bank, credit union or thrift.
                NONBANK: a mortgage company or other lending business. PRIVATE:
                a trust, a seller carry-back or another private party, not the
                hard-money sense of private lender, which the Lender object
                carries as is_hard_money. INDIVIDUAL: a person's name.
                GOVERNMENT: an agency or a public body.
            - type: 'null'
          description: >-
            Null when the file records no mortgage. How the lender name reads.
            BANK: a bank, credit union or thrift. NONBANK: a mortgage company or
            other lending business. PRIVATE: a trust, a seller carry-back or
            another private party, not the hard-money sense of private lender,
            which the Lender object carries as is_hard_money. INDIVIDUAL: a
            person's name. GOVERNMENT: an agency or a public body.
        last_mortgage_amount:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: Its amount; null when the file records no mortgage.
        last_mortgage_rate:
          description: >-
            Its rate, percent; null when the file records no mortgage, or when
            it carries no rate.
          type:
            - number
            - 'null'
      required:
        - as_of
        - open_lien_count
        - open_lien_balance
        - first_lien_lender
        - first_lien_lender_class
        - first_lien_rate
        - first_lien_balance
        - has_heloc
        - cash_purchase
        - free_and_clear
        - involuntary_lien_count
        - last_mortgage_recording_date
        - last_mortgage_lender
        - last_mortgage_lender_class
        - last_mortgage_amount
        - last_mortgage_rate
      additionalProperties: false
      description: >-
        The financing summary of a parcel at the slice date, in one block.
        Dated: every response that serves it lists it in meta.dated[].
    PermitSummary:
      type: object
      properties:
        as_of:
          type: string
          description: The permit snapshot date.
        n_permits:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Permits on the parcel, all time; null when the build has nothing to
            compute it from.
        n_permits_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Permits issued in the 24 months before as_of; null when the build
            has nothing to compute it from, or when the parcel's jurisdiction
            issued no permit in the 12 months before as_of. Then
            meta.coverage[].parcel.permits.jurisdictions[].windows_measured is
            false: the jurisdiction's feed is stale, so the API does not measure
            the window. Null there means unmeasured, not empty.
        last_permit_issue_date:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The newest issue date.
        n_open_permits_12m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Permits active or in review that are older than 12 months at as_of;
            null when the build has nothing to compute it from, or when the
            parcel's jurisdiction issued no permit in the 12 months before
            as_of. Then
            meta.coverage[].parcel.permits.jurisdictions[].windows_measured is
            false: the jurisdiction's feed is stale, so the API does not measure
            the window. Null there means unmeasured, not empty.
        major_work_36m:
          description: >-
            True when the jurisdiction issued a major-work permit in the 36
            months before as_of. A major-work permit carries the tag Addition,
            ADU, New Construction, Pool and Hot Tub or Solar; null when the
            build has nothing to compute it from, or when the parcel's
            jurisdiction issued no permit in the 12 months before as_of. Then
            meta.coverage[].parcel.permits.jurisdictions[].windows_measured is
            false: the jurisdiction's feed is stale, so the API does not measure
            the window. Null there means unmeasured, not empty.
          type:
            - boolean
            - 'null'
        tags_24m:
          anyOf:
            - type: array
              items:
                type: string
            - type: 'null'
          description: >-
            The distinct tags of the permits issued in the 24 months before
            as_of. Empty when none carries a tag; null when the parcel's
            jurisdiction issued no permit in the 12 months before as_of. Then
            meta.coverage[].parcel.permits.jurisdictions[].windows_measured is
            false: the jurisdiction's feed is stale, so the API does not measure
            the window. Null there means unmeasured, not empty.
        job_value_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The sum of the declared job values of those permits; null when none
            of them reported one, or when the parcel's jurisdiction issued no
            permit in the 12 months before as_of. Then
            meta.coverage[].parcel.permits.jurisdictions[].windows_measured is
            false: the jurisdiction's feed is stale, so the API does not measure
            the window. Null there means unmeasured, not empty.
      required:
        - as_of
        - n_permits
        - n_permits_24m
        - last_permit_issue_date
        - n_open_permits_12m
        - major_work_36m
        - tags_24m
        - job_value_24m
      additionalProperties: false
      description: The parcel's permit activity in one block.
    ParcelHistorySummary:
      type: object
      properties:
        first_week:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The first week the history lake observed the parcel.
        last_week:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The last week the history lake recorded an event.
        n_events:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Events on record; null when the build has nothing to compute it
            from.
        owner_changes_3y:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Owner changes in the 3 years before the data end; null when the
            build has nothing to compute it from.
        last_owner_change:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The week of the last owner change.
        listing_cycles_1y:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Listings started in the year before the data end; null when the
            build has nothing to compute it from.
        price_cuts_current_listing:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Price cuts since the current listing started; null when the build
            has nothing to compute it from.
        last_delist:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The week of the last delisting.
        vacant_since:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The week the parcel became vacant, when it is still vacant at the
            data end.
        delinquent_since:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The week taxes went delinquent, when they are still delinquent at
            the data end.
        last_new_mortgage:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The week of the last new mortgage (dated window).
      required:
        - first_week
        - last_week
        - n_events
        - owner_changes_3y
        - last_owner_change
        - listing_cycles_1y
        - price_cuts_current_listing
        - last_delist
        - vacant_since
        - delinquent_since
        - last_new_mortgage
      additionalProperties: false
      description: >-
        The parcel's history in one block. Null outside the history lake's ZIP
        set.
    MetaGeometry:
      type: object
      properties:
        kind:
          type: string
          enum:
            - radius
            - bbox
            - place
          description: >-
            Which location ran: radius, bbox or place. A radius is a point with
            radius_miles, or a property_id request, which runs around the parcel
            centroid. A bbox is a viewport. A place is a ZIP list or a postal
            city.
        lat:
          anyOf:
            - type: number
              minimum: -90
              maximum: 90
              description: WGS84 latitude.
            - type: 'null'
          description: >-
            The centre of the radius, or the reference point you gave beside a
            bbox or a place. For a property_id request the centre is the parcel
            centroid. Null when a bbox or a place had no reference point.
        lng:
          anyOf:
            - type: number
              minimum: -180
              maximum: 180
              description: WGS84 longitude.
            - type: 'null'
          description: The longitude beside lat. Null when lat is null.
        radius_miles:
          description: >-
            The radius that ran, in miles: the value you sent, or the default
            when you sent none. The default is 2 on the GET lists and 1 around
            property_id on POST `/v1/properties/search`. Null for a bbox or a
            place.
          type:
            - number
            - 'null'
        bbox:
          anyOf:
            - type: array
              prefixItems:
                - type: number
                  minimum: -180
                  maximum: 180
                  description: West edge (longitude).
                - type: number
                  minimum: -90
                  maximum: 90
                  description: South edge (latitude).
                - type: number
                  minimum: -180
                  maximum: 180
                  description: East edge (longitude).
                - type: number
                  minimum: -90
                  maximum: 90
                  description: North edge (latitude).
              items: false
              minItems: 4
              maxItems: 4
              description: '[west, south, east, north] in WGS84 degrees.'
            - type: 'null'
          description: >-
            The viewport as [west, south, east, north] in WGS84 degrees. Null
            unless kind is bbox.
        property_id:
          anyOf:
            - type: string
              pattern: ^prop_[0-9a-f]{32}$
              description: >-
                Parcel id: prop_ followed by 32 hex characters, for example
                prop_e93c776c53354a88de4e58448a6bf21b. The prefix is part of the
                id.
            - type: 'null'
          description: >-
            The parcel at the centre of the radius. Null unless the request
            named property_id.
        zip:
          anyOf:
            - type: array
              items:
                type: string
                pattern: ^\d{5}$
            - type: 'null'
          description: >-
            The ZIP list as you sent it, for example ["85251", "85257"]. Null
            unless kind is place and the request named ZIPs.
        city:
          description: >-
            The postal city as the API compared it: trimmed and folded to upper
            case ("Scottsdale" ran as "SCOTTSDALE"). Null unless kind is place
            and the request named a city.
          type:
            - string
            - 'null'
      required:
        - kind
        - lat
        - lng
        - radius_miles
        - bbox
        - property_id
        - zip
        - city
      additionalProperties: false
      description: >-
        The location the API computed the response over, as it ran: defaults
        filled, a parcel resolved to its centroid, a city folded. Copy it back
        as the query to repeat the request.
    Coverage:
      type: object
      properties:
        market:
          type: string
          description: Market code, for example phx. One entry per loaded market.
        state:
          type: string
          description: >-
            2-letter state of the market. The loaded markets and their states
            are in meta.coverage[].
        counties:
          type: array
          items:
            type: object
            properties:
              fips:
                type: string
                description: The 5-digit county FIPS code, for example 04013.
              name:
                type: string
                description: County name, for example Maricopa.
              data_end:
                anyOf:
                  - type: string
                    description: Calendar date, YYYY-MM-DD.
                  - type: 'null'
                description: >-
                  The last deed date on file for this county, YYYY-MM-DD. Null
                  when the county carries no dated deed.
            required:
              - fips
              - name
              - data_end
            additionalProperties: false
            description: One county the loaded area lies in.
          description: >-
            The counties the loaded area lies in, each with its own data end
            date. For a zip market the list names the county, but the loaded
            area is only the ZIP (see universe_kind).
        bbox:
          type: array
          prefixItems:
            - type: number
              minimum: -180
              maximum: 180
              description: West edge (longitude).
            - type: number
              minimum: -90
              maximum: 90
              description: South edge (latitude).
            - type: number
              minimum: -180
              maximum: 180
              description: East edge (longitude).
            - type: number
              minimum: -90
              maximum: 90
              description: North edge (latitude).
          items: false
          minItems: 4
          maxItems: 4
          description: >-
            The rectangle (west, south, east, north) that encloses every deal in
            the market: the initial map viewport and, with
            point_tolerance_miles, the limit for outside_coverage.
        data_end:
          type: string
          description: >-
            The last deed date in the data, YYYY-MM-DD. The API measures every
            "days since" value from this data_end, never from the request time.
        build_run_id:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Which pipeline build produced the data. Informational: use
            dataset_version for caching. Null when the data does not record it.
        registry_run:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Which investor registry run produced the data. Informational: use
            dataset_version for caching. Null when the data does not record it.
        registry_version:
          description: >-
            Which registry code version produced the data. Informational: use
            dataset_version for caching. Null when the data does not record it.
          type:
            - string
            - 'null'
        dataset_version:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Version of the loaded data, an integer that grows with every
            refresh. It is the cache key and the ETag, and every cursor binds to
            it.
        loaded_at:
          type: string
          description: When this data version went live, ISO 8601.
        metro_buy_to_resale_ratio:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            The median of purchase price divided by resale price over the
            market's priced flips since 2021. For example, 0.72 means flippers
            pay about 72% of the resale price. The price_fit factor uses it when
            an investor has too few flips of their own. Null when no priced
            flips exist.
        universe_kind:
          anyOf:
            - type: string
              enum:
                - zip
                - county
                - metro
              description: >-
                The area every count in this market covers: metro, county or
                zip. A metro market covers whole counties. A county market
                covers one county. The market cannot see what an investor did in
                the neighbouring counties. A zip market covers one or more ZIP
                codes. The market cannot see what an investor did outside them,
                a larger gap. In a county or zip market every investor count,
                price band, scale tier and confidence is a floor.
            - type: 'null'
          description: >-
            Null when the market row does not record it, a seed older than the
            column. The area every count in this market covers: metro, county or
            zip. A metro market covers whole counties. A county market covers
            one county. The market cannot see what an investor did in the
            neighbouring counties. A zip market covers one or more ZIP codes.
            The market cannot see what an investor did outside them, a larger
            gap. In a county or zip market every investor count, price band,
            scale tier and confidence is a floor.
        universe_zips:
          anyOf:
            - type: array
              items:
                type: string
                description: A 5-digit ZIP.
            - type: 'null'
          description: >-
            The ZIP codes of a zip universe, for example ["77088"]. Null for
            county and metro markets.
        point_tolerance_miles:
          type: number
          description: >-
            How far outside bbox a point can lie and get an answer, in miles: 20
            for a metro, 2 for a county market. The point is lat + lng, or the
            centre of a property_id parcel. Farther out, the API answers 422
            outside_coverage. A bbox must intersect the coverage bbox.
        n_parcels:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Parcels in the loaded area, the universe every count covers. Null
            when the data does not record it.
        listings_data_end:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The as-of date of the MLS listing feed for this market, YYYY-MM-DD:
            the newest status update among its listing rows, later than
            data_end. The deeds and the listings arrive in one delivery, each
            with its own end. The API measures every listing window
            (days_on_market, n_listed_12m) against this date. Null when this
            market has no published listing tables. Every listing block and
            listings rollup is null then, and the correct reading is "no listing
            data".
        agents_data_end:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The as-of date of the listing set behind the agent registry of this
            market, YYYY-MM-DD. It equals listings_data_end when the registry is
            current. It is earlier when a refresh moved the listings but left
            the agents on the older set. Null when this market has no published
            agent tables. Then every agent_id, identity_basis and
            agent_is_holder_member on the listing agents is null, and the
            investor profile carries has_licensed_member and agent_links null.
            The /v1/agents routes then answer 422 agents_unavailable.
        wholesale_as_of:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The date of the Investorlift export behind the market's wholesale
            transactions, YYYY-MM-DD. Every Investorlift listing published up to
            this date is on file. The API measures every wholesale window
            (n_listed_12m, n_bought_via_investorlift_12m) against the deed
            data_end. Null when this market has no published wholesale tables.
            Then every wholesale_listing block on deal rows, wholesale_purchases
            block on investor rows and wholesale_listings[] on a parcel is null.
            Then /v1/wholesale-listings, /v1/wholesalers,
            `/v1/investors/{id}/wholesale-purchases` and the source=investorlift
            and bought_on_investorlift filters answer 422 wholesale_unavailable.
        str_as_of:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The short-term rental snapshot of this market, YYYY-MM-DD: the
            oldest snapshot date among its served jurisdictions. Each
            jurisdiction's own date is in str.jurisdictions[].snapshot_date and
            on every block as data_as_of. Null when this market has no published
            short-term rental tables, or when the API serves none of its
            jurisdictions. Then every short_term_rental block on parcels and
            hold rows and every str roll-up on investor rows is null. Then the
            str_status, str_business_use, str_operator and str_holdings_min
            filters and /v1/str-parcels answer 422 str_unavailable.
        str:
          anyOf:
            - type: object
              properties:
                jurisdictions:
                  type: array
                  items:
                    $ref: '#/components/schemas/StrCoverageJurisdiction'
                  description: >-
                    Every city of the market the short-term rental build knows,
                    served or not. This list, not the parcel, explains a null
                    block on a parcel: read the city's coverage_reason.
              required:
                - jurisdictions
              additionalProperties: false
            - type: 'null'
          description: >-
            The short-term rental jurisdiction table of this market. Null when
            this market has no published short-term rental tables.
        auction_counted:
          type: boolean
          description: >-
            True when this market measures the foreclosure-auction and REO
            purchase counts. Then every investor row carries the auction block
            (investor.auction) and deal rows carry bought_auction_kind. False
            when the market's registry build came before the counts existed.
            Then the block is null on every investor of the market, and
            bought_auction_kind is null on every deal. The buys_at_auction,
            buys_reo and bought_auction_kind filters then answer 422
            auction_unavailable.
        parcel_as_of:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The deed data end that the build of the parcel product layer used,
            YYYY-MM-DD. The layer serves POST /v1/properties/search and the
            financing, permit and history routes. Null when this market has no
            published parcel product tables: those routes then answer 422
            parcels_unavailable.
        address_as_of:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The deed data end of the address table behind GET
            /v1/properties/resolve?address, YYYY-MM-DD. Null when this market
            has no published address table. The address lookup answers 422
            addresses_unavailable while no market carries the table.
        parcel:
          anyOf:
            - $ref: '#/components/schemas/ParcelCoverage'
            - type: 'null'
          description: >-
            What the parcel products cover in this market. The parts are the
            layer, the dated financing slice, the permit snapshot, the Owner
            Profile block and the history lake with its ZIP set. Null when this
            market has no published parcel product tables.
        lenders:
          anyOf:
            - type: object
              properties:
                as_of:
                  anyOf:
                    - type: string
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The slice date behind the lender registry, YYYY-MM-DD. It
                    equals parcel.financing.as_of.
                recordings_through:
                  anyOf:
                    - type: string
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The newest recording date in either source table,
                    YYYY-MM-DD. The API measures every recency on a lender
                    against this date.
                counties:
                  type: array
                  items:
                    type: string
                    description: A 5-digit county FIPS.
                  description: >-
                    The counties the lender registry covers. A ZIP, city or
                    county outside them answers 422 outside_coverage.
                history_capture_share:
                  anyOf:
                    - type: number
                      description: Decimal ratio, never a percentage (0.53 = +53%).
                    - type: 'null'
                  description: >-
                    The share of open lien positions recorded since 2022 that
                    the recorded history also carries within 3 days, 0 to 1. It
                    says how much of the open table the history sees.
                n_lender_ids:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Lender ids served in the market: the identities with a
                    profile, after the person gate. parcel.financing.n_lenders
                    counts raw spellings, several per id.
                purchase_measured:
                  type: boolean
                  description: >-
                    True when the market has the deed link. Then the API serves
                    purpose and the deed block on the loan rows, and the
                    purchase-money counts and ranks on the lenders. It also
                    serves the lender list's purpose, investor_only and
                    purchase_desc parameters. False on a registry built before
                    the deed link: every such value is null, and those
                    parameters answer 422 lenders_unavailable.
                investor_lending_measured:
                  type: boolean
                  description: >-
                    True when the market has the deal link and the borrower
                    match. Then the API serves the deal block, outcome and
                    investor ids on the loan rows, and the investor_lending
                    block on the profiles. It also serves the financing block on
                    deal rows and the financing sidecar on investor profiles.
                    False otherwise: every one of those is null.
                flips_measured:
                  type: boolean
                  description: >-
                    True when the market measures the flips each lender
                    financed, the flips_financed block on the profiles. False
                    otherwise: the block is null.
                borrowers_measured:
                  type: boolean
                  description: >-
                    True when the market has the borrower fold. Then the API
                    serves borrower keys on the loan rows, the borrowers block
                    on the profiles, GET `/v1/lenders/{id}/borrowers` and the
                    financed_by and uses_private_lender filters. False
                    otherwise: the block is null, and the route and the filters
                    answer 422 lenders_unavailable.
                takebacks_measured:
                  type: boolean
                  description: >-
                    True when the registry of this market includes the
                    foreclosure take-backs. That needs the auction deed tables
                    built and the lender members present. Then the API serves
                    the takebacks block on the profiles, the foreclosed block on
                    the loan rows and the FORECLOSED outcome. False otherwise:
                    the block is null on every profile, and foreclosed is null
                    on every loan row.
                counties_measured:
                  type: boolean
                  description: >-
                    True when the market has more than one loaded county, so a
                    county ranking means something:
                    rankings.n_counties_ranked_first_24m on the profiles. False
                    while the slice covers one county: that count is null.
                dated:
                  description: >-
                    True when the registry is a snapshot valued at as_of, like
                    the financing slice behind it. The API stamps every value
                    from it in meta.dated[] as the lenders block. Null on a
                    registry row that does not record it, a row older than the
                    column.
                  type:
                    - boolean
                    - 'null'
                n_parcels_uncovered:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels of the market outside the counties the registry
                    covers. Such a county is one the financing slice does not
                    reach. Null when the row does not record it.
              required:
                - as_of
                - recordings_through
                - counties
                - history_capture_share
                - n_lender_ids
                - purchase_measured
                - investor_lending_measured
                - flips_measured
                - borrowers_measured
                - takebacks_measured
                - counties_measured
                - dated
                - n_parcels_uncovered
              additionalProperties: false
            - type: 'null'
          description: >-
            The lender registry of this market. Null when this market has no
            published lender tables: every /v1/lenders route then answers 422
            lenders_unavailable.
      required:
        - market
        - state
        - counties
        - bbox
        - data_end
        - build_run_id
        - registry_run
        - registry_version
        - dataset_version
        - loaded_at
        - metro_buy_to_resale_ratio
        - universe_kind
        - universe_zips
        - point_tolerance_miles
        - n_parcels
        - listings_data_end
        - agents_data_end
        - wholesale_as_of
        - str_as_of
        - str
        - auction_counted
        - parcel_as_of
        - address_as_of
        - parcel
        - lenders
      additionalProperties: false
      description: >-
        One loaded market: the area its counts cover (universe_kind), the
        counties it lies in, how fresh it is, and its data version.
    Dated:
      type: object
      properties:
        block:
          type: string
          enum:
            - valuation
            - financing
            - liens
            - lenders
          description: >-
            The block of the response that is a snapshot at as_of, not current
            data. The values are valuation (the AVM, equity and LTV), financing
            (open liens and mortgage history), liens (involuntary liens) and
            lenders. The lenders block is the lender registry and every count on
            it, built from the same slice.
        as_of:
          type: string
          description: >-
            The date of the delivery that valued the snapshot, YYYY-MM-DD: the
            same date as meta.coverage[].parcel.financing.as_of for the market.
        reason:
          type: string
          description: >-
            Why the block is dated, in one sentence: the dataset is not in the
            current delivery.
      required:
        - block
        - as_of
        - reason
      additionalProperties: false
      description: >-
        One block of the response that is a dated snapshot. Every response that
        carries a value from a dated block lists it here. A caller that cannot
        use dated data passes require_current: true. The API then answers 422
        dated_refused instead.
    OwnerProfile:
      type: object
      properties:
        as_of:
          type: string
          description: The weekly delivery that carries the profile.
        properties_count:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Properties the owner holds across the country, as BatchData links
            them; null when the delivery does not record it.
        total_equity:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            Estimated equity across the owner's properties; null when the
            delivery does not record it.
        total_estimated_value:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            Estimated value across the owner's properties; null when the
            delivery does not record it.
        mortgages_count:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Open mortgages across the owner's properties; null when the delivery
            does not record it.
        mortgages_total_balance:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            Estimated balance of those mortgages; null when the delivery does
            not record it.
        average_purchase_price:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            Average purchase price across the owner's properties; null when the
            delivery does not record it.
        average_year_built:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Average year built across the owner's properties; null when the
            delivery does not record it.
      required:
        - as_of
        - properties_count
        - total_equity
        - total_estimated_value
        - mortgages_count
        - mortgages_total_balance
        - average_purchase_price
        - average_year_built
      additionalProperties: false
      description: >-
        The owner's portfolio as the weekly delivery describes it in the Owner
        Profile block. It carries counts, equity and mortgages across every
        property the owner holds, not only this parcel.
    StrCoverageJurisdiction:
      type: object
      properties:
        name:
          type: string
          description: >-
            The jurisdiction, upper case, for example SCOTTSDALE, PHOENIX or
            HOUSTON: the city-limit polygon the parcel falls in, never the
            postal city. The same value as
            short_term_rental.coverage.jurisdiction on the parcels inside it.
        regime:
          anyOf:
            - type: string
              enum:
                - REQUIRED
                - NOT_REQUIRED
                - UNKNOWN
              description: >-
                The city's rule on a short-term rental licence or permit.
                REQUIRED: an ordinance requires one. NOT_REQUIRED: the city has
                no requirement, so no roll exists. UNKNOWN: the survey did not
                cover the city. Null when the market row does not record it.
            - type: 'null'
          description: >-
            Null when the market row does not record it. The city's rule on a
            short-term rental licence or permit. REQUIRED: an ordinance requires
            one. NOT_REQUIRED: the city has no requirement, so no roll exists.
            UNKNOWN: the survey did not cover the city. Null when the market row
            does not record it.
        coverage_reason:
          anyOf:
            - type: string
              enum:
                - LOADED_SERVED
                - LOADED_UNVALIDATED
                - LOADED_COUNTS_ONLY
                - REQUIRED_NOT_PUBLISHED
                - NO_REQUIREMENT
                - NOT_SURVEYED
              description: >-
                Why parcels of this jurisdiction carry, or do not carry, a
                short-term rental block. LOADED_SERVED: the city's roll is on
                file, matched to parcels and served, so every parcel inside
                carries a block, NONE when it has no record. LOADED_UNVALIDATED:
                the roll is on file and matched, but without a spot check, so
                the block is present with status null and coverage.served false.
                LOADED_COUNTS_ONLY: the roll is on file for counts only, because
                no parcel match is possible for the file, so no block. No block
                for REQUIRED_NOT_PUBLISHED (licence required, no roll
                published), NO_REQUIREMENT (no licence required) or NOT_SURVEYED
                (outside the survey). Null when the market row does not record
                it.
            - type: 'null'
          description: >-
            Null when the market row does not record it. Why parcels of this
            jurisdiction carry, or do not carry, a short-term rental block.
            LOADED_SERVED: the city's roll is on file, matched to parcels and
            served, so every parcel inside carries a block, NONE when it has no
            record. LOADED_UNVALIDATED: the roll is on file and matched, but
            without a spot check, so the block is present with status null and
            coverage.served false. LOADED_COUNTS_ONLY: the roll is on file for
            counts only, because no parcel match is possible for the file, so no
            block. No block for REQUIRED_NOT_PUBLISHED (licence required, no
            roll published), NO_REQUIREMENT (no licence required) or
            NOT_SURVEYED (outside the survey). Null when the market row does not
            record it.
        served:
          type: boolean
          description: >-
            True when parcels inside this jurisdiction carry a measured status
            (LICENSED, PENDING, EXPIRED or NONE). False when they carry a block
            with status null, or no block at all: coverage_reason says why.
        snapshot_only:
          type: boolean
          description: >-
            True when the roll came from a single pull and has no weekly feed
            (Fountain Hills, Cave Creek). Its dates are the pull date, and the
            API never sets feed_stale.
        licence_start:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The earliest possible date of a licence in this jurisdiction, the
            day its ordinance took effect, YYYY-MM-DD, for example 2025-10-01
            for Houston. Null when unknown, or when the city requires no
            licence.
        snapshot_date:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The snapshot the served blocks read, YYYY-MM-DD:
            short_term_rental.data_as_of on every parcel inside. Null when no
            roll is on file.
        feed_stale:
          type: boolean
          description: >-
            True when this week's feed failed the freshness rule and the API
            serves the last good snapshot instead. Every block inside then
            carries coverage.feed_stale true. False otherwise.
        sources:
          type: array
          items:
            $ref: '#/components/schemas/StrCoverageSource'
          description: >-
            The city files behind this jurisdiction, each with its newest load
            date and its stale flag. Empty when no roll is on file.
        n_licensed:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Parcels inside with status LICENSED on this snapshot. Null when no
            roll is on file.
        n_pending:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Parcels inside with status PENDING. Null when no roll is on file.
        n_expired:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Parcels inside with status EXPIRED. Null when no roll is on file.
        n_advertised:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Parcels the city lists as advertised without a licence, Scottsdale
            only. The API counts them and never serves them as a status. Null
            when the city publishes no such list.
        share_unmatched:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            The share of the city's records that matched no parcel, 0 to 1, for
            example 0.04. Null when no roll is on file.
        share_assumed:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            The share of attributed parcels with attribution_basis ASSUMED, 0 to
            1. ASSUMED means the attribution has no date, no name and no regime
            bound. Null when no roll is on file.
      required:
        - name
        - regime
        - coverage_reason
        - served
        - snapshot_only
        - licence_start
        - snapshot_date
        - feed_stale
        - sources
        - n_licensed
        - n_pending
        - n_expired
        - n_advertised
        - share_unmatched
        - share_assumed
      additionalProperties: false
      description: >-
        One city of the market in the short-term rental build. It says if the
        licence roll is on file and served, how fresh it is, and what it counts.
        It explains a null short_term_rental block on a parcel: the block is
        null where the API does not serve the jurisdiction.
    ParcelCoverage:
      type: object
      properties:
        parcel_as_of:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The deed data end that the parcel layer build used, YYYY-MM-DD.
        n_parcels:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Parcels in the layer for this market.
        sale_mortgage_measured:
          type: boolean
          description: >-
            True when the delivery records a purchase mortgage on at least one
            priced last sale in five of the market. Then cash_sale_proxy, the
            sale.cash_sale filter and the cash-buyer quicklist are measured.
            False below that bar, as in the 2026 deliveries, which carry the
            column empty. Then cash_sale_proxy is null on every parcel, and the
            filter and the quicklist answer 422 cash_sale_unavailable.
        financing:
          anyOf:
            - type: object
              properties:
                as_of:
                  anyOf:
                    - type: string
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The date of the delivery that valued the financing, lien and
                    valuation slice, YYYY-MM-DD.
                dated:
                  type: boolean
                  description: >-
                    True while the Recorder & Mortgage and AVM datasets are not
                    in the current delivery, so the slice stays at as_of. The
                    API then stamps every value from the slice in meta.dated[].
                dated_reason:
                  description: Why the slice is dated.
                  type:
                    - string
                    - 'null'
                n_parcels:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels with a row in the slice.
                n_with_open_lien:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels with at least one open lien at as_of.
                n_free_and_clear:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels with zero open liens at as_of.
                n_avm:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels with an AVM at as_of.
                n_involuntary:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels with an involuntary lien at as_of.
                n_lenders:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Distinct raw lender spellings over the two lien tables, not
                    registry ids. For registry ids, read
                    meta.coverage[].lenders.n_lender_ids.
              required:
                - as_of
                - dated
                - dated_reason
                - n_parcels
                - n_with_open_lien
                - n_free_and_clear
                - n_avm
                - n_involuntary
                - n_lenders
              additionalProperties: false
            - type: 'null'
          description: The financing slice. Null when this market has none.
        permits:
          anyOf:
            - type: object
              properties:
                as_of:
                  anyOf:
                    - type: string
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The effective date of the loaded permit snapshot,
                    YYYY-MM-DD.
                n_permits:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Permits served for this market.
                n_parcels:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels with at least one permit.
                n_unmatched:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Permits in the county file that landed on no parcel of the
                    market, so the API does not serve them.
                jurisdictions:
                  anyOf:
                    - type: array
                      items:
                        type: object
                        properties:
                          jurisdiction:
                            type:
                              - string
                              - 'null'
                          n_permits:
                            anyOf:
                              - type: integer
                                minimum: -9007199254740991
                                maximum: 9007199254740991
                              - type: 'null'
                          last_issue_date:
                            anyOf:
                              - type: string
                                description: Calendar date, YYYY-MM-DD.
                              - type: 'null'
                          windows_measured:
                            description: >-
                              True when the jurisdiction issued a permit in the
                              12 months before as_of. False when it did not: its
                              feed is stale, so its parcels carry null 24-month
                              and 36-month windows. The rule applies in every
                              market. Read those null windows (n_permits_24m,
                              n_open_permits_12m, major_work_36m, tags_24m,
                              job_value_24m) as unmeasured, not as permit-free.
                              The negative permit filters of the search leave
                              such parcels out. Null only on a coverage row
                              built before the flag existed.
                            type:
                              - boolean
                              - 'null'
                        required:
                          - jurisdiction
                          - n_permits
                          - last_issue_date
                          - windows_measured
                        additionalProperties: false
                    - type: 'null'
                  description: >-
                    The issuing jurisdictions, largest first, each with its
                    permit count, its newest issue date and its windows_measured
                    flag.
              required:
                - as_of
                - n_permits
                - n_parcels
                - n_unmatched
                - jurisdictions
              additionalProperties: false
            - type: 'null'
          description: The permit snapshot. Null when this market has none.
        owner_profile:
          anyOf:
            - type: object
              properties:
                as_of:
                  anyOf:
                    - type: string
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The date of the delivery the Owner Profile block comes from,
                    YYYY-MM-DD.
                n_parcels:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels carrying a profile.
                n_multi:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels whose owner holds two or more properties.
                n_portfolio_5:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels whose owner holds five or more.
              required:
                - as_of
                - n_parcels
                - n_multi
                - n_portfolio_5
              additionalProperties: false
            - type: 'null'
          description: The Owner Profile block. Null when this market has none.
        history:
          anyOf:
            - type: object
              properties:
                first_week:
                  anyOf:
                    - type: string
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The first weekly file the history lake replayed (the
                    baseline FULL).
                last_week:
                  anyOf:
                    - type: string
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: The last weekly file replayed.
                zips:
                  anyOf:
                    - type: array
                      items:
                        type: string
                    - type: 'null'
                  description: >-
                    The ZIP codes the history lake covers. A parcel outside them
                    has no history: `GET /v1/properties/{id}/history` answers
                    422 history_unavailable and the history block is null.
                n_parcels:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels observed in the ZIP set.
                n_events:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Typed events on record.
                n_weeks:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Weekly files replayed.
                domains:
                  anyOf:
                    - type: object
                      propertyNames:
                        type: string
                      additionalProperties:
                        type: object
                        properties:
                          first_week:
                            anyOf:
                              - type: string
                                description: Calendar date, YYYY-MM-DD.
                              - type: 'null'
                          last_week:
                            anyOf:
                              - type: string
                                description: Calendar date, YYYY-MM-DD.
                              - type: 'null'
                          n_events:
                            anyOf:
                              - type: integer
                                minimum: -9007199254740991
                                maximum: 9007199254740991
                              - type: 'null'
                        required:
                          - first_week
                          - last_week
                          - n_events
                        additionalProperties: false
                    - type: 'null'
                  description: >-
                    Per domain, the weeks the lake covers it. Valuation and
                    financing end at the financing slice date, financing.as_of.
                    The rest run to last_week.
              required:
                - first_week
                - last_week
                - zips
                - n_parcels
                - n_events
                - n_weeks
                - domains
              additionalProperties: false
            - type: 'null'
          description: The history lake. Null when this market has none.
      required:
        - parcel_as_of
        - n_parcels
        - sale_mortgage_measured
        - financing
        - permits
        - owner_profile
        - history
      additionalProperties: false
      description: >-
        What the parcel products cover in one market. The parts are the parcel
        layer, the dated financing slice, the permit snapshot, the Owner Profile
        block and the history lake. Each carries its as-of date and counts.
    StrCoverageSource:
      type: object
      properties:
        source:
          type: string
          description: >-
            The source code of one city file, for example S1 (the Scottsdale
            licensed roll), P1 (the Phoenix active permits layer) or COH (the
            Houston registry).
        snapshot_date:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The date of the newest load of this source, YYYY-MM-DD. Null before
            the first load of this source.
        stale:
          type: boolean
          description: >-
            True when the newest load failed the freshness rule and the API
            still serves the previous snapshot. A load fails the rule when the
            count moved more than 30 percent, or when its newest date is more
            than 14 days old.
      required:
        - source
        - snapshot_date
        - stale
      additionalProperties: false
      description: >-
        One city file behind a jurisdiction's short-term rental data: the date
        of its newest load, and if that load is stale.
  headers:
    ETag:
      description: >-
        The entity tag of the answer, derived from the dataset version of the
        markets in the response and from the representation, not from the body.
        It moves only when a refresh rebuilds the tables of a market. On a JSON
        route, send it back as If-None-Match, and an unchanged dataset answers
        304 with no body. The API streams an export whatever the tag. GET
        /v1/dataset runs no query, so it is the lowest-cost place to send the
        tag. On every 2xx and the 304, never on an error.
      schema:
        type: string
    X-Request-Id:
      description: >-
        The id of this call. The edge mints it and also sends it as zp-rid, the
        gateway's own name for it. The API keys its log line for the call on it,
        and every error body repeats it as request_id. Log it on every response,
        not only on errors. A refusal the gateway answers itself carries zp-rid
        and request_id alone. Those refusals are a 401, a 403 quota_exceeded and
        a 429 at the limit of the plan.
      schema:
        type: string
    X-Rows:
      description: >-
        How many rows the body carries: data.length on a list, 1 on a single
        record. The size of the body, not a charge. Absent on a streamed export,
        whose count the API knows only when the stream ends, and on a 304.
      schema:
        type: integer
        minimum: 0
    X-Dataset-Version:
      description: >-
        The dataset version of every market in the response, as market=version
        pairs joined by commas (phx=1788469819 for one market). The header
        carries one pair per loaded market. The figures are the same as
        meta.coverage[].dataset_version, and you can read them without parsing
        the body. A version moves only when a refresh rebuilds the tables of the
        market, so fold the label into cache keys. On every 2xx and the 304,
        never on an error. Absent when the answer names no market: an empty
        deployment, or a GET /v1/coverage lookup outside every market.
      schema:
        type: string
    X-Data-End:
      description: >-
        The last deed date of every market in the response, as market=YYYY-MM-DD
        pairs joined by commas (phx=2026-08-12 for one market). The header
        carries one pair per loaded market. The dates are the same as
        meta.coverage[].data_end. On every 2xx and the 304, never on an error.
        Absent when the answer names no market: an empty deployment, or a GET
        /v1/coverage lookup outside every market.
      schema:
        type: string
    X-Credits-Charged:
      description: >-
        The origin sets this header: the credits this response cost. It is 0
        when the account already unlocked every record on it. The plans page of
        the documentation site says what counts.
      schema:
        type: integer
        minimum: 0
    X-Credits-Remaining:
      description: >-
        The edge sets this header: the credits left in the billing period after
        this response, recent to within a minute. It is negative on a plan with
        overage, down to its ceiling. Absent on Enterprise.
      schema:
        type: integer
    Retry-After:
      description: >-
        Whole seconds to wait before you retry, never below 1. On a 429, the
        seconds until the spent bucket refills. On a 503, 1 for pool_saturated
        and 5 for ledger_unavailable, and none for database_unavailable. On a
        403 plan_limit for the name-search day cap, the seconds to the next UTC
        midnight, when the cap resets. The other plan limits carry none. The
        body repeats it as retry_after on the 429, the ledger refusal and the
        day cap.
      schema:
        type: integer
        minimum: 1
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API key from the developer console (starts with zpka_). Create one at
        https://developers.investorlift.com/get-a-key.

````

## Related topics

- [Search parcels by location, filters and quicklists](/api-reference/properties/search-parcels-by-location-filters-and-quicklists.md)
- [New construction near here](/guides/walkthroughs/new-construction.md)
- [The twenty-six tools](/mcp/tools.md)
- [The parcel search row](/api-reference/objects/parcel-search-row.md)
- [Find a parcel](/api-reference/endpoints/properties-resolve.md)
