> ## 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 the parcels of the lean set by location, filters and quicklists

> Search the parcels of a place by the filter groups and the quicklists, one page or the count.

This route serves the lean set under `/v3/properties/search`. See [The lean dataset](/api-reference/lean) for the tier rules, and [Quicklists](/guides/concepts/quicklists) for every quicklist with its predicate.


## OpenAPI

````yaml POST /v3/properties/search
openapi: 3.1.0
info:
  title: God Mode API
  version: 1.16.0
  description: >-
    You have a house to sell, usually a wholesale contract. You want **the
    investors who buy houses like this one, from county deed records**. This API
    reads those records for each served state and serves the buyers: the
    organizations behind the deeds, their people, the agents, the lenders and
    the listings. On every response, `meta.build.states[]` lists the served
    states and the publish behind each.


    **Deals** are the flagged purchases of the deed cut: a sale at arm's length
    that the rules read as an investment. **Buyers** are the organizations
    behind them: one organization for the entities of a registry, with the
    people it files. **Lenders** are the organizations that hold the loans on
    those deals, keyed through the same registry.


    The documentation site at https://developers.investorlift.com carries the
    guides, the walkthroughs, the error catalogue.
    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.** The buyers of one Scottsdale ZIP code since 2024, the most
    purchases first:


    ```

    GET https://api.investorlift.com/v3/buyers?zip=85251&from=2024-01-01&limit=3

    Authorization: Bearer zpka_...

    ```


    **Conventions.** Responses are `{ data, meta }`. Lists add `page` (an opaque
    cursor). A list parameter takes commas or repeated keys. Dates are
    YYYY-MM-DD. The ids are the ids of the files. An organization is the state,
    a colon and its registry number (`AZ:L17142520`). A person is `person:` and
    12 hex characters, and an agent is the state, `:agt:` and 12 hex characters.
    A deal is 32 hex characters.


    Money is whole dollars. It is null, never 0, when the deed carries no price.
    Coordinates are WGS84. A place is a ZIP list (`zip`), a point and radius
    (`lat`, `lng`, `radius_miles`) or a viewport (`bbox=west,south,east,north`).
    A parcel (`property_id`) and an address with its ZIP are places too.


    Every operation carries `x-credits`, its price in credits on the public
    tier. `charge` is null at 0 credits. Otherwise `kind` names the deal,
    investor or property (a parcel) that costs 1 credit when new to your
    account. `base` is the credits a call costs before them. `contract: true`
    marks a route sold by contract.


    Every operation also carries `x-raises`, the problem codes it can answer,
    sorted. Each problem response of the operation lists and shows the codes of
    its status alone. The list includes the codes the gateway answers on its
    own.


    This host does not serve the name of a person, a licence, a phone, an email,
    a website or a mailing address. It serves the organizations, the deals, the
    buyers, the properties, the places, the listings and the lenders.


    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 header `X-Dataset-Version` changes only when a state is
    published again. Use it in cache keys, or poll `GET /v3/build`.



    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: lean
    x-group: Lean set
    description: >-
      The served set, under `/v3`: who buys houses, from the state business
      registry, the deeds, the listings and the loans. The routes serve a name
      search, the organizations, the people, the agents, the deals and the
      buyers. They serve the properties, the places, the listings and the
      lenders too. Two probes serve the coverage and the build of each served
      state.
externalDocs:
  description: >-
    The documentation site: the guides, the walkthroughs and the error
    catalogue.
  url: https://developers.investorlift.com
paths:
  /v3/properties/search:
    post:
      tags:
        - lean
      summary: Search the parcels of the lean set by location, filters and quicklists
      description: >-
        The parcels of a place that match the filter groups and the quicklists,
        one page. The body names a ZIP list, a county list, a point, a viewport
        or a parcel. Each row has the parcel, the attributes of the roll and the
        blocks the datasets name: owner, sale, listing, valuation, financing,
        portfolio and quicklists.


        Use it to build a list of parcels by an owner situation, an equity
        position or a listing state. The quicklists guide lists every quicklist
        with its predicate. The count_only flag serves the count alone.


        A call costs 0 credits.


        [Quicklists](https://developers.investorlift.com/guides/concepts/quicklists).
      operationId: searchLeanParcels
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LeanParcelSearchRequest'
      responses:
        '200':
          description: >-
            One page of the parcels that match the location, the filters and the
            quicklists, in the requested order, with the cursor of the next
            page. With count_only the body has no row and summary.total carries
            the count.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/LeanParcelSearchRow'
                    description: The rows of this page.
                  page:
                    $ref: '#/components/schemas/Page'
                  meta:
                    $ref: '#/components/schemas/LeanMeta'
                  summary:
                    $ref: '#/components/schemas/LeanParcelSearchSummary'
                required:
                  - data
                  - page
                  - meta
                  - summary
                additionalProperties: false
                description: >-
                  One page of the parcels that match the location, the filters
                  and the quicklists, in the requested order, with the cursor of
                  the next page. With count_only the body has no row and
                  summary.total carries the count.
              example:
                data:
                  - property_id: 0002abe5e1541497279888693bdcb965
                    state: AZ
                    distance_miles: null
                    parcel:
                      line: 6747 E Thomas Rd
                      unit: null
                      city: Scottsdale
                      zip: '85251'
                      county_fips: '04013'
                      apn: 129-03-014
                      latitude: 33.47984
                      longitude: -111.935069
                      address_held_back: null
                      location_radius_m: null
                      bedrooms: null
                      bathrooms: null
                      living_area_sqft: 8223
                      year_built: 2008
                    attributes:
                      property_type_category: Commercial
                      property_type_detail: >-
                        Neighborhood Shopping Center, Strip Mall or Enterprise
                        Zone
                      segment: OTHER
                      land_use_code: C10
                      vacant: false
                      year_built: 2008
                      effective_year_built: 2008
                      living_area_sqft: 8223
                      building_sqft: 8223
                      bedrooms: null
                      bathrooms: null
                      full_bathrooms: null
                      partial_bathrooms: null
                      stories: 1
                      garage_spaces: null
                      pool: null
                      buildings: 1
                      units: 10
                      construction_type: Wood
                      lot_sqft: 34796
                      lot_acres: 0.799
                      zoning_code: C-N
                      assessed_total: 446781
                      assessed_land: null
                      assessed_improvement: null
                      assessment_year: 2027
                      market_value_total: 2978540
                      market_value_year: 2027
                      tax_amount: 17017
                      tax_year: 2025
                      tax_delinquent_year: null
                      tax_exemptions: null
                    owner:
                      n_owners: 1
                      names:
                        - Deerwood Strategic Partners Ll
                      is_company: true
                      is_trust: false
                      is_government: false
                      ownership_rights: Limited Liability Company
                      status_type: Company Owned
                      ownership_start_date: '2020-12-18'
                      length_of_residence_months: 69
                      owner_occupied: false
                      absentee: true
                      mailing:
                        line: 3720 S Susan St Ste 100
                        city: Santa Ana
                        state: CA
                        zip: '92704'
                        hash: 2f3be280dcbfc7859113d2238e844cb9
                      mailing_out_of_state: true
                      last_purchase: null
                      last_deed:
                        position: 1
                        sale_date: '2020-12-12'
                        document_type: Deed
                      purchase_match: none
                      purchase_match_strength: none
                      deed_match: exact
                      deed_match_strength: strong
                      acquisition_basis: transfer
                      held_since: '2020-12-12'
                      held_since_basis: transfer_deed
                      months_held: 69.4
                    sale:
                      n_purchases: 0
                      last_purchase: null
                      last_deed:
                        sale_date: '2020-12-12'
                        document_type: Deed
                    listing: null
                    valuation:
                      avm_value: 3408779
                      avm_low: 2727023
                      avm_high: 4090534
                      avm_confidence: 80
                      avm_as_of: '2026-04-08'
                      equity_balance: 3408779
                      equity_percent: 100
                      ltv: 0
                      as_of: '2026-06-25'
                    financing:
                      open_lien_count: 0
                      open_lien_balance: null
                      first_lien_rate: null
                      first_lien_lender_org_id: null
                      has_heloc: false
                      free_and_clear: true
                      involuntary_lien_count: 0
                      last_mortgage_recording_date: '2013-11-05'
                      last_mortgage_amount: 592400
                      last_mortgage_lender_org_id: AZ:00765325
                      last_mortgage_lender_tags:
                        - bank
                        - institution
                      as_of: '2026-06-25'
                    portfolio:
                      n_same_owner_parcels: 3
                    quicklists:
                      - absentee-owner
                      - out-of-state-owner
                      - corporate-owned
                      - free-and-clear
                      - high-equity
                  - property_id: 0004b0ef8293d103d6e5aed31d7c50d4
                    state: AZ
                    distance_miles: null
                    parcel:
                      line: 4610 N 68th St UNIT 455
                      unit: '455'
                      city: Scottsdale
                      zip: '85251'
                      county_fips: '04013'
                      apn: 173-35-583
                      latitude: 33.503559
                      longitude: -111.936362
                      address_held_back: null
                      location_radius_m: null
                      bedrooms: 1
                      bathrooms: 1
                      living_area_sqft: 702
                      year_built: 1974
                    attributes:
                      property_type_category: Residential
                      property_type_detail: Condominium Unit
                      segment: CONDO_TH
                      land_use_code: R5
                      vacant: true
                      year_built: 1974
                      effective_year_built: 1974
                      living_area_sqft: 702
                      building_sqft: 702
                      bedrooms: 1
                      bathrooms: 1
                      full_bathrooms: 1
                      partial_bathrooms: null
                      stories: 1
                      garage_spaces: 1
                      pool: null
                      buildings: 1
                      units: 1
                      construction_type: Frame
                      lot_sqft: 78
                      lot_acres: 0.002
                      zoning_code: M-H
                      assessed_total: 24520
                      assessed_land: null
                      assessed_improvement: null
                      assessment_year: 2027
                      market_value_total: 245200
                      market_value_year: 2027
                      tax_amount: 412
                      tax_year: 2025
                      tax_delinquent_year: null
                      tax_exemptions: null
                    owner:
                      n_owners: 1
                      names: []
                      is_company: false
                      is_trust: true
                      is_government: false
                      ownership_rights: Trustee
                      status_type: Company Owned
                      ownership_start_date: null
                      length_of_residence_months: null
                      owner_occupied: false
                      absentee: true
                      mailing: null
                      mailing_out_of_state: false
                      last_purchase: null
                      last_deed:
                        position: 1
                        sale_date: '1997-03-13'
                        document_type: Intra-Family Transfer
                      purchase_match: none
                      purchase_match_strength: none
                      deed_match: subset
                      deed_match_strength: strong
                      acquisition_basis: transfer
                      held_since: '1997-03-13'
                      held_since_basis: transfer_deed
                      months_held: 354.4
                    sale:
                      n_purchases: 0
                      last_purchase: null
                      last_deed:
                        sale_date: '1997-03-13'
                        document_type: Intra-Family Transfer
                    listing: null
                    valuation:
                      avm_value: 241651
                      avm_low: 190904
                      avm_high: 292397
                      avm_confidence: 79
                      avm_as_of: '2026-04-08'
                      equity_balance: 241651
                      equity_percent: 100
                      ltv: 0
                      as_of: '2026-06-25'
                    financing:
                      open_lien_count: 0
                      open_lien_balance: null
                      first_lien_rate: null
                      first_lien_lender_org_id: null
                      has_heloc: false
                      free_and_clear: true
                      involuntary_lien_count: 0
                      last_mortgage_recording_date: null
                      last_mortgage_amount: null
                      last_mortgage_lender_org_id: null
                      last_mortgage_lender_tags: []
                      as_of: '2026-06-25'
                    portfolio:
                      n_same_owner_parcels: 2
                    quicklists:
                      - absentee-owner
                      - in-state-absentee
                      - trust-owned
                      - vacant
                      - long-hold
                      - free-and-clear
                      - high-equity
                      - tired-landlord
                  - property_id: 0017d12fed946cc99af90fcda0328729
                    state: AZ
                    distance_miles: null
                    parcel:
                      line: 4532 N Evans Dr
                      unit: null
                      city: Scottsdale
                      zip: '85251'
                      county_fips: '04013'
                      apn: 172-12-093
                      latitude: 33.502971
                      longitude: -111.949647
                      address_held_back: null
                      location_radius_m: null
                      bedrooms: 3
                      bathrooms: 5
                      living_area_sqft: 3378
                      year_built: 2022
                    attributes:
                      property_type_category: Residential
                      property_type_detail: Single Family
                      segment: SFR
                      land_use_code: R2
                      vacant: false
                      year_built: 2022
                      effective_year_built: 2022
                      living_area_sqft: 3378
                      building_sqft: 3378
                      bedrooms: 3
                      bathrooms: 5
                      full_bathrooms: 5
                      partial_bathrooms: 1
                      stories: 2
                      garage_spaces: 2
                      pool: null
                      buildings: 1
                      units: 1
                      construction_type: Frame
                      lot_sqft: 5762
                      lot_acres: 0.132
                      zoning_code: PUD
                      assessed_total: 307430
                      assessed_land: null
                      assessed_improvement: null
                      assessment_year: 2027
                      market_value_total: 3074300
                      market_value_year: 2027
                      tax_amount: 13173
                      tax_year: 2025
                      tax_delinquent_year: null
                      tax_exemptions: null
                    owner:
                      n_owners: 1
                      names:
                        - SAVIO INVESTMENTS LLC
                      is_company: true
                      is_trust: false
                      is_government: false
                      ownership_rights: Limited Partnership
                      status_type: Company Owned
                      ownership_start_date: '2023-05-26'
                      length_of_residence_months: 40
                      owner_occupied: false
                      absentee: true
                      mailing:
                        line: 9245 Silverwood Ct
                        city: Granite Bay
                        state: CA
                        zip: '95746'
                        hash: 61fc1dee903941655a8b28bba7fac6a5
                      mailing_out_of_state: true
                      last_purchase:
                        deal_id: d80dca24f02509bac4582fde1128c44f
                        sale_date: '2023-05-26'
                        price: 3050000
                      last_deed:
                        position: 1
                        sale_date: '2023-05-26'
                        document_type: Warranty Deed
                      purchase_match: exact
                      purchase_match_strength: strong
                      deed_match: exact
                      deed_match_strength: strong
                      acquisition_basis: purchase
                      held_since: '2023-05-26'
                      held_since_basis: purchase_deed
                      months_held: 40
                    sale:
                      n_purchases: 2
                      last_purchase:
                        deal_id: d80dca24f02509bac4582fde1128c44f
                        sale_date: '2023-05-26'
                        price: 3050000
                        price_per_sqft: 902.9
                      last_deed:
                        sale_date: '2023-05-26'
                        document_type: Warranty Deed
                    listing:
                      listing_id: 597daebd77d6d970a606205715d322ad
                      status: SOLD
                      status_raw: Sold
                      off_market_reason: null
                      on_market: false
                      is_rental: false
                      list_price: 3475000
                      listed_on: '2023-04-03'
                      off_market_on: null
                      sold_on: '2023-05-26'
                      days_on_market: 53
                      price_cut: true
                      n_listings_12m: 0
                      last_off_market_on: null
                    valuation:
                      avm_value: 3547405
                      avm_low: 3015294
                      avm_high: 4079515
                      avm_confidence: 85
                      avm_as_of: '2026-04-08'
                      equity_balance: 3547405
                      equity_percent: 100
                      ltv: 0
                      as_of: '2026-06-25'
                    financing:
                      open_lien_count: 0
                      open_lien_balance: null
                      first_lien_rate: null
                      first_lien_lender_org_id: null
                      has_heloc: false
                      free_and_clear: true
                      involuntary_lien_count: 0
                      last_mortgage_recording_date: null
                      last_mortgage_amount: null
                      last_mortgage_lender_org_id: null
                      last_mortgage_lender_tags: []
                      as_of: '2026-06-25'
                    portfolio:
                      n_same_owner_parcels: 1
                    quicklists:
                      - absentee-owner
                      - out-of-state-owner
                      - corporate-owned
                      - price-cut-listing
                      - free-and-clear
                      - high-equity
                page:
                  next_cursor: >-
                    eyJ2IjoxLCJydW4iOiJ8bGVhbi1BWjE3OTIwOTA3NjQtQ0ExNzkwMjE1MTkwLUZMMTc5MDI2MjY4Mi1UWDE3OTAyNDgyMTMiLCJxIjoiZDdjOTBiN2E2MWZlZGRkN2M3NTRlZjdkM2FjNmRlZTlhMmM5NTMwYWI0MmVlNTU3OTg5NDk3NTc3YTdiNTI4MSIsImsiOlsiMDAxN2QxMmZlZDk0NmNjOTlhZjkwZmNkYTAzMjg3MjkiXX0
                  limit: 3
                  returned: 3
                meta:
                  generated_at: '2026-10-15T19:03:25.942Z'
                  geometry:
                    kind: place
                    lat: null
                    lng: null
                    radius_miles: null
                    bbox: null
                    property_id: null
                    address: null
                    zip:
                      - '85251'
                    city: null
                  coverage: []
                  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
                  build:
                    states:
                      - state: AZ
                        build_id: null
                        built_at: '2026-10-15T18:59:20.286Z'
                        published_at: '2026-10-15T19:02:20.805Z'
                        run_id: 1792090764
                        financing_as_of: '2026-06-25'
                        recordings_through: '2026-06-11'
                        financing_source: replay_887
                      - state: CA
                        build_id: null
                        built_at: '2026-09-24T01:58:30.453Z'
                        published_at: '2026-09-24T03:15:56.838Z'
                        run_id: 1790215190
                        financing_as_of: null
                        recordings_through: null
                        financing_source: null
                      - state: FL
                        build_id: 0e5fa9bc
                        built_at: '2026-09-24T15:08:23.506Z'
                        published_at: '2026-09-24T18:59:42.805Z'
                        run_id: 1790262682
                        financing_as_of: null
                        recordings_through: null
                        financing_source: null
                      - state: TX
                        build_id: 775ed08d
                        built_at: '2026-09-24T11:08:10.587Z'
                        published_at: '2026-09-24T13:16:03.157Z'
                        run_id: 1790248213
                        financing_as_of: null
                        recordings_through: null
                        financing_source: null
                summary:
                  total: null
                  datasets:
                    - core
                    - owner
                    - sale
                    - listing
                    - valuation
                    - financing
                    - portfolio
                    - quicklists
                  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'
        '400':
          description: >-
            Bad request (dataset_unavailable, geometry_conflict,
            geometry_required, invalid_cursor, 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: /v3/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: /v3/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: /v3/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: /v3/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    reason: query_changed
                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: /v3/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: /v3/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: /v3/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: /v3/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: /v3/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '403':
          description: Forbidden (payment_overdue, subscription_required)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                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: /v3/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                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: /v3/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: /v3/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: /v3/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: /v3/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: /v3/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, 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: /v3/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                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: /v3/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: /v3/properties/search
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
components:
  schemas:
    LeanParcelSearchRequest:
      type: object
      properties:
        location:
          type: object
          properties:
            zip:
              description: A list of 5-digit ZIPs, at most 60, for example ["85251"].
              minItems: 1
              maxItems: 60
              type: array
              items:
                type: string
                pattern: ^\d{5}$
            county_fips:
              description: A list of county FIPS codes, at most 20, for example ["04013"].
              minItems: 1
              maxItems: 20
              type: array
              items:
                type: string
                pattern: ^\d{5}$
            point:
              description: >-
                A point and a radius. The rows then carry distance_miles, and
                sort distance is the default.
              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:
                  description: >-
                    The radius in miles around the point, 0.25 to 20 (default
                    1).
                  type: number
                  minimum: 0.25
                  maximum: 20
              required:
                - lat
                - lng
              additionalProperties: false
            bbox:
              description: >-
                A viewport as [west, south, east, north] in WGS84 degrees, the
                diagonal at most 40 miles.
              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 of the place index: the search runs around its point
                with radius_miles.
              type: string
              pattern: ^[0-9a-f]{32}$
            radius_miles:
              description: The radius in miles around property_id, 0.25 to 20 (default 1).
              type: number
              minimum: 0.25
              maximum: 20
          additionalProperties: false
          description: >-
            Where to search: a ZIP list, a county list, a point, a viewport or a
            parcel. One of point, bbox and property_id at most, with zip or
            county_fips beside it when you want both.
        filters:
          type: object
          properties:
            general:
              description: The classification of the roll.
              type: object
              properties:
                segment:
                  description: 'Keep these segments of the roll: SFR, CONDO_TH or OTHER.'
                  minItems: 1
                  maxItems: 3
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 64
                property_type_category:
                  description: >-
                    Keep these property type categories of the roll, for example
                    ["Residential"].
                  minItems: 1
                  maxItems: 50
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 64
                property_type_detail:
                  description: >-
                    Keep these property type details of the roll, for example
                    ["Single Family"].
                  minItems: 1
                  maxItems: 50
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 64
                vacant:
                  description: >-
                    True keeps the parcels the roll marks vacant. False keeps
                    the rest.
                  type: boolean
              additionalProperties: false
            building:
              description: The building as the roll gives it.
              type: object
              properties:
                beds:
                  description: The bedrooms.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: integer
                      minimum: 0
                      maximum: 50
                    max:
                      description: The upper bound, included.
                      type: integer
                      minimum: 0
                      maximum: 50
                  additionalProperties: false
                baths:
                  description: The bathrooms, halves allowed.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: number
                    max:
                      description: The upper bound, included.
                      type: number
                  additionalProperties: false
                sqft:
                  description: The living area in square feet.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: integer
                      minimum: 0
                      maximum: 1000000
                    max:
                      description: The upper bound, included.
                      type: integer
                      minimum: 0
                      maximum: 1000000
                  additionalProperties: false
                year_built:
                  description: The year built.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: integer
                      minimum: 1700
                      maximum: 2100
                    max:
                      description: The upper bound, included.
                      type: integer
                      minimum: 1700
                      maximum: 2100
                  additionalProperties: false
                stories:
                  description: The stories.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: number
                    max:
                      description: The upper bound, included.
                      type: number
                  additionalProperties: false
                pool:
                  description: >-
                    True keeps the parcels the roll marks with a pool. False
                    keeps the rest.
                  type: boolean
                garage:
                  description: >-
                    True keeps the parcels with one garage space or more. False
                    keeps the rest.
                  type: boolean
              additionalProperties: false
            lot:
              description: The lot.
              type: object
              properties:
                acres:
                  description: The lot in acres.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: number
                    max:
                      description: The upper bound, included.
                      type: number
                  additionalProperties: false
                sqft:
                  description: The lot in square feet.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                    max:
                      description: The upper bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                  additionalProperties: false
                zoning:
                  description: Keep these zoning codes of the roll.
                  minItems: 1
                  maxItems: 50
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 64
              additionalProperties: false
            owner:
              description: 'The owner of the roll: the facts.'
              type: object
              properties:
                kind:
                  description: Keep these kinds of owner. Several kinds combine with OR.
                  minItems: 1
                  type: array
                  items:
                    type: string
                    enum:
                      - company
                      - trust
                      - government
                      - person
                    description: >-
                      company: a name with a word of an entity, or the rights
                      name a company. trust: a name with a word of a trust, or
                      the rights name a trust. government: a public body.
                      person: an owner row with none of the three.
                owner_occupied:
                  description: True keeps the owner-occupied parcels. False keeps the rest.
                  type: boolean
                absentee:
                  description: >-
                    True keeps the parcels of an absentee owner. False keeps the
                    rest.
                  type: boolean
                mailing_state:
                  description: >-
                    Keep the owners whose mailing address is in one of these
                    states, 2 letters each.
                  minItems: 1
                  maxItems: 60
                  type: array
                  items:
                    type: string
                    pattern: ^[A-Z]{2}$
                out_of_state:
                  description: >-
                    True keeps the owners whose mailing state is another state.
                    False keeps the owners whose mailing state is the state of
                    the parcel.
                  type: boolean
                held_since:
                  description: >-
                    When the hold started: the date of the deed of the basis,
                    else the start date of the roll.
                  type: object
                  properties:
                    min:
                      description: On or after this date, YYYY-MM-DD.
                      type: string
                      format: date
                    max:
                      description: On or before this date, YYYY-MM-DD.
                      type: string
                      format: date
                  additionalProperties: false
                portfolio_count:
                  description: >-
                    The parcels of the state with the same owner key at the same
                    mailing address, this one counted.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: integer
                      minimum: 1
                      maximum: 9007199254740991
                    max:
                      description: The upper bound, included.
                      type: integer
                      minimum: 1
                      maximum: 9007199254740991
                  additionalProperties: false
              additionalProperties: false
            sale:
              description: >-
                The last purchase at arm's length and the last deed of the
                parcel in the deed cut.
              type: object
              properties:
                last_purchase_date:
                  description: The date of the last purchase at arm's length.
                  type: object
                  properties:
                    min:
                      description: On or after this date, YYYY-MM-DD.
                      type: string
                      format: date
                    max:
                      description: On or before this date, YYYY-MM-DD.
                      type: string
                      format: date
                  additionalProperties: false
                last_purchase_price:
                  description: The price of that purchase, whole US dollars.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                    max:
                      description: The upper bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                  additionalProperties: false
                price_per_sqft:
                  description: >-
                    That price over the living area, US dollars for each square
                    foot.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: number
                    max:
                      description: The upper bound, included.
                      type: number
                  additionalProperties: false
                document_type:
                  description: >-
                    Keep these document types of the last deed of any kind, as
                    the county writes them.
                  minItems: 1
                  maxItems: 50
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 64
              additionalProperties: false
            tax:
              description: The assessment and the tax of the roll.
              type: object
              properties:
                assessed_value:
                  description: The assessed value, whole US dollars.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                    max:
                      description: The upper bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                  additionalProperties: false
                market_value:
                  description: The market value of the roll, whole US dollars.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                    max:
                      description: The upper bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                  additionalProperties: false
                tax_amount:
                  description: The tax, whole US dollars.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                    max:
                      description: The upper bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                  additionalProperties: false
                delinquent:
                  description: >-
                    True keeps the parcels with a delinquent tax year on the
                    roll. False keeps the rest.
                  type: boolean
                exemptions:
                  description: >-
                    Keep the parcels whose exemptions of the roll contain one of
                    these words, for example ["Primary"].
                  minItems: 1
                  maxItems: 50
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 64
              additionalProperties: false
            listing:
              description: >-
                The current listing of the parcel: the newest listing, its
                current version.
              type: object
              properties:
                status:
                  description: >-
                    Keep these statuses of the current listing: ACTIVE, PENDING,
                    SOLD or OFF_MARKET.
                  minItems: 1
                  maxItems: 4
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 64
                price:
                  description: The list price of the current listing, whole US dollars.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                    max:
                      description: The upper bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                  additionalProperties: false
                listed_since:
                  description: >-
                    The current listing started on or after this date,
                    YYYY-MM-DD.
                  type: string
                  format: date
                sold_since:
                  description: The current listing sold on or after this date, YYYY-MM-DD.
                  type: string
                  format: date
                is_rental:
                  description: >-
                    True keeps the rental listings. False keeps the sale
                    listings.
                  type: boolean
              additionalProperties: false
            valuation:
              description: >-
                The valuation of the dated slice. A request with this group is a
                dated request.
              type: object
              properties:
                estimated_value:
                  description: >-
                    The AVM of the feed at the date of the slice, whole US
                    dollars.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                    max:
                      description: The upper bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                  additionalProperties: false
                equity_percent:
                  description: The equity as a percent of the AVM.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: number
                    max:
                      description: The upper bound, included.
                      type: number
                  additionalProperties: false
                ltv:
                  description: The loan to value, percent.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: number
                    max:
                      description: The upper bound, included.
                      type: number
                  additionalProperties: false
                equity_balance:
                  description: The equity, whole US dollars.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    max:
                      description: The upper bound, included.
                      type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                  additionalProperties: false
              additionalProperties: false
            financing:
              description: >-
                The open positions and the last recorded mortgage of the dated
                slice. A request with this group is a dated request.
              type: object
              properties:
                open_lien_count:
                  description: The open positions of the parcel.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: integer
                      minimum: 0
                      maximum: 20
                    max:
                      description: The upper bound, included.
                      type: integer
                      minimum: 0
                      maximum: 20
                  additionalProperties: false
                open_lien_balance:
                  description: The sum of the open balances, whole US dollars.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                    max:
                      description: The upper bound, included.
                      type: integer
                      minimum: 0
                      maximum: 9007199254740991
                  additionalProperties: false
                lender:
                  description: >-
                    The lender organization of the last recorded mortgage: an
                    organization id of GET /v3/lenders.
                  type: string
                  pattern: ^[A-Z]{2}:(name:.{1,200}|[A-Z0-9-]{1,40})$
                lender_tag:
                  description: >-
                    Keep the parcels whose last recorded mortgage came from a
                    lender with one of these tags, for example ["person",
                    "hard_money"].
                  minItems: 1
                  type: array
                  items:
                    type: string
                    enum:
                      - government
                      - bank
                      - credit_union
                      - trust
                      - person
                      - hard_money
                      - institution
                    description: >-
                      A reading of the name of the lender, each by its rule in
                      the build. government: a public body. bank: the bank,
                      thrift and charter words. credit_union: a credit union.
                      trust: a trust, an IRA, an estate or a seller carry-back.
                      person: a name that reads as a person. hard_money: the
                      hard-money vocabulary and brands. institution: a servicer,
                      a title company or an association. A tag decides no row: a
                      lender keeps its loans and gets a tag. The list can grow
                      with the rules of the build: a client keeps an unknown
                      tag.
                has_heloc:
                  description: >-
                    True keeps the parcels with an open credit line. False keeps
                    the rest.
                  type: boolean
                free_and_clear:
                  description: >-
                    True keeps the parcels with no open position. False keeps
                    the rest.
                  type: boolean
                last_mortgage_since:
                  description: >-
                    The last recorded mortgage was recorded on or after this
                    date, YYYY-MM-DD.
                  type: string
                  format: date
                interest_rate:
                  description: The rate of the first open position, percent.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: number
                    max:
                      description: The upper bound, included.
                      type: number
                  additionalProperties: false
              additionalProperties: false
            liens:
              description: >-
                The involuntary liens of the dated slice. A request with this
                group is a dated request.
              type: object
              properties:
                involuntary:
                  description: >-
                    True keeps the parcels with an involuntary lien on record.
                    False keeps the rest.
                  type: boolean
                count:
                  description: The involuntary liens on record.
                  type: object
                  properties:
                    min:
                      description: The lower bound, included.
                      type: integer
                      minimum: 0
                      maximum: 20
                    max:
                      description: The upper bound, included.
                      type: integer
                      minimum: 0
                      maximum: 20
                  additionalProperties: false
              additionalProperties: false
          additionalProperties: false
          description: >-
            The filter groups. Every group and every field is optional. The
            groups combine with AND.
        quicklists:
          description: Keep the parcels that match every listed quicklist (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 or
              price-cut-listing. The quicklists guide lists every name with its
              predicate. The API answers 400 quicklist_unavailable to a name it
              does not measure, with what unlocks it.
        any_quicklists:
          description: Keep the parcels that match one listed quicklist or more (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 or
              price-cut-listing. The quicklists guide lists every name with its
              predicate. The API answers 400 quicklist_unavailable to a name it
              does not measure, with what unlocks it.
        not_quicklists:
          description: Keep the 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 or
              price-cut-listing. The quicklists guide lists every name with its
              predicate. The API answers 400 quicklist_unavailable to a name it
              does not measure, with what unlocks it.
        datasets:
          description: >-
            Which blocks each row carries: core, owner, sale, listing,
            valuation, financing, portfolio, quicklists. Default: core, owner,
            sale, listing. The valuation and financing blocks are a dated slice.
            The API answers 400 dataset_unavailable to a name it does not serve.
          minItems: 1
          maxItems: 20
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 32
            description: >-
              Which blocks each row carries: core, owner, sale, listing,
              valuation, financing, portfolio, quicklists. Default: core, owner,
              sale, listing. The valuation and financing blocks are a dated
              slice. The API answers 400 dataset_unavailable to a name it does
              not serve.
        sort:
          type: string
          enum:
            - distance
            - id
            - last_sale_date_desc
            - last_sale_date_asc
            - held_since_desc
            - equity_percent_desc
            - equity_percent_asc
            - listing_price_asc
            - listing_price_desc
            - avm_desc
            - year_built_desc
            - year_built_asc
            - sqft_desc
            - assessed_desc
          description: >-
            The row order. A null value comes last on every sort, and the parcel
            id breaks every tie. distance puts the nearest parcel first and
            needs point or property_id: it is the default with one. id orders by
            the parcel id, the default without a point. last_sale_date_desc and
            last_sale_date_asc order by the last purchase at arm's length,
            held_since_desc by the start of the hold. equity_percent_desc,
            equity_percent_asc and avm_desc read the dated slice.
            listing_price_asc and listing_price_desc order by the list price of
            the current listing. year_built_desc, year_built_asc, sqft_desc and
            assessed_desc order by the roll.
        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 answers the count of the matching parcels in summary.total and
            no rows.
          type: boolean
      required:
        - location
      additionalProperties: false
      description: >-
        The body of POST /v3/properties/search: one location, the filter groups,
        the quicklists, the datasets, the sort, the page and count_only. Every
        field but location is optional.
    LeanParcelSearchRow:
      type: object
      properties:
        property_id:
          type: string
          description: 'The parcel, 32 hex characters: the key to `GET /v3/properties/{id}`.'
        state:
          type: string
          description: The 2-letter state of the parcel.
        distance_miles:
          description: >-
            Miles from the point or the parcel of the request, rounded to 2
            decimals. Null when the request named no point.
          type:
            - number
            - 'null'
        parcel:
          $ref: '#/components/schemas/LeanParcelRef'
        attributes:
          $ref: '#/components/schemas/LeanParcelAttributes'
        owner:
          anyOf:
            - $ref: '#/components/schemas/LeanOwner'
            - type: 'null'
          description: >-
            The owner of the roll beside its last deed. Null when the roll names
            no owner, and when the request did not name the owner dataset.
        sale:
          anyOf:
            - $ref: '#/components/schemas/LeanSearchSale'
            - type: 'null'
          description: >-
            The purchases and the last deeds of the parcel. Null when the
            request did not name the sale dataset.
        listing:
          anyOf:
            - $ref: '#/components/schemas/LeanSearchListing'
            - type: 'null'
          description: >-
            The current listing of the parcel. Null when the parcel has none,
            and when the request did not name the listing dataset.
        valuation:
          anyOf:
            - $ref: '#/components/schemas/LeanSearchValuation'
            - type: 'null'
          description: >-
            The valuation of the dated slice. Null when the slice carries no row
            for the parcel, while the state has no slice, and when the request
            did not name the valuation dataset.
        financing:
          anyOf:
            - $ref: '#/components/schemas/LeanSearchFinancing'
            - type: 'null'
          description: >-
            The financing of the dated slice. Null when the slice carries no row
            for the parcel, while the state has no slice, and when the request
            did not name the financing dataset.
        portfolio:
          anyOf:
            - $ref: '#/components/schemas/LeanSearchPortfolio'
            - type: 'null'
          description: >-
            The portfolio of the owner. Null when the parcel has no owner key
            with a mailing address, and when the request did not name the
            portfolio dataset.
        quicklists:
          anyOf:
            - type: array
              items:
                type: string
            - type: 'null'
          description: >-
            Every quicklist the parcel matches, in the order of the vocabulary.
            Null when the request did not name the quicklists dataset.
      required:
        - property_id
        - state
        - distance_miles
        - parcel
        - attributes
        - owner
        - sale
        - listing
        - valuation
        - financing
        - portfolio
        - quicklists
      description: >-
        One parcel of a search: the parcel block under the listed-address rule
        and the attributes of the roll 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.
    LeanMeta:
      type: object
      properties:
        generated_at:
          type: string
          format: date-time
          description: >-
            When the API produced this response, ISO 8601. It does not change
            the ETag.
        weights:
          description: >-
            The effective match weights of a route that scores a match, one per
            factor, rounded to 4 decimals. Absent on every route of the served
            set.
          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 place that ran, defaults filled and keyed as the query is (see
            MetaGeometry). Present on every route that takes a place: the deals,
            the pins, the cells, the summary, the buyers and the listings. Copy
            it back as the query to repeat the request.
        resolved_from:
          description: >-
            Present when the id in the path was an old id of an earlier build:
            the ids the API followed through the alias table, in order. Store
            the id the response carries.
          type: array
          items:
            type: string
        coverage:
          type: array
          items:
            $ref: '#/components/schemas/Coverage'
          description: >-
            Empty on every route: the served set carries states, not markets,
            and meta.build.states[] lists them.
        dated:
          description: >-
            Absent on every route of the served set: no block of it is a dated
            snapshot.
          type: array
          items:
            $ref: '#/components/schemas/Dated'
        terms:
          type: string
          description: Attribution and data-use terms for the data in this response.
        build:
          type: object
          properties:
            states:
              type: array
              items:
                $ref: '#/components/schemas/LeanBuildState'
              description: Every served state, in state order.
          required:
            - states
          additionalProperties: false
          description: >-
            The publishes behind the response. The ETag and each cursor follow
            the newest publish, so a publish ends every cursor. The rows belong
            to no market of the deed registry, so meta.coverage is empty.
      required:
        - generated_at
        - coverage
        - terms
        - build
      additionalProperties: false
      description: >-
        Response metadata of the lean family: when the API produced it, and the
        publishes behind the rows.
    LeanParcelSearchSummary:
      type: object
      properties:
        total:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The count of the matching parcels when count_only is true. Null on a
            paged request.
        datasets:
          type: array
          items:
            type: string
          description: The datasets the rows carry.
        dated_filters:
          type: array
          items:
            type: string
          description: >-
            The filter groups, the quicklists and the sort of this request that
            read the dated slice. Empty when none does.
      required:
        - total
        - datasets
        - dated_filters
      additionalProperties: false
      description: What the request asked for and, with 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.
    LeanParcelRef:
      type: object
      properties:
        line:
          description: >-
            The street line of the parcel. Null when the parcel has no street
            line, and while the property is listed on the Investorlift
            marketplace: see address_held_back.
          type:
            - string
            - 'null'
        unit:
          description: >-
            The unit. Null when the parcel has none, and while the property is
            listed on the Investorlift marketplace.
          type:
            - string
            - 'null'
        city:
          description: The city. Null when the file carries none.
          type:
            - string
            - 'null'
        zip:
          description: The 5-digit ZIP. Null when the file carries none.
          type:
            - string
            - 'null'
        county_fips:
          description: The county, 5 digits. Null when the file carries none.
          type:
            - string
            - 'null'
        apn:
          description: >-
            The assessor parcel number. Null while the property is listed on the
            Investorlift marketplace: see address_held_back.
          type:
            - string
            - 'null'
        latitude:
          anyOf:
            - type: number
              minimum: -90
              maximum: 90
              description: WGS84 latitude.
            - type: 'null'
          description: >-
            WGS84 latitude of the parcel. An approximate value while the
            property is listed on the Investorlift marketplace: see
            location_radius_m. Null when the parcel has no point.
        longitude:
          anyOf:
            - type: number
              minimum: -180
              maximum: 180
              description: WGS84 longitude.
            - type: 'null'
          description: >-
            WGS84 longitude of the parcel. An approximate value while the
            property is listed on the Investorlift marketplace: see
            location_radius_m. Null when the parcel has no point.
        address_held_back:
          description: >-
            The reason that the API holds the address of the property back. The
            value listed_on_investorlift means that a wholesaler lists the
            property on Investorlift now, and the deed records show no transfer
            after the listing. Then the street line, the unit and the APN are
            null, and the point is approximate. Null for each other property.
          type:
            - string
            - 'null'
        location_radius_m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The radius in metres of the circle to draw around latitude and
            longitude: 1200 while the property is listed on Investorlift. The
            circle always contains the true point. Null when the point is exact,
            and when the row has no point.
        bedrooms:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The bedrooms of the roll. Null when the roll carries none, and while
            the state has no parcel table.
        bathrooms:
          description: >-
            The bathrooms of the roll, halves allowed. Null when the roll
            carries none, and while the state has no parcel table.
          type:
            - number
            - 'null'
        living_area_sqft:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The living area of the roll in square feet. Null when the roll
            carries none, and while the state has no parcel table.
        year_built:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The year built of the roll. Null when the roll carries none, and
            while the state has no parcel table.
      required:
        - line
        - unit
        - city
        - zip
        - county_fips
        - apn
        - latitude
        - longitude
        - address_held_back
        - location_radius_m
        - bedrooms
        - bathrooms
        - living_area_sqft
        - year_built
      additionalProperties: false
      description: >-
        The parcel of a deal or a listing, from the place index, under the
        listed-address rule, with four home facts of the roll.
    LeanParcelAttributes:
      type: object
      properties:
        property_type_category:
          description: >-
            The property type category of the roll. Null when the roll carries
            none.
          type:
            - string
            - 'null'
        property_type_detail:
          description: >-
            The property type detail of the roll. Null when the roll carries
            none.
          type:
            - string
            - 'null'
        segment:
          description: >-
            The segment of the parcel from the type detail: SFR, CONDO_TH or
            OTHER. Null when the roll carries none.
          type:
            - string
            - 'null'
        land_use_code:
          description: The land use code of the roll. Null when the roll carries none.
          type:
            - string
            - 'null'
        vacant:
          description: >-
            True when the roll marks the parcel vacant. Null when the roll
            carries none.
          type:
            - boolean
            - 'null'
        year_built:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The year built. Null when the roll carries none.
        effective_year_built:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The effective year built. Null when the roll carries none.
        living_area_sqft:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The living area in square feet. Null when the roll carries none.
        building_sqft:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The building area in square feet. Null when the roll carries none.
        bedrooms:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The bedrooms. Null when the roll carries none.
        bathrooms:
          description: The bathrooms, halves allowed. Null when the roll carries none.
          type:
            - number
            - 'null'
        full_bathrooms:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The full bathrooms. Null when the roll carries none.
        partial_bathrooms:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The partial bathrooms. Null when the roll carries none.
        stories:
          description: The stories. Null when the roll carries none.
          type:
            - number
            - 'null'
        garage_spaces:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The garage spaces. Null when the roll carries none.
        pool:
          description: True when the roll marks a pool. Null when the roll carries none.
          type:
            - boolean
            - 'null'
        buildings:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The buildings on the parcel. Null when the roll carries none.
        units:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The units on the parcel. Null when the roll carries none.
        construction_type:
          description: The construction type of the roll. Null when the roll carries none.
          type:
            - string
            - 'null'
        lot_sqft:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The lot in square feet. Null when the roll carries none.
        lot_acres:
          description: The lot in acres. Null when the roll carries none.
          type:
            - number
            - 'null'
        zoning_code:
          description: The zoning code of the roll. Null when the roll carries none.
          type:
            - string
            - 'null'
        assessed_total:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The assessed value, whole US dollars. Null when the roll carries
            none.
        assessed_land:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The assessed value of the land, whole US dollars. Null when the roll
            carries none.
        assessed_improvement:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The assessed value of the improvements, whole US dollars. Null when
            the roll carries none.
        assessment_year:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The year of the assessment. Null when the roll carries none.
        market_value_total:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The market value of the roll, whole US dollars. Null when the roll
            carries none.
        market_value_year:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The year of that market value. Null when the roll carries none.
        tax_amount:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The tax, whole US dollars. Null when the roll carries none.
        tax_year:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The year of that tax. Null when the roll carries none.
        tax_delinquent_year:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The first year of a delinquent tax. Null when the roll marks none.
        tax_exemptions:
          description: >-
            The tax exemptions as the roll writes them. Null when the roll
            carries none.
          type:
            - string
            - 'null'
      required:
        - property_type_category
        - property_type_detail
        - segment
        - land_use_code
        - vacant
        - year_built
        - effective_year_built
        - living_area_sqft
        - building_sqft
        - bedrooms
        - bathrooms
        - full_bathrooms
        - partial_bathrooms
        - stories
        - garage_spaces
        - pool
        - buildings
        - units
        - construction_type
        - lot_sqft
        - lot_acres
        - zoning_code
        - assessed_total
        - assessed_land
        - assessed_improvement
        - assessment_year
        - market_value_total
        - market_value_year
        - tax_amount
        - tax_year
        - tax_delinquent_year
        - tax_exemptions
      additionalProperties: false
      description: >-
        The attributes of the parcel as the county roll gives them, typed: the
        classification, the building, the lot, the assessment and the tax. Every
        key reads them.
    LeanOwner:
      type: object
      properties:
        n_owners:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The owner names on the roll, one or two.
        names:
          type: array
          items:
            type: string
          description: >-
            The owner names as the roll writes them, a person as LAST FIRST
            MIDDLE. Served to every key when the one name reads as a company or
            a public body. A name of a person is not served here: the list is
            empty without it.
        is_company:
          description: >-
            True when a name has a word of an entity, the vendor cut it, or the
            rights name a company. Null when the roll carries none.
          type:
            - boolean
            - 'null'
        is_trust:
          description: >-
            True when a name has a word of a trust, or the rights name a trust.
            Null when the roll carries none.
          type:
            - boolean
            - 'null'
        is_government:
          description: True when a name is a public body. Null when the roll carries none.
          type:
            - boolean
            - 'null'
        ownership_rights:
          description: >-
            The ownership rights as the roll writes them, for example Husband
            and Wife. Null when the roll carries none.
          type:
            - string
            - 'null'
        status_type:
          description: >-
            The owner status type as the roll writes it, for example Company
            Owned. Null when the roll carries none.
          type:
            - string
            - 'null'
        ownership_start_date:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The start of the ownership on the roll, YYYY-MM-DD. Null when the
            roll carries none.
        length_of_residence_months:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The months of residence as the roll gives them. Null when the roll
            carries none.
        owner_occupied:
          description: >-
            True when the roll marks the owner as the occupant, or the mailing
            address is the parcel. Null when neither is known.
          type:
            - boolean
            - 'null'
        absentee:
          description: True when the owner is not the occupant. Null when neither is known.
          type:
            - boolean
            - 'null'
        mailing:
          anyOf:
            - $ref: '#/components/schemas/LeanOwnerMailing'
            - type: 'null'
          description: >-
            The mailing address of the owner. Served with the names, under the
            same rule. Null when the roll carries none, and when the key does
            not read the names.
        mailing_out_of_state:
          description: >-
            True when the mailing address is in another state. Null when the
            roll carries no mailing state.
          type:
            - boolean
            - 'null'
        last_purchase:
          anyOf:
            - type: object
              properties:
                deal_id:
                  type: string
                  description: >-
                    The last purchase at arm's length of the parcel, 32 hex
                    characters: the key to `GET /v3/deals/{id}`.
                sale_date:
                  anyOf:
                    - type: string
                      format: date
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The date of that purchase, YYYY-MM-DD. Null when the deed
                    carries none.
                price:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                      description: Whole US dollars.
                    - type: 'null'
                  description: >-
                    The price of that purchase, whole US dollars. Null when the
                    deed carries none.
              required:
                - deal_id
                - sale_date
                - price
              additionalProperties: false
            - type: 'null'
          description: >-
            The last purchase at arm's length of the parcel, the acquisition
            deed. Null when the deed cut holds none.
        last_deed:
          anyOf:
            - type: object
              properties:
                position:
                  type: integer
                  minimum: -9007199254740991
                  maximum: 9007199254740991
                  description: The slot of the deed in the deed cut, 1 the newest.
                sale_date:
                  anyOf:
                    - type: string
                      format: date
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The date of that deed, YYYY-MM-DD. Null when the deed
                    carries none.
                document_type:
                  description: >-
                    The document type as the county writes it. Null when the
                    file carries none.
                  type:
                    - string
                    - 'null'
              required:
                - position
                - sale_date
                - document_type
              additionalProperties: false
            - type: 'null'
          description: >-
            The last deed of any kind of the parcel with a date and a buyer: a
            quit claim, a transfer into a trust, a re-recording. Null when the
            deed cut holds none.
        purchase_match:
          type: string
          enum:
            - exact
            - prefix
            - subset
            - trust_surname
            - surname_only
            - none
          description: >-
            How the owner names meet the buyer names of the last purchase.
            Prefix: a name the vendor cut. Subset: every word of the shorter key
            is in the other, so a couple meets one spouse. Trust surname: the
            surname of a person is a word of a trust name. Surname only: equal
            one-word keys. None: no rule met.
        purchase_match_strength:
          type: string
          enum:
            - strong
            - family
            - none
          description: >-
            The strength of that match of the last purchase: strong for exact,
            prefix and subset, family for trust_surname and surname_only, else
            none.
        deed_match:
          type: string
          enum:
            - exact
            - prefix
            - subset
            - trust_surname
            - surname_only
            - none
          description: >-
            How the owner names meet the buyer names of the last deed. Prefix: a
            name the vendor cut. Subset: every word of the shorter key is in the
            other, so a couple meets one spouse. Trust surname: the surname of a
            person is a word of a trust name. Surname only: equal one-word keys.
            None: no rule met.
        deed_match_strength:
          type: string
          enum:
            - strong
            - family
            - none
          description: >-
            The strength of that match of the last deed: strong for exact,
            prefix and subset, family for trust_surname and surname_only, else
            none.
        acquisition_basis:
          type: string
          enum:
            - purchase
            - transfer
            - no_deed
            - unmatched
          description: >-
            How the owner holds. Purchase: the names meet the buyers of the last
            purchase. Transfer: they meet the buyers of the last deed of any
            kind alone. No deed: the parcel has no dated deed with a buyer.
            Unmatched otherwise.
        held_since:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            Since when the owner holds, YYYY-MM-DD: the date of the deed of the
            basis, else the start date of the roll. Null when no dated source
            exists.
        held_since_basis:
          type: string
          enum:
            - purchase_deed
            - transfer_deed
            - ownership_record
            - none
          description: >-
            Where held_since comes from: purchase_deed, transfer_deed,
            ownership_record, or none.
        months_held:
          description: >-
            The months from held_since to the data end of the state, one
            decimal. Null without held_since.
          type:
            - number
            - 'null'
      required:
        - n_owners
        - names
        - is_company
        - is_trust
        - is_government
        - ownership_rights
        - status_type
        - ownership_start_date
        - length_of_residence_months
        - owner_occupied
        - absentee
        - mailing
        - mailing_out_of_state
        - last_purchase
        - last_deed
        - purchase_match
        - purchase_match_strength
        - deed_match
        - deed_match_strength
        - acquisition_basis
        - held_since
        - held_since_basis
        - months_held
      additionalProperties: false
      description: >-
        The owner of the parcel on the county roll beside its last deed, with
        the basis of the hold. Every key reads the facts. The names and the
        mailing address of a person are not served here.
    LeanSearchSale:
      type: object
      properties:
        n_purchases:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The purchases at arm's length of the parcel in the deed cut.
        last_purchase:
          anyOf:
            - type: object
              properties:
                deal_id:
                  type: string
                  description: >-
                    The last purchase at arm's length, 32 hex characters: the
                    key to `GET /v3/deals/{id}`.
                sale_date:
                  anyOf:
                    - type: string
                      format: date
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The date of that purchase, YYYY-MM-DD. Null when the deed
                    carries none.
                price:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                      description: Whole US dollars.
                    - type: 'null'
                  description: >-
                    The price of that purchase, whole US dollars. Null when the
                    deed carries none.
                price_per_sqft:
                  description: >-
                    That price over the living area of the roll, one decimal.
                    Null without a price or a living area.
                  type:
                    - number
                    - 'null'
              required:
                - deal_id
                - sale_date
                - price
                - price_per_sqft
              additionalProperties: false
            - type: 'null'
          description: >-
            The last purchase at arm's length of the parcel. Null when the deed
            cut holds none.
        last_deed:
          anyOf:
            - type: object
              properties:
                sale_date:
                  anyOf:
                    - type: string
                      format: date
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The date of the last deed of any kind, YYYY-MM-DD. Null when
                    the deed carries none.
                document_type:
                  description: >-
                    The document type as the county writes it. Null when the
                    file carries none.
                  type:
                    - string
                    - 'null'
              required:
                - sale_date
                - document_type
              additionalProperties: false
            - type: 'null'
          description: >-
            The last deed of any kind with a date and a buyer. Null when the
            deed cut holds none.
      required:
        - n_purchases
        - last_purchase
        - last_deed
      additionalProperties: false
      description: The purchases and the last deeds of the parcel in the deed cut.
    LeanSearchListing:
      type: object
      properties:
        listing_id:
          type: string
          description: >-
            The newest listing of the parcel, 32 hex characters: the key to `GET
            /v3/listings/{id}`.
        status:
          type: string
          description: >-
            The status of its current version as the build reads it: ACTIVE,
            PENDING, SOLD, OFF_MARKET or another status of the build.
        status_raw:
          description: The status as the feed spelled it. Null when the file carries none.
          type:
            - string
            - 'null'
        off_market_reason:
          description: >-
            Why the listing left the market: CANCELED, EXPIRED or OFF_MARKET.
            Null while it is on the market.
          type:
            - string
            - 'null'
        on_market:
          type: boolean
          description: True for an active or pending sale listing.
        is_rental:
          type: boolean
          description: True for a rental listing.
        list_price:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: The list price, whole US dollars. Null when the feed carries none.
        listed_on:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The listing date, YYYY-MM-DD. Null when the feed carries none.
        off_market_on:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The date the listing left the market, YYYY-MM-DD. Null while it is
            on the market.
        sold_on:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The sale date, YYYY-MM-DD. Null when the listing has not sold.
        days_on_market:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: The days on the market. Null when the file carries none.
        price_cut:
          type: boolean
          description: >-
            True when the low price of the listing is dated after its high
            price, and under it.
        n_listings_12m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The listings of the parcel that started in the 365 days before the
            listing data end of the state.
        last_off_market_on:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The newest date a listing of the parcel left the market with no
            sale, YYYY-MM-DD. Null when none did.
      required:
        - listing_id
        - status
        - status_raw
        - off_market_reason
        - on_market
        - is_rental
        - list_price
        - listed_on
        - off_market_on
        - sold_on
        - days_on_market
        - price_cut
        - n_listings_12m
        - last_off_market_on
      additionalProperties: false
      description: >-
        The current listing of the parcel: the newest listing of the parcel, its
        current version, and the counts of its listings.
    LeanSearchValuation:
      type: object
      properties:
        avm_value:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The automated valuation of the feed at the date of the slice, whole
            US dollars. Null when the feed carries none.
        avm_low:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The low end of the valuation, whole US dollars. Null when the feed
            carries none.
        avm_high:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The high end of the valuation, whole US dollars. Null when the feed
            carries none.
        avm_confidence:
          description: >-
            The confidence of the valuation as the feed gives it. Null when the
            feed carries none.
          type:
            - number
            - 'null'
        avm_as_of:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The date of the valuation, YYYY-MM-DD. Null when the feed carries
            none.
        equity_balance:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The equity: the valuation minus the open balances, whole US dollars.
            Null without a valuation.
        equity_percent:
          description: The equity as a percent of the valuation. Null without a valuation.
          type:
            - number
            - 'null'
        ltv:
          description: The loan to value, percent. Null without a valuation.
          type:
            - number
            - 'null'
        as_of:
          type: string
          format: date
          description: >-
            The date of the financing slice of the state, YYYY-MM-DD. The slice
            is dated: as_of is its date.
      required:
        - avm_value
        - avm_low
        - avm_high
        - avm_confidence
        - avm_as_of
        - equity_balance
        - equity_percent
        - ltv
        - as_of
      additionalProperties: false
      description: >-
        The valuation and the equity of the parcel at the date of the slice. The
        slice is dated: as_of is its date.
    LeanSearchFinancing:
      type: object
      properties:
        open_lien_count:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The open positions of the parcel as the county counts them. Null
            when the file carries none.
        open_lien_balance:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The sum of the open balances, whole US dollars. Null when the county
            carries none.
        first_lien_rate:
          description: >-
            The rate of the first open position, percent. Null when the county
            carries none.
          type:
            - number
            - 'null'
        first_lien_lender_org_id:
          anyOf:
            - type: string
              pattern: ^[A-Z]{2}:(name:.{1,200}|[A-Z0-9-]{1,40})$
              description: >-
                The organization id: the state, a colon and the anchor entity
                number for a registry organization, for example AZ:L16090024.
                For a deed name that no entity matched: the state, a colon, the
                word name, a colon and the name key, for example AZ:name:ACME
                HOLDINGS. The id is stable across builds while the anchor entity
                stays.
            - type: 'null'
          description: >-
            The lender organization of the first open position: the key to `GET
            /v3/lenders/{id}`. Null when the position names no lender of the
            set. A deed-name id carries a person's name. This host serves null
            here for a person.
        has_heloc:
          type: boolean
          description: True when an open position carries the credit-line flag.
        free_and_clear:
          description: >-
            True when the county counts no open position. Null when the county
            carries no count.
          type:
            - boolean
            - 'null'
        involuntary_lien_count:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The involuntary liens of the parcel in the slice.
        last_mortgage_recording_date:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The recording date of the last recorded mortgage, YYYY-MM-DD. Null
            when the county carries none.
        last_mortgage_amount:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The amount of the last recorded mortgage, whole US dollars. Null
            when the county carries none.
        last_mortgage_lender_org_id:
          anyOf:
            - type: string
              pattern: ^[A-Z]{2}:(name:.{1,200}|[A-Z0-9-]{1,40})$
              description: >-
                The organization id: the state, a colon and the anchor entity
                number for a registry organization, for example AZ:L16090024.
                For a deed name that no entity matched: the state, a colon, the
                word name, a colon and the name key, for example AZ:name:ACME
                HOLDINGS. The id is stable across builds while the anchor entity
                stays.
            - type: 'null'
          description: >-
            The lender organization of the last recorded mortgage: the key to
            `GET /v3/lenders/{id}`. Null when the mortgage names no lender of
            the set. A deed-name id carries a person's name. This host serves
            null here for a person.
        last_mortgage_lender_tags:
          type: array
          items:
            type: string
            enum:
              - government
              - bank
              - credit_union
              - trust
              - person
              - hard_money
              - institution
            description: >-
              A reading of the name of the lender, each by its rule in the
              build. government: a public body. bank: the bank, thrift and
              charter words. credit_union: a credit union. trust: a trust, an
              IRA, an estate or a seller carry-back. person: a name that reads
              as a person. hard_money: the hard-money vocabulary and brands.
              institution: a servicer, a title company or an association. A tag
              decides no row: a lender keeps its loans and gets a tag. The list
              can grow with the rules of the build: a client keeps an unknown
              tag.
          description: >-
            The tags of the spelling of that lender, in the order of the enum.
            Empty when none.
        as_of:
          type: string
          format: date
          description: >-
            The date of the financing slice of the state, YYYY-MM-DD. The slice
            is dated: as_of is its date.
      required:
        - open_lien_count
        - open_lien_balance
        - first_lien_rate
        - first_lien_lender_org_id
        - has_heloc
        - free_and_clear
        - involuntary_lien_count
        - last_mortgage_recording_date
        - last_mortgage_amount
        - last_mortgage_lender_org_id
        - last_mortgage_lender_tags
        - as_of
      additionalProperties: false
      description: >-
        The open positions and the last recorded mortgage of the parcel at the
        date of the slice. The slice is dated: as_of is its date.
    LeanSearchPortfolio:
      type: object
      properties:
        n_same_owner_parcels:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The parcels of the state whose owner row carries one of the owner
            keys of this parcel at the same mailing address, this parcel
            counted.
      required:
        - n_same_owner_parcels
      additionalProperties: false
      description: The portfolio of the owner as the roll of the state shows it.
    MetaGeometry:
      type: object
      properties:
        kind:
          type: string
          enum:
            - radius
            - bbox
            - place
          description: >-
            Which location ran: radius, bbox or place. A radius uses a point, a
            parcel ID, or a resolved address. 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. 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.
        address:
          description: >-
            Resolved situs line for an address search. Null for other location
            forms. This field describes the resolved parcel.
          type:
            - string
            - 'null'
        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'
        location_radius_m:
          description: >-
            Present when the property at the centre is listed on Investorlift.
            Then lat and lng are an approximate point, address is null, and this
            value is the radius in metres of the circle that contains the true
            point. The API measures each distance from the true point.
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
      required:
        - kind
        - lat
        - lng
        - radius_miles
        - bbox
        - property_id
        - address
        - 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
                    format: date
                    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
          format: date
          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
          format: date-time
          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
              format: date
              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
              format: date
              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
              format: date
              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
              format: date
              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
              format: date
              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
              format: date
              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
                      format: date
                      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. Null when the registry row
                    does not record it.
                recordings_through:
                  anyOf:
                    - type: string
                      format: date
                      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. Null when the registry row does not
                    record it.
                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. Null when
                    the registry did not measure it.
                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. Null when the registry
                    row does not record it.
                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 market of the first build. No route of the served set carries one:
        meta.coverage is empty.
    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
          format: date
          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.
    LeanBuildState:
      type: object
      properties:
        state:
          type: string
          pattern: ^[A-Z]{2}$
          description: The 2-letter state code of a served state, for example AZ.
        build_id:
          description: >-
            The id of the build of the files, a hash of the recorded steps. Null
            while the files of the state are a trial and no build id exists.
          type:
            - string
            - 'null'
        built_at:
          anyOf:
            - type: string
              format: date-time
              description: Timestamp, ISO 8601.
            - type: 'null'
          description: >-
            When the last step of the build finished, ISO 8601. Null while the
            files carry no record.
        published_at:
          type: string
          format: date-time
          description: When the publish of the state wrote the served tables, ISO 8601.
        run_id:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The id of the publish that serves the rows of the state. It moves
            with each publish.
        financing_as_of:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The date of the financing slice of the state, the newest applied
            drop of the county records: the clock of every lender window,
            YYYY-MM-DD. Null while the state has no financing slice.
        recordings_through:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The newest recording date of a loan of the slice, YYYY-MM-DD. Null
            while the state has no financing slice.
        financing_source:
          description: >-
            Where the financing slice came from: replay_887 for the replay of
            the archive of the feed, weekly when the weekly delivery carries the
            domains again. Null while the state has no financing slice.
          type:
            - string
            - 'null'
      required:
        - state
        - build_id
        - built_at
        - published_at
        - run_id
        - financing_as_of
        - recordings_through
        - financing_source
      additionalProperties: false
      description: >-
        One served state: its build, its publish and the dates of its financing
        slice.
    LeanOwnerMailing:
      type: object
      properties:
        line:
          description: >-
            The street line of the mailing address. Null when the roll carries
            none.
          type:
            - string
            - 'null'
        city:
          description: The city. Null when the roll carries none.
          type:
            - string
            - 'null'
        state:
          description: The 2-letter state. Null when the roll carries none.
          type:
            - string
            - 'null'
        zip:
          description: The 5-digit ZIP. Null when the roll carries none.
          type:
            - string
            - 'null'
        hash:
          description: >-
            The hash of the address as the vendor keys it: equal for two parcels
            with one mailing address. Null when the roll carries none.
          type:
            - string
            - 'null'
      required:
        - line
        - city
        - state
        - zip
        - hash
      additionalProperties: false
      description: The mailing address of the owner on the roll.
    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
              format: date
              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
              format: date
              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
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The deed data end that the parcel layer build used, YYYY-MM-DD. Null
            when the coverage row does not record it.
        n_parcels:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Parcels in the layer for this market. Null when the coverage row
            does not record it.
        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
                      format: date
                      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. Null when the coverage row does
                    not record it.
                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. Null when dated is false.
                  type:
                    - string
                    - 'null'
                n_parcels:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels with a row in the slice. Null when the coverage row
                    does not record it.
                n_with_open_lien:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels with at least one open lien at as_of. Null when the
                    coverage row does not record it.
                n_free_and_clear:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels with zero open liens at as_of. Null when the
                    coverage row does not record it.
                n_avm:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels with an AVM at as_of. Null when the coverage row
                    does not record it.
                n_involuntary:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels with an involuntary lien at as_of. Null when the
                    coverage row does not record it.
                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. Null when the coverage
                    row does not record it.
              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
                      format: date
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The effective date of the loaded permit snapshot,
                    YYYY-MM-DD. Null when the coverage row does not record it.
                n_permits:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Permits served for this market. Null when the coverage row
                    does not record it.
                n_parcels:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels with at least one permit. Null when the coverage row
                    does not record it.
                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. Null when the
                    coverage row does not record it.
                jurisdictions:
                  anyOf:
                    - type: array
                      items:
                        type: object
                        properties:
                          jurisdiction:
                            description: >-
                              The issuing city or county, upper case. Null when
                              the file names none.
                            type:
                              - string
                              - 'null'
                          n_permits:
                            anyOf:
                              - type: integer
                                minimum: -9007199254740991
                                maximum: 9007199254740991
                              - type: 'null'
                            description: >-
                              Permits the jurisdiction issued, all time. Null
                              when the coverage row does not record it.
                          last_issue_date:
                            anyOf:
                              - type: string
                                format: date
                                description: Calendar date, YYYY-MM-DD.
                              - type: 'null'
                            description: >-
                              The newest issue date of the jurisdiction,
                              YYYY-MM-DD. Null when no permit of the
                              jurisdiction carries an issue date.
                          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. Null when the coverage row does not record them.
              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
                      format: date
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The date of the delivery the Owner Profile block comes from,
                    YYYY-MM-DD. Null when the coverage row does not record it.
                n_parcels:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels carrying a profile. Null when the coverage row does
                    not record it.
                n_multi:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels whose owner holds two or more properties. Null when
                    the coverage row does not record it.
                n_portfolio_5:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels whose owner holds five or more. Null when the
                    coverage row does not record it.
              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
                      format: date
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The first weekly file the history lake replayed (the
                    baseline FULL), YYYY-MM-DD. Null when the lake has no file.
                last_week:
                  anyOf:
                    - type: string
                      format: date
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The last weekly file replayed, YYYY-MM-DD. Null when the
                    lake has no file.
                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. Null when the coverage row
                    does not record it.
                n_events:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Typed events on record. Null when the coverage row does not
                    record it.
                n_weeks:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Weekly files replayed. Null when the coverage row does not
                    record it.
                domains:
                  anyOf:
                    - type: object
                      propertyNames:
                        type: string
                      additionalProperties:
                        type: object
                        properties:
                          first_week:
                            anyOf:
                              - type: string
                                format: date
                                description: Calendar date, YYYY-MM-DD.
                              - type: 'null'
                            description: >-
                              The first weekly file with the domain, YYYY-MM-DD.
                              Null when the lake has no file for it.
                          last_week:
                            anyOf:
                              - type: string
                                format: date
                                description: Calendar date, YYYY-MM-DD.
                              - type: 'null'
                            description: >-
                              The last weekly file with the domain, YYYY-MM-DD.
                              Null when the lake has no file for it.
                          n_events:
                            anyOf:
                              - type: integer
                                minimum: -9007199254740991
                                maximum: 9007199254740991
                              - type: 'null'
                            description: >-
                              Typed events of the domain on record. Null when
                              the coverage row does not record it.
                        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. Null when the coverage row does
                    not record them.
              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 part carries its as-of date and its
        counts, and is null where the market has none of it. The block itself is
        null where the market has no parcel product tables.
    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
              format: date
              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 build of the served set
        and from the representation, not from the body. It moves only when a
        state is published again. On a JSON route, send it back as
        If-None-Match, and an unchanged set answers 304 with no body. GET
        /v3/build 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 build token of the served set: the word lean, then one pair per
        served state in state order, each the state and its run id
        (lean-AZ1790123752-TX1790248213 for two states). The run ids are the
        same as meta.build.states[].run_id, and you can read them without
        parsing the body. The token moves only when a state is published again,
        so fold it into cache keys. On every 2xx and the 304, never on an error.
      schema:
        type: string
    X-Data-End:
      description: >-
        The newest deed date across the served states, YYYY-MM-DD. GET
        /v3/coverage carries the date of each state. On every 2xx and the 304,
        never on an error. Absent while no served state carries a deed date.
      schema:
        type: string
    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
      bearerFormat: API key
      description: >-
        API key from the developer console (starts with zpka_). Create one at
        https://developers.investorlift.com/get-a-key.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.