> ## 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.

# Read the investor transactions of one parcel with their outcomes

> The investor transactions of one parcel: each purchase the build flagged as an investor purchase, its outcome, both legs, the three flags and the investor by name and id. detail=true adds the track record, the sellers, the end buyer, the entry, the loan and the exit.

Use it to read what occurred on one parcel. For 500 parcels at once use `POST /v3/properties/transactions`. A parcel of no served state reads not_served. A person's name is not served here.

A call costs 0 credits.

[The lean dataset of the Investorlift Data API](https://developers.investorlift.com/api-reference/lean).



## OpenAPI

````yaml /openapi.json get /v3/properties/{id}/transactions
openapi: 3.1.0
info:
  title: God Mode API
  version: 1.41.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 and the connection steps for
    MCP clients. https://developers.investorlift.com/llms.txt indexes the site
    for a model. This document is the machine-readable reference behind the API
    tab of the site.


    **Start here.** 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`.


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


    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, 404 job_not_found, 409 job_not_done, 406
    not_acceptable, 410 gone, 413 batch_too_large, 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, 503
    jobs_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, the error catalogue
    and the MCP connection steps.
  url: https://developers.investorlift.com
paths:
  /v3/properties/{id}/transactions:
    get:
      tags:
        - lean
      summary: Read the investor transactions of one parcel with their outcomes
      description: >-
        The investor transactions of one parcel: each purchase the build flagged
        as an investor purchase, its outcome, both legs, the three flags and the
        investor by name and id. detail=true adds the track record, the sellers,
        the end buyer, the entry, the loan and the exit.


        Use it to read what occurred on one parcel. For 500 parcels at once use
        `POST /v3/properties/transactions`. A parcel of no served state reads
        not_served. A person's name is not served here.


        A call costs 0 credits.


        [The lean dataset of the Investorlift Data
        API](https://developers.investorlift.com/api-reference/lean).
      operationId: getLeanPropertyTransactions
      parameters:
        - schema:
            type: string
            format: date
          in: query
          name: since
          required: false
          description: >-
            Keep the investor purchases dated on or after this day, YYYY-MM-DD.
            The set holds 20 deeds at most on a parcel, so an old purchase is
            absent anyway.
        - schema:
            minItems: 1
            type: array
            items:
              type: string
              enum:
                - quick_resale
                - flip
                - flip_window_other
                - long_hold_sale
                - held
                - open
              description: >-
                The outcome of the investor purchase, one word over its resale
                and the data end of the state. quick_resale: the next priced
                deed of the parcel is 0 to 29 days after the purchase. flip: the
                next priced deed is 30 to 365 days after the purchase, both legs
                carry a price, and the resale price over the price minus one is
                0.10 to 1.50. flip_window_other: the next priced deed is 30 to
                365 days after the purchase, and the spread is outside that band
                or a leg carries no price. long_hold_sale: the next priced deed
                is more than 365 days after the purchase. held: no later priced
                deed by the data end, and the purchase is more than 365 days
                before the data end. open: no later priced deed by the data end,
                and the purchase is inside the 365 days before the data end, so
                the outcome is not known yet. The thresholds are the ones of the
                organization profile.
          in: query
          name: outcomes
          required: false
          description: >-
            Keep the investor purchases of these outcomes, comma-separated or
            repeated. The counts of the block still read every investor
            purchase.
          style: form
          explode: true
        - schema:
            default: 'false'
            type: string
            enum:
              - 'true'
              - 'false'
          in: query
          name: detail
          required: false
          description: >-
            True adds the blocks that cost a probe each: the track record of
            each buyer, the sellers, the buyers of the resale, the entry, the
            purchase loan, the exit and the owner. False, the default, answers
            the outcome, both legs, the flags and the investor by name and id,
            and reads null for the rest. The default is the fast shape.
        - schema:
            type: string
          in: path
          name: id
          required: true
          description: The parcel id, as a deal, a listing or a resolve carries it.
      responses:
        '200':
          description: The investor transactions of one parcel.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/LeanTransactionsBlock'
                  meta:
                    $ref: '#/components/schemas/LeanMeta'
                required:
                  - data
                  - meta
                additionalProperties: false
                description: The investor transactions of one parcel.
              example:
                data:
                  property_id: af3af85f9f21671a0c7b7728a6faade3
                  status: served
                  state: AZ
                  deeds_through: '2026-09-24'
                  n_investor_purchases: 1
                  n_flips: 0
                  last_flip_sale_date: null
                  investor_purchases:
                    - deal_id: d8b68d172db0dcc93487813a77119c03
                      outcome: open
                      purchase:
                        sale_date: '2026-09-01'
                        price: 185000
                        doc_class: ECONOMIC
                        position: 1
                      resale: null
                      days_held: 23
                      spread: null
                      flags:
                        buyer_is_entity: true
                        repeat_buyer: true
                        repeat_n_12m: 54
                        resale_within_12m: false
                      investor:
                        name: ZAK VENTURES LLC
                        org_id: AZ:L09606353
                        org_name: ZAK VENTURES LLC
                        from_registry: true
                        match_basis: filed
                        company_like: true
                        tags: []
                        person_id: null
                        track_record:
                          data_end: '2026-09-24'
                          n_purchases: 1015
                          n_sales: 587
                          first_purchase_date: '1998-10-22'
                          last_purchase_date: '2026-09-08'
                          last_sale_date: '2026-09-14'
                          n_purchases_12m: 53
                          n_purchases_24m: 90
                          n_purchases_36m: 159
                          is_active: true
                          days_since_last_purchase: 16
                          days_since_last_sale: 10
                          median_gap_days: 5
                          n_resold: 702
                          n_held: 313
                          n_quick_resales: 178
                          n_flips: 349
                          n_flip_window_other: 40
                          n_long_holds_sold: 135
                          n_builds: 21
                          median_hold_days: 88.5
                          median_spread: 0.509
                          n_priced_purchases: 1012
                          price_p25: 210000
                          price_p50: 248000
                          price_p75: 304500
                          price_band_window: 5y
                          n_priced_purchases_24m: 90
                          price_p25_24m: 200000
                          price_p50_24m: 224000
                          price_p75_24m: 254750
                          n_sfr: 922
                          n_condo_th: 85
                          n_other: 8
                          total_price: 241175588
                          n_bought_from_quick_resellers_24m: 2
                          top_quick_reseller:
                            org_id: AZ:23655532
                            org_name: STM ACQUISITIONS LLC
                            from_registry: true
                          auction:
                            n_auction_buys: 3
                            n_auction_buys_24m: 0
                            last_auction_buy_date: '2012-03-23'
                            is_active_auction_buyer: false
                            n_reo_buys: 61
                            n_reo_buys_24m: 0
                            last_reo_buy_date: '2013-04-11'
                            is_active_reo_buyer: false
                      buyers:
                        - name: ZAK VENTURES LLC
                          org_id: AZ:L09606353
                          org_name: ZAK VENTURES LLC
                          from_registry: true
                          match_basis: filed
                          company_like: true
                          tags: []
                          person_id: null
                          track_record:
                            data_end: '2026-09-24'
                            n_purchases: 1015
                            n_sales: 587
                            first_purchase_date: '1998-10-22'
                            last_purchase_date: '2026-09-08'
                            last_sale_date: '2026-09-14'
                            n_purchases_12m: 53
                            n_purchases_24m: 90
                            n_purchases_36m: 159
                            is_active: true
                            days_since_last_purchase: 16
                            days_since_last_sale: 10
                            median_gap_days: 5
                            n_resold: 702
                            n_held: 313
                            n_quick_resales: 178
                            n_flips: 349
                            n_flip_window_other: 40
                            n_long_holds_sold: 135
                            n_builds: 21
                            median_hold_days: 88.5
                            median_spread: 0.509
                            n_priced_purchases: 1012
                            price_p25: 210000
                            price_p50: 248000
                            price_p75: 304500
                            price_band_window: 5y
                            n_priced_purchases_24m: 90
                            price_p25_24m: 200000
                            price_p50_24m: 224000
                            price_p75_24m: 254750
                            n_sfr: 922
                            n_condo_th: 85
                            n_other: 8
                            total_price: 241175588
                            n_bought_from_quick_resellers_24m: 2
                            top_quick_reseller:
                              org_id: AZ:23655532
                              org_name: STM ACQUISITIONS LLC
                              from_registry: true
                            auction:
                              n_auction_buys: 3
                              n_auction_buys_24m: 0
                              last_auction_buy_date: '2012-03-23'
                              is_active_auction_buyer: false
                              n_reo_buys: 61
                              n_reo_buys_24m: 0
                              last_reo_buy_date: '2013-04-11'
                              is_active_reo_buyer: false
                      seller:
                        name: null
                        org_id: null
                        org_name: null
                        from_registry: null
                        match_basis: none
                        company_like: false
                        tags: []
                        person_id: AZ:person:14ce1143a80f
                      sellers:
                        - name: null
                          org_id: null
                          org_name: null
                          from_registry: null
                          match_basis: none
                          company_like: false
                          tags: []
                          person_id: AZ:person:14ce1143a80f
                      entry:
                        auction: false
                        auction_kind: null
                        reo: false
                        marketplace_listing_id: null
                      seller_hold_days: null
                      same_day_resale: false
                      purchase_loan_status: not_measured
                      purchase_loan: null
                      exit: null
                      exit_measured: true
                  owner:
                    held_since: '2026-09-01'
                    acquisition_basis: purchase
                    is_company: true
                    is_trust: false
                    months_held: 0.8
                  transactions: []
                meta:
                  generated_at: '2026-10-20T23:37:07.588Z'
                  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-19T22:34:59.714Z'
                        published_at: '2026-10-20T00:16:56.637Z'
                        run_id: 1792449362
                        financing_as_of: '2026-06-25'
                        recordings_through: '2026-06-11'
                        financing_source: replay_887
                        str_as_of: '2026-10-18'
                      - 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
                        str_as_of: 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
                        str_as_of: 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
                        str_as_of: null
          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 (invalid_id, unknown_parameter, validation_error)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                invalid_id:
                  summary: Invalid id
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#invalid_id
                    title: Invalid id
                    status: 400
                    code: invalid_id
                    detail: >-
                      An investor id is inv_ followed by 12 hex characters. The
                      prefix is part of the id.
                    instance: /v3/properties/{id}/transactions
                    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/{id}/transactions
                    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/{id}/transactions
                    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/{id}/transactions
                    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/{id}/transactions
                    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/{id}/transactions
                    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/{id}/transactions
                    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/{id}/transactions
                    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/{id}/transactions
                    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/{id}/transactions
                    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/{id}/transactions
                    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/{id}/transactions
                    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/{id}/transactions
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
components:
  schemas:
    LeanTransactionsBlock:
      type: object
      properties:
        property_id:
          type: string
          pattern: ^[0-9a-f]{32}$
          description: The parcel, 32 hex characters.
        status:
          type: string
          enum:
            - served
            - not_served
            - no_deeds
          description: >-
            served: the parcel is in a served state. not_served: the id is in
            the place index of no served state, so nothing is measured for it.
            no_deeds: the parcel is in the set and has no purchase at arm's
            length.
        state:
          description: The served state of the parcel. Null when the status is not_served.
          type:
            - string
            - 'null'
        deeds_through:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The data end of the state, YYYY-MM-DD: the clock of every window of
            the block. Null when the status is not_served.
        n_investor_purchases:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The investor purchases of the parcel, before the since and outcomes
            filters.
        n_flips:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Of them, the outcome flip.
        last_flip_sale_date:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The resale date of the newest flip, YYYY-MM-DD. Null when the parcel
            has no flip.
        investor_purchases:
          type: array
          items:
            $ref: '#/components/schemas/LeanTransactionItem'
          description: >-
            The investor purchases of the parcel, newest first, under the since
            and outcomes filters.
        owner:
          anyOf:
            - $ref: '#/components/schemas/LeanTransactionsOwner'
            - type: 'null'
          description: >-
            The holder on the roll. Null without detail, when the roll names
            none, when the state has no owner table, and when the status is
            not_served.
        transactions:
          type: array
          items:
            $ref: '#/components/schemas/LeanTransactionPlacement'
          description: >-
            The transactions of the request on this parcel, in the order of the
            request. Empty when the request named none.
      required:
        - property_id
        - status
        - state
        - deeds_through
        - n_investor_purchases
        - n_flips
        - last_flip_sale_date
        - investor_purchases
        - owner
        - transactions
      description: >-
        The investor transactions of one parcel: its status in the set, each
        investor purchase with its outcome and its parties, the holder of the
        roll, and the transactions the request placed.
    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.
    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.
    LeanTransactionItem:
      type: object
      properties:
        deal_id:
          type: string
          pattern: ^[0-9a-f]{32}$
          description: 'The deed of the investor purchase: the key to `GET /v3/deals/{id}`.'
        outcome:
          type: string
          enum:
            - quick_resale
            - flip
            - flip_window_other
            - long_hold_sale
            - held
            - open
          description: >-
            The outcome of the investor purchase, one word over its resale and
            the data end of the state. quick_resale: the next priced deed of the
            parcel is 0 to 29 days after the purchase. flip: the next priced
            deed is 30 to 365 days after the purchase, both legs carry a price,
            and the resale price over the price minus one is 0.10 to 1.50.
            flip_window_other: the next priced deed is 30 to 365 days after the
            purchase, and the spread is outside that band or a leg carries no
            price. long_hold_sale: the next priced deed is more than 365 days
            after the purchase. held: no later priced deed by the data end, and
            the purchase is more than 365 days before the data end. open: no
            later priced deed by the data end, and the purchase is inside the
            365 days before the data end, so the outcome is not known yet. The
            thresholds are the ones of the organization profile.
        purchase:
          $ref: '#/components/schemas/LeanTransactionPurchaseLeg'
        resale:
          anyOf:
            - $ref: '#/components/schemas/LeanTransactionResaleLeg'
            - type: 'null'
          description: >-
            The resale leg. Null when no later priced deed is on the parcel by
            the data end: the outcome is held or open.
        days_held:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The days from the purchase to the resale, or to the data end of the
            state on a held or an open item.
        spread:
          description: >-
            The resale price over the purchase price, minus one, four decimals.
            Null when a leg carries no price, and without a resale.
          type:
            - number
            - 'null'
        flags:
          $ref: '#/components/schemas/LeanTransactionFlags'
        investor:
          anyOf:
            - $ref: '#/components/schemas/LeanTransactionInvestor'
            - type: 'null'
          description: >-
            The buyer that is the investor: the first of buyers. With detail the
            one with the most purchases at arm's length in the state, without it
            a company before a person, then the display name. Null when the deed
            names no buyer, and when every buyer is withheld.
        buyers:
          type: array
          items:
            $ref: '#/components/schemas/LeanTransactionInvestor'
          description: >-
            Every buyer name on the purchase deed, the investor first. The track
            record of each rides with detail alone.
        seller:
          anyOf:
            - $ref: '#/components/schemas/LeanDealParty'
            - type: 'null'
          description: >-
            The party that sold to the investor: the first of sellers, the one
            with the most sales at arm's length in the state. Null without
            detail, and when the deed names no seller.
        sellers:
          anyOf:
            - type: array
              items:
                $ref: '#/components/schemas/LeanDealParty'
            - type: 'null'
          description: >-
            Every seller name on the purchase deed, the seller first, a company
            before a person, then the display name. Null without detail.
        entry:
          anyOf:
            - $ref: '#/components/schemas/LeanTransactionEntry'
            - type: 'null'
          description: How the investor came in. Null without detail.
        seller_hold_days:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The days the seller held the parcel before this purchase: the item
            is the exit of that hold. Null when the build has no earlier deed to
            measure it from.
        same_day_resale:
          type: boolean
          description: >-
            True when the seller bought the parcel on the day of this purchase:
            a double close.
        purchase_loan_status:
          anyOf:
            - type: string
              enum:
                - found
                - none_captured
                - not_measured
              description: >-
                found: the build linked a purchase loan to the deal.
                none_captured: none was captured, which is not evidence of a
                cash purchase. not_measured: the sale is after the window of the
                slice, so a loan can still be on its way.
            - type: 'null'
          description: >-
            The status of the purchase loan of the deed, from the financing
            slice of the state. Null without detail, and while the state has no
            loan links.
        purchase_loan:
          anyOf:
            - $ref: '#/components/schemas/LeanPurchaseLoanRef'
            - type: 'null'
          description: >-
            The purchase loan the build linked to the deed. Null unless the
            status is found.
        exit:
          anyOf:
            - $ref: '#/components/schemas/LeanTransactionExit'
            - type: 'null'
          description: >-
            The sold listing the feed paired with the resale deed. Null without
            detail, when no listing closed within 45 days of the resale, without
            a resale, and while the state has no listing side.
        exit_measured:
          type: boolean
          description: >-
            True when the request asked for the detail and the state has a
            listing side, so a null exit means no listing closed near the
            resale. False when the exit was not measured.
      required:
        - deal_id
        - outcome
        - purchase
        - resale
        - days_held
        - spread
        - flags
        - investor
        - buyers
        - seller
        - sellers
        - entry
        - seller_hold_days
        - same_day_resale
        - purchase_loan_status
        - purchase_loan
        - exit
        - exit_measured
      description: >-
        One investor purchase of the parcel: its outcome, both legs, the flags,
        who bought, who sold, who bought from the investor, how the investor
        came in and how it got out.
    LeanTransactionsOwner:
      type: object
      properties:
        held_since:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            Since when the owner of the roll holds, YYYY-MM-DD. Null when no
            dated source exists.
        acquisition_basis:
          type: string
          enum:
            - purchase
            - transfer
            - no_deed
            - unmatched
          description: >-
            How the owner holds: purchase, transfer, no_deed or unmatched, as
            the owner block of `GET /v3/properties/{id}` reads it.
        is_company:
          description: >-
            True when an owner name has a word of an entity, or the rights name
            a company. Null when the roll does not say.
          type:
            - boolean
            - 'null'
        is_trust:
          description: >-
            True when an owner name has a word of a trust, or the rights name a
            trust. Null when the roll does not say.
          type:
            - boolean
            - 'null'
        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:
        - held_since
        - acquisition_basis
        - is_company
        - is_trust
        - months_held
      additionalProperties: false
      description: >-
        The holder of the parcel on the roll at the data end of the state: the
        hold and its basis, with no name. The names are on `GET
        /v3/properties/{id}`.
    LeanTransactionPlacement:
      type: object
      properties:
        as_given:
          $ref: '#/components/schemas/LeanTransactionRef'
          description: The transaction as the request named it.
        deal_id:
          anyOf:
            - type: string
              pattern: ^[0-9a-f]{32}$
              description: 'An id of the deed cut: 32 hex characters.'
            - type: 'null'
          description: The deed the set holds for it. Null on the role not_found.
        roles:
          type: array
          items:
            $ref: '#/components/schemas/LeanTransactionRoleRef'
          description: >-
            Every reading of the deed. A deed can be the resale of one investor
            purchase and the purchase of another on one day.
        seller_hold_days:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The days the seller of the deed held the parcel before it. Null on
            the role not_found, and when the build has no earlier deed.
      required:
        - as_given
        - deal_id
        - roles
        - seller_hold_days
      additionalProperties: false
      description: >-
        Where one transaction of the request sits among the investor purchases
        of its parcel.
    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 over the places the API serves. Null when this
            market has no short-term rental tables. This block belongs to the
            first build, whose routes left on 2026-10-09, so no route reads it.
            meta.build.states[].str_as_of is the stamp of the lean set.
        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'
        str_as_of:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The short-term rental snapshot of the state, YYYY-MM-DD: the oldest
            snapshot date over the places this API serves, so no served status
            is older than it. Each place carries its own date on GET
            /v3/coverage. Null while the state has no short-term rental tables.
      required:
        - state
        - build_id
        - built_at
        - published_at
        - run_id
        - financing_as_of
        - recordings_through
        - financing_source
        - str_as_of
      additionalProperties: false
      description: >-
        One served state: its build, its publish and the dates of its financing
        slice.
    LeanTransactionPurchaseLeg:
      type: object
      properties:
        sale_date:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The date of the 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 the purchase, whole US dollars. Null when the deed
            carries none.
        doc_class:
          description: >-
            The class of the deed of the purchase: ECONOMIC or DISTRESSED. Null
            when the deed is not a purchase row of the set.
          type:
            - string
            - 'null'
        position:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The slot of the deed in the deed cut, 1 the newest.
      required:
        - sale_date
        - price
        - doc_class
        - position
      additionalProperties: false
      description: 'The purchase leg of the item: the deed the investor bought on.'
    LeanTransactionResaleLeg:
      type: object
      properties:
        sale_date:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The date of the resale, 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 the resale, whole US dollars. Null when the deed
            carries none.
        doc_class:
          description: >-
            The class of the deed of the resale: ECONOMIC or DISTRESSED. Null
            when the deed is not a purchase row of the set.
          type:
            - string
            - 'null'
        deal_id:
          anyOf:
            - type: string
              pattern: ^[0-9a-f]{32}$
              description: 'An id of the deed cut: 32 hex characters.'
            - type: 'null'
          description: >-
            The deed of the resale: the key to `GET /v3/deals/{id}`. Null when
            the resale deed is no purchase row of the set, and when the purchase
            has no resale.
        flagged:
          description: >-
            True when the build flagged the resale deed as an investor purchase
            in its turn. Null when the resale deed is no purchase row of the
            set.
          type:
            - boolean
            - 'null'
        buyer:
          anyOf:
            - $ref: '#/components/schemas/LeanDealParty'
            - type: 'null'
          description: >-
            The party that bought from the investor, under the name rule of the
            set: the first of buyers. Null without detail, when the purchase has
            no resale, and when the resale deed names no buyer.
        buyers:
          anyOf:
            - type: array
              items:
                $ref: '#/components/schemas/LeanDealParty'
            - type: 'null'
          description: >-
            Every buyer name on the resale deed, the one with the most purchases
            at arm's length in the state first, a company before a person, then
            the display name. Null without detail. Empty when the resale deed
            names no buyer.
      required:
        - sale_date
        - price
        - doc_class
        - deal_id
        - flagged
        - buyer
        - buyers
      additionalProperties: false
      description: >-
        The resale leg of the item: the next priced deed of the parcel after the
        purchase, as step 06 pairs it, and who bought on it.
    LeanTransactionFlags:
      type: object
      properties:
        buyer_is_entity:
          description: >-
            Flag 1 of the build: a buyer name has a word of an entity. Null when
            the build did not read the buyers.
          type:
            - boolean
            - 'null'
        repeat_buyer:
          description: >-
            Flag 2 of the build: the buyer has two or more purchases at arm's
            length in the state inside 365 days of this one. Null when the build
            did not count it.
          type:
            - boolean
            - 'null'
        repeat_n_12m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The purchases of the buyer inside 365 days of this one, this one
            included. Null when the build did not count it.
        resale_within_12m:
          description: >-
            Flag 3 of the build: the next priced deed of the parcel is 365 days
            or less after this one. Null when the build did not read the deeds.
          type:
            - boolean
            - 'null'
      required:
        - buyer_is_entity
        - repeat_buyer
        - repeat_n_12m
        - resale_within_12m
      additionalProperties: false
      description: >-
        The three investor flags of step 06 on the purchase: an entity buyer, a
        repeat buyer, a resale inside the window.
    LeanTransactionInvestor:
      type: object
      properties:
        name:
          description: >-
            The name on the deed in its display form: upper case, no period, the
            entity suffix as one token, a person given name first. This host
            serves null here for a person when the name reads as a person. A
            company name is served to every key.
          type:
            - string
            - 'null'
        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 organization the name matched: the key to `GET /v3/orgs/{id}`.
            Null when the build matched none.
        org_name:
          description: The display name of that organization. Null when org_id is null.
          type:
            - string
            - 'null'
        from_registry:
          description: >-
            True when the organization is one of the business registry. Null
            when org_id is null.
          type:
            - boolean
            - 'null'
        match_basis:
          description: >-
            How the name matched: filed, former, variant (a form of one registry
            key with no space or with the S form of its last word), address (the
            buyer mailing address is the address of one organization, and the
            first two words of the names agree), principal or none. Null when
            the build matched none.
          type:
            - string
            - 'null'
        company_like:
          description: >-
            True when the name reads as a company. Null when the file carries
            none.
          type:
            - boolean
            - 'null'
        tags:
          type: array
          items:
            type: string
          description: >-
            The tags of the name: a bank, a builder, a government body, a trust,
            an iBuyer. Empty when none.
        person_id:
          anyOf:
            - type: string
              pattern: >-
                ^([A-Z]{2}:person:[0-9a-f]{12}|person:[0-9a-f]{12}|buyer:[0-9a-f]{12}|[A-Z]{2}:agt:[0-9a-f]{12}|[A-Z]{2}:name:.{1,200})$
              description: >-
                The person id: the state, a colon, person, a colon and 12 hex
                characters. The build keeps it across rebuilds. An id of an
                earlier build (person: or buyer: and 12 hex characters) answers
                through the alias rows, and the agent id (the state, a colon,
                agt, a colon and 12 hex characters) answers the person of that
                agent. The id of a sighting answers the person that holds it: a
                deed name, a borrower or a lender (the state, a colon, name, a
                colon and the name key), which is not served here because it
                carries a name. The body carries the person id, and
                meta.resolved_from names the id of the path when the two differ.
            - type: 'null'
          description: >-
            The person behind a name that reads as a person: the key to `GET
            /v3/people/{id}`. The id carries no name, so every key reads it.
            Null for a company, and for a name the build has not clustered.
        track_record:
          anyOf:
            - $ref: '#/components/schemas/LeanOrgProfile'
            - type: 'null'
          description: >-
            The profile of the organization of the party over its purchases and
            sales at arm's length, the same numbers as `GET /v3/orgs/{id}`. Null
            without detail, when the party matched no organization, when the
            organization has no profile row, and when the party is withheld.
      required:
        - name
        - org_id
        - org_name
        - from_registry
        - match_basis
        - company_like
        - tags
        - person_id
        - track_record
      additionalProperties: false
      description: >-
        One buyer of an investor purchase: the party shape of the deal routes,
        and the track record of its organization.
    LeanDealParty:
      type: object
      properties:
        name:
          description: >-
            The name on the deed in its display form: upper case, no period, the
            entity suffix as one token, a person given name first. This host
            serves null here for a person when the name reads as a person. A
            company name is served to every key.
          type:
            - string
            - 'null'
        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 organization the name matched: the key to `GET /v3/orgs/{id}`.
            Null when the build matched none.
        org_name:
          description: The display name of that organization. Null when org_id is null.
          type:
            - string
            - 'null'
        from_registry:
          description: >-
            True when the organization is one of the business registry. Null
            when org_id is null.
          type:
            - boolean
            - 'null'
        match_basis:
          description: >-
            How the name matched: filed, former, variant (a form of one registry
            key with no space or with the S form of its last word), address (the
            buyer mailing address is the address of one organization, and the
            first two words of the names agree), principal or none. Null when
            the build matched none.
          type:
            - string
            - 'null'
        company_like:
          description: >-
            True when the name reads as a company. Null when the file carries
            none.
          type:
            - boolean
            - 'null'
        tags:
          type: array
          items:
            type: string
          description: >-
            The tags of the name: a bank, a builder, a government body, a trust,
            an iBuyer. Empty when none.
        person_id:
          anyOf:
            - type: string
              pattern: >-
                ^([A-Z]{2}:person:[0-9a-f]{12}|person:[0-9a-f]{12}|buyer:[0-9a-f]{12}|[A-Z]{2}:agt:[0-9a-f]{12}|[A-Z]{2}:name:.{1,200})$
              description: >-
                The person id: the state, a colon, person, a colon and 12 hex
                characters. The build keeps it across rebuilds. An id of an
                earlier build (person: or buyer: and 12 hex characters) answers
                through the alias rows, and the agent id (the state, a colon,
                agt, a colon and 12 hex characters) answers the person of that
                agent. The id of a sighting answers the person that holds it: a
                deed name, a borrower or a lender (the state, a colon, name, a
                colon and the name key), which is not served here because it
                carries a name. The body carries the person id, and
                meta.resolved_from names the id of the path when the two differ.
            - type: 'null'
          description: >-
            The person behind a name that reads as a person: the key to `GET
            /v3/people/{id}`. The id carries no name, so every key reads it.
            Null for a company, and for a name the build has not clustered.
      required:
        - name
        - org_id
        - org_name
        - from_registry
        - match_basis
        - company_like
        - tags
        - person_id
      additionalProperties: false
      description: >-
        One name on one side of the deed, the organization it matched, and the
        person behind it.
    LeanTransactionEntry:
      type: object
      properties:
        auction:
          type: boolean
          description: >-
            True when the purchase is an auction purchase of the build: a
            distressed deed of an auction kind whose five tests hold.
        auction_kind:
          anyOf:
            - type: string
              enum:
                - TRUSTEE_SALE
                - SHERIFF_SALE
                - HOA_TRUSTEE_SALE
                - TAX_SALE
                - TAX_LIEN_DEED
                - NOT_AUCTION
              description: >-
                The kind of auction the deed records: a trustee sale, a sheriff
                sale, an HOA trustee sale, a tax sale or a tax lien deed.
                NOT_AUCTION is a distressed deed that is no auction.
            - type: 'null'
          description: >-
            The kind of auction the deed records. Null when the deed is no
            distressed deed.
        reo:
          type: boolean
          description: >-
            True when the purchase is an REO sale: the seller took the parcel
            back on an earlier deed of the chain.
        marketplace_listing_id:
          description: >-
            The Investorlift marketplace listing the purchase closed: the key to
            `GET /v3/marketplace/listings/{id}`. Null when the deeds closed no
            listing.
          type:
            - string
            - 'null'
      required:
        - auction
        - auction_kind
        - reo
        - marketplace_listing_id
      additionalProperties: false
      description: >-
        How the investor came in: an auction, an REO sale, a marketplace
        closing, or none of these. A distressed or off-market entry carries no
        market price.
    LeanPurchaseLoanRef:
      type: object
      properties:
        lender:
          $ref: '#/components/schemas/LeanLenderRef'
          description: >-
            The lender of record of the purchase loan, under the name rule of a
            lender.
        loan_amount:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The amount of the loan, whole US dollars. Null when the county
            carries none.
        recording_date:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The recording date of the loan, YYYY-MM-DD. Null when the county
            carries none.
      required:
        - lender
        - loan_amount
        - recording_date
      additionalProperties: false
      description: >-
        The purchase loan of a flagged purchase as a deal row names it: the
        lender, the amount and the recording date. The whole loan is the
        financing block of `GET /v3/deals/{id}`.
    LeanTransactionExit:
      type: object
      properties:
        listing_id:
          type: string
          description: >-
            The listing of the feed that closed within 45 days of the resale
            deed: the key to `GET /v3/listings/{id}`.
        sold_on:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The close date of that listing, YYYY-MM-DD. Null when the feed
            carries none.
        sold_price:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The close price of that listing, whole US dollars. Null when the
            feed carries none.
      required:
        - listing_id
        - sold_on
        - sold_price
      additionalProperties: false
      description: >-
        The exit on the MLS: the sold listing of the parcel the feed paired with
        the resale deed. A resale with a listing is a marketed exit.
    LeanTransactionRef:
      type: object
      properties:
        property_id:
          description: >-
            The parcel of a dated transaction, 32 hex characters. With date,
            never with deal_id.
          type: string
          pattern: ^[0-9a-f]{32}$
        date:
          description: The date of the deed, YYYY-MM-DD. With property_id.
          type: string
          format: date
        deal_id:
          description: >-
            The deed of the transaction, 32 hex characters: the key of `GET
            /v3/deals/{id}`. Alone.
          type: string
          pattern: ^[0-9a-f]{32}$
      additionalProperties: false
      description: >-
        One transaction the request names: a parcel id with the date of a deed,
        or a deal id. The answer gives the role of that deed among the investor
        purchases of its parcel.
    LeanTransactionRoleRef:
      type: object
      properties:
        role:
          type: string
          enum:
            - purchase
            - resale
            - none
            - not_found
          description: >-
            purchase: the deed is an investor purchase. resale: the deed is the
            next priced deed after an investor purchase. none: the deed is on
            the parcel and is neither. not_found: no purchase row of the set
            carries that date on the parcel, or the deal id is in no served
            state.
        deal_id:
          anyOf:
            - type: string
              pattern: ^[0-9a-f]{32}$
              description: 'An id of the deed cut: 32 hex characters.'
            - type: 'null'
          description: >-
            The investor purchase the role reads against: an item of
            investor_purchases, or one the since or outcomes filter left out.
            Null on the roles none and not_found.
        outcome:
          anyOf:
            - type: string
              enum:
                - quick_resale
                - flip
                - flip_window_other
                - long_hold_sale
                - held
                - open
              description: >-
                The outcome of the investor purchase, one word over its resale
                and the data end of the state. quick_resale: the next priced
                deed of the parcel is 0 to 29 days after the purchase. flip: the
                next priced deed is 30 to 365 days after the purchase, both legs
                carry a price, and the resale price over the price minus one is
                0.10 to 1.50. flip_window_other: the next priced deed is 30 to
                365 days after the purchase, and the spread is outside that band
                or a leg carries no price. long_hold_sale: the next priced deed
                is more than 365 days after the purchase. held: no later priced
                deed by the data end, and the purchase is more than 365 days
                before the data end. open: no later priced deed by the data end,
                and the purchase is inside the 365 days before the data end, so
                the outcome is not known yet. The thresholds are the ones of the
                organization profile.
            - type: 'null'
          description: >-
            The outcome of that investor purchase. Null on the roles none and
            not_found.
      required:
        - role
        - deal_id
        - outcome
      additionalProperties: false
      description: >-
        One reading of a transaction: its role, and the investor purchase it
        belongs to.
    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.
    LeanOrgProfile:
      type: object
      properties:
        data_end:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The newest purchase date of the state, YYYY-MM-DD: the clock of
            every window and every days count below. Null when the state records
            no dated purchase.
        n_purchases:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Its purchases at arm's length under every rule, each deed counted
            once. The flagged purchases of `deals` are a part of them.
        n_sales:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The deeds on which it sold at arm's length.
        first_purchase_date:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: Its first purchase, YYYY-MM-DD. Null when it sold and never bought.
        last_purchase_date:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: Its last purchase, YYYY-MM-DD. Null when it sold and never bought.
        last_sale_date:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: Its last sale, YYYY-MM-DD. Null when it never sold.
        n_purchases_12m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Its purchases in the 365 days before the data end, the data end
            included.
        n_purchases_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Its purchases in the 730 days before the data end.
        n_purchases_36m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Its purchases in the 1095 days before the data end.
        is_active:
          type: boolean
          description: True when it bought in the 365 days before the data end.
        days_since_last_purchase:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The days from its last purchase to the data end. Null when it never
            bought.
        days_since_last_sale:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The days from its last sale to the data end. Null when it never
            sold.
        median_gap_days:
          description: >-
            The median of the days from one purchase date to the next. Null
            below two distinct purchase dates.
          type:
            - number
            - 'null'
        n_resold:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Its purchases with a later priced deed on the parcel.
        n_held:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: 'Its purchases with no resale: the open inventory.'
        n_quick_resales:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Its purchases resold in 29 days or less.
        n_flips:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Its purchases resold in 30 to 365 days at a spread of 0.10 to 1.50
            over the price.
        n_flip_window_other:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Its purchases resold in 30 to 365 days outside that spread, or with
            no price on one leg.
        n_long_holds_sold:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Its purchases resold after more than 365 days.
        n_builds:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Its resold purchases whose resale deed carries the new-construction
            mark and whose purchase deed does not.
        median_hold_days:
          description: >-
            The median days held over its resold purchases. Null when it resold
            none.
          type:
            - number
            - 'null'
        median_spread:
          description: >-
            The median of the resale price over the price, minus one, over its
            resold purchases with a price on both legs, to three decimals. Null
            when none has both.
          type:
            - number
            - 'null'
        n_priced_purchases:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Its purchases with a price of 20,000 US dollars or more.
        price_p25:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The first quartile of those prices in the band window, whole US
            dollars. Null when it has no priced purchase.
        price_p50:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The median of those prices in the band window, whole US dollars.
            Null when it has no priced purchase.
        price_p75:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The third quartile of those prices in the band window, whole US
            dollars. Null when it has no priced purchase.
        price_band_window:
          anyOf:
            - type: string
              enum:
                - 5y
                - all
            - type: 'null'
          description: >-
            The window of the quartiles. 5y: the five years before the data end,
            when five or more priced purchases fall in them. all: every priced
            purchase. Null when it has no priced purchase.
        n_priced_purchases_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Its priced purchases in the 730 days before the data end. A thin
            organization has one or two, so read the count before the three
            quartiles below.
        price_p25_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The first quartile of the prices of those purchases alone, whole US
            dollars. Null when it has no priced purchase in the 730 days.
        price_p50_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The median of the prices of those purchases alone, whole US dollars.
            Null when it has no priced purchase in the 730 days.
        price_p75_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The third quartile of the prices of those purchases alone, whole US
            dollars. Null when it has no priced purchase in the 730 days.
        n_sfr:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Its purchases of a single-family home.
        n_condo_th:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Its purchases of a condominium or a town house.
        n_other:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Its purchases of another segment, or of none.
        total_price:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            The sum of the prices of its purchases, whole US dollars. Null when
            no purchase carries a price.
        n_bought_from_quick_resellers_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Its purchases in the 730 days before the data end whose seller held
            the parcel 29 days or less: the buyer side of a fast resale, a count
            and no class.
        top_quick_reseller:
          anyOf:
            - type: object
              properties:
                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 seller it bought from the most among those purchases:
                    the key to `GET /v3/orgs/{id}`. Null when the party reads as
                    a person.
                org_name:
                  description: >-
                    The display name of that seller. Null when withheld with the
                    id.
                  type:
                    - string
                    - 'null'
                from_registry:
                  description: >-
                    True for an organization of the business registry, false for
                    a deed name. Null when withheld.
                  type:
                    - boolean
                    - 'null'
              required:
                - org_id
                - org_name
                - from_registry
              additionalProperties: false
            - type: 'null'
          description: >-
            The seller it bought from the most among the purchases counted
            above, the most purchases first, then the lower id. Null when it
            bought from no quick reseller in the window.
        auction:
          anyOf:
            - $ref: '#/components/schemas/LeanOrgAuction'
            - type: 'null'
          description: >-
            Its auction and REO purchases. Null while the profile of the state
            predates the auction counts of stage 5.
      required:
        - data_end
        - n_purchases
        - n_sales
        - first_purchase_date
        - last_purchase_date
        - last_sale_date
        - n_purchases_12m
        - n_purchases_24m
        - n_purchases_36m
        - is_active
        - days_since_last_purchase
        - days_since_last_sale
        - median_gap_days
        - n_resold
        - n_held
        - n_quick_resales
        - n_flips
        - n_flip_window_other
        - n_long_holds_sold
        - n_builds
        - median_hold_days
        - median_spread
        - n_priced_purchases
        - price_p25
        - price_p50
        - price_p75
        - price_band_window
        - n_priced_purchases_24m
        - price_p25_24m
        - price_p50_24m
        - price_p75_24m
        - n_sfr
        - n_condo_th
        - n_other
        - total_price
        - n_bought_from_quick_resellers_24m
        - top_quick_reseller
        - auction
      additionalProperties: false
      description: >-
        The profile of the organization over its purchases and sales at arm's
        length: the counts by rule, the pace, the price band and the holds.
        Every figure is a count, a date or a quantile of observed rows, with no
        kind and no score.
    LeanLenderRef:
      type: object
      properties:
        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: the key to `GET /v3/lenders/{id}` and `GET
            /v3/orgs/{id}`. Null when the loan names no lender, or when the name
            reads as a person.
        org_name:
          description: The display name of the lender. Null when withheld with the id.
          type:
            - string
            - 'null'
        from_registry:
          description: >-
            True for an organization of the business registry, false for a deed
            name. Null when withheld.
          type:
            - boolean
            - 'null'
        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: the party-wide reading of an institutional word, by
              the rule tag_institution of the build. It reads a bank, mortgage,
              loan, lending, funding, finance or servicing word. It also reads a
              credit union, a GSE or HUD form, a public body, a title or escrow
              company and an association. It also reads a school, a hospital, a
              church, a club, an insurer, a pension or retirement plan, a
              securitization or loan trust and a REIT brand. It excludes FBO,
              custodian, IRA, seller financing, insurance trust and the iBuyer
              brands. A bank, a credit union, a public body and a hard-money
              REIT carry it beside their own tag. It never means a bank: a
              mortgage company and an investor lender carry it alike. A tag
              decides no row: a lender keeps its loans and gets a tag. The tags
              of an organization are the union of the tags of its spellings,
              less person when the organization reads as a company. The list can
              grow with the rules of the build: a client keeps an unknown tag.
          description: >-
            The tags of the lender, in the order of the enum. Empty when
            withheld.
      required:
        - org_id
        - org_name
        - from_registry
        - tags
      additionalProperties: false
      description: >-
        A lender organization as a loan row, a ranking row or a parcel block
        names it, under the name rule of the set.
    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.
    LeanOrgAuction:
      type: object
      properties:
        n_auction_buys:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Its purchases at a foreclosure auction: a trustee sale or a sheriff
            sale that passed the five tests of step 06b.
        n_auction_buys_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The same in the 730 days before the data end.
        last_auction_buy_date:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            Its last auction purchase, YYYY-MM-DD. Null when it never bought at
            auction.
        is_active_auction_buyer:
          type: boolean
          description: >-
            True when n_auction_buys_24m is 1 or more: the filter auction of the
            buyers routes.
        n_reo_buys:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Its purchases from a lender, a servicer or an agency after a
            take-back (REO).
        n_reo_buys_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The same in the 730 days before the data end.
        last_reo_buy_date:
          anyOf:
            - type: string
              format: date
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: Its last REO purchase, YYYY-MM-DD. Null when it never bought REO.
        is_active_reo_buyer:
          type: boolean
          description: >-
            True when n_reo_buys_24m is 1 or more: the filter reo of the buyers
            routes.
      required:
        - n_auction_buys
        - n_auction_buys_24m
        - last_auction_buy_date
        - is_active_auction_buyer
        - n_reo_buys
        - n_reo_buys_24m
        - last_reo_buy_date
        - is_active_reo_buyer
      additionalProperties: false
      description: >-
        The purchases of the organization at foreclosure auction and from a
        lender after a take-back, from step 06b through its profile.
  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. The same key works on
        POST /mcp.

````

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