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

# Get the profile of one lender

> One lender, one profile per market: every spelling folded into it, its class and hard-money flag, its loans counted once across both tables. Also its open book, the year and month series, the product mix, pricing, geography and rankings.

The history sees about one open loan in five: a history count is a floor, and the union the origination count. A merged id redirects here (meta.resolved_from), and a retired one is 410 gone. For the loans use `/v1/lenders/{id}/loans`.

[The identity, old ids and why counts are floors](https://developers.investorlift.com/api-reference/endpoints/lenders-get).



## OpenAPI

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


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


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


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


    ```

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

    Authorization: Bearer zpka_...

    ```


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


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


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


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


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


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


        The history sees about one open loan in five: a history count is a
        floor, and the union the origination count. A merged id redirects here
        (meta.resolved_from), and a retired one is 410 gone. For the loans use
        `/v1/lenders/{id}/loans`.


        [The identity, old ids and why counts are
        floors](https://developers.investorlift.com/api-reference/endpoints/lenders-get).
      operationId: getLender
      parameters:
        - schema:
            type: string
            minLength: 1
            maxLength: 16
          in: query
          name: market
          required: false
          description: >-
            Market code, for example phx. The loaded markets are in
            meta.coverage[]. It narrows markets[] to that market. If
            meta.coverage[] does not list it, the API answers 400. If the market
            has no published lender registry, the API answers 422
            lenders_unavailable. Without it the API answers every loaded market
            the lender is in.
        - schema:
            default: 'false'
            type: string
            enum:
              - 'true'
              - 'false'
          in: query
          name: require_current
          required: false
          description: >-
            true refuses the request with 422 dated_refused while the registry's
            source, the financing slice, is a dated snapshot. The default false
            serves it, and meta.dated[] carries the lenders and financing
            blocks.
        - schema:
            type: string
          in: path
          name: id
          required: true
          description: >-
            Lender id, len_ followed by 12 hex characters, for example
            len_d2028f0766fc. Take it from a search hit, a ranking row's
            lender.id or a parcel's financing block. The id is the same in every
            market and stable across data refreshes. The API follows an id from
            an earlier registry run to the current lender, and
            meta.resolved_from lists it. For a retired id with no successor, the
            API answers 410 gone.
      responses:
        '200':
          description: >-
            The lender with a profile per market it is in. meta.resolved_from
            lists the old ids that redirected here.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Lender'
                  meta:
                    $ref: '#/components/schemas/Meta'
                required:
                  - data
                  - meta
                additionalProperties: false
                description: >-
                  The lender with a profile per market it is in.
                  meta.resolved_from lists the old ids that redirected here.
              example:
                data:
                  id: len_d2028f0766fc
                  name: KIAVI FUNDING INC
                  lender_class: NONBANK
                  class_basis: NAME
                  identity_basis: NAME_FOLD
                  is_hard_money: true
                  hard_money_basis: BOTH
                  names:
                    - KIAVI FUNDING INC
                    - KIAVI FUNDING LLC
                    - LENDINGHOME FUNDING CORP
                    - LENDINGHOME FUNDING CORPORATION
                    - LENDING HOME FUNDING CORPORATION
                  n_names: 5
                  profile_gate: SERVED
                  nmls:
                    id: 1125207
                    url: >-
                      https://www.nmlsconsumeraccess.org/EntityDetails.aspx/COMPANY/1125207
                  n_loans_24m: 222
                  volume_24m: 116631491
                  n_open_liens: 332
                  open_balance: 102099717
                  n_markets: 1
                  markets:
                    - market: phx
                      name: KIAVI FUNDING INC
                      lender_class: NONBANK
                      class_basis: NAME
                      identity_basis: NAME_FOLD
                      is_hard_money: true
                      hard_money_basis: BOTH
                      names:
                        - KIAVI FUNDING INC
                        - KIAVI FUNDING LLC
                        - LENDINGHOME FUNDING CORP
                        - LENDINGHOME FUNDING CORPORATION
                        - LENDING HOME FUNDING CORPORATION
                      former_names:
                        - LENDINGHOME FUNDING CORP
                        - LENDINGHOME FUNDING CORPORATION
                        - LENDING HOME FUNDING CORPORATION
                      n_names: 5
                      n_loans: 577
                      n_loans_12m: 181
                      n_loans_24m: 222
                      volume_24m: 116631491
                      n_unpriced_24m: 0
                      n_blanket_positions_24m: 11
                      n_amount_excluded_24m: 0
                      n_parcels: 562
                      n_in_history: 331
                      n_in_history_12m: 36
                      n_in_history_24m: 56
                      n_open_24m: 197
                      n_in_both_24m: 31
                      n_open_liens: 332
                      n_open_first_liens: 308
                      n_open_junior_liens: 24
                      n_open_maturing_12m_from_as_of: null
                      n_open_on_resold_parcels: 45
                      share_due_known: 0.141566
                      open_balance: 102099717
                      n_balance_excluded: 51
                      n_loans_lender_disagrees: 0
                      n_first_lien_24m: 192
                      n_heloc_24m: 0
                      n_construction_24m: 62
                      n_purchase_money_24m: 153
                      n_investor_loans_24m: 152
                      n_borrowers: 418
                      n_borrowers_24m: 109
                      is_investor_lender: true
                      first_recording_date: '2014-02-25'
                      last_recording_date: '2026-06-10'
                      days_before_recordings_through: 1
                      active_12m_to_as_of: true
                      n_before_2002: 0
                      n_undated: 0
                      by_year:
                        - year: 2002
                          n_loans: 0
                          n_in_history: 0
                          n_open: 0
                          volume: 0
                          n_purchase: 0
                          n_investor: 0
                          median_amount: null
                          floor: true
                        - year: 2003
                          n_loans: 0
                          n_in_history: 0
                          n_open: 0
                          volume: 0
                          n_purchase: 0
                          n_investor: 0
                          median_amount: null
                          floor: true
                        - year: 2004
                          n_loans: 0
                          n_in_history: 0
                          n_open: 0
                          volume: 0
                          n_purchase: 0
                          n_investor: 0
                          median_amount: null
                          floor: true
                        - year: 2005
                          n_loans: 0
                          n_in_history: 0
                          n_open: 0
                          volume: 0
                          n_purchase: 0
                          n_investor: 0
                          median_amount: null
                          floor: true
                        - year: 2006
                          n_loans: 0
                          n_in_history: 0
                          n_open: 0
                          volume: 0
                          n_purchase: 0
                          n_investor: 0
                          median_amount: null
                          floor: true
                        - year: 2007
                          n_loans: 0
                          n_in_history: 0
                          n_open: 0
                          volume: 0
                          n_purchase: 0
                          n_investor: 0
                          median_amount: null
                          floor: true
                        - year: 2008
                          n_loans: 0
                          n_in_history: 0
                          n_open: 0
                          volume: 0
                          n_purchase: 0
                          n_investor: 0
                          median_amount: null
                          floor: false
                        - year: 2009
                          n_loans: 0
                          n_in_history: 0
                          n_open: 0
                          volume: 0
                          n_purchase: 0
                          n_investor: 0
                          median_amount: null
                          floor: false
                        - year: 2010
                          n_loans: 0
                          n_in_history: 0
                          n_open: 0
                          volume: 0
                          n_purchase: 0
                          n_investor: 0
                          median_amount: null
                          floor: false
                        - year: 2011
                          n_loans: 0
                          n_in_history: 0
                          n_open: 0
                          volume: 0
                          n_purchase: 0
                          n_investor: 0
                          median_amount: null
                          floor: false
                        - year: 2012
                          n_loans: 0
                          n_in_history: 0
                          n_open: 0
                          volume: 0
                          n_purchase: 0
                          n_investor: 0
                          median_amount: null
                          floor: false
                        - year: 2013
                          n_loans: 0
                          n_in_history: 0
                          n_open: 0
                          volume: 0
                          n_purchase: 0
                          n_investor: 0
                          median_amount: null
                          floor: false
                        - year: 2014
                          n_loans: 23
                          n_in_history: 23
                          n_open: 0
                          volume: 2465900
                          n_purchase: 4
                          n_investor: 18
                          median_amount: 82500
                          floor: false
                        - year: 2015
                          n_loans: 18
                          n_in_history: 19
                          n_open: 0
                          volume: 2473800
                          n_purchase: 4
                          n_investor: 10
                          median_amount: 83850
                          floor: false
                        - year: 2016
                          n_loans: 24
                          n_in_history: 22
                          n_open: 6
                          volume: 4259550
                          n_purchase: 1
                          n_investor: 3
                          median_amount: 143750
                          floor: false
                        - year: 2017
                          n_loans: 84
                          n_in_history: 74
                          n_open: 24
                          volume: 19779055
                          n_purchase: 6
                          n_investor: 7
                          median_amount: 213500
                          floor: false
                        - year: 2018
                          n_loans: 25
                          n_in_history: 15
                          n_open: 13
                          volume: 5351689
                          n_purchase: 7
                          n_investor: 3
                          median_amount: 227500
                          floor: false
                        - year: 2019
                          n_loans: 4
                          n_in_history: 3
                          n_open: 1
                          volume: 1110900
                          n_purchase: 3
                          n_investor: 3
                          median_amount: 212950
                          floor: false
                        - year: 2020
                          n_loans: 17
                          n_in_history: 11
                          n_open: 7
                          volume: 2851300
                          n_purchase: 6
                          n_investor: 15
                          median_amount: 150500
                          floor: false
                        - year: 2021
                          n_loans: 34
                          n_in_history: 21
                          n_open: 20
                          volume: 9095050
                          n_purchase: 14
                          n_investor: 26
                          median_amount: 260500
                          floor: false
                        - year: 2022
                          n_loans: 91
                          n_in_history: 64
                          n_open: 47
                          volume: 29674996
                          n_purchase: 16
                          n_investor: 65
                          median_amount: 307500
                          floor: false
                        - year: 2023
                          n_loans: 25
                          n_in_history: 16
                          n_open: 12
                          volume: 9083184
                          n_purchase: 10
                          n_investor: 20
                          median_amount: 330000
                          floor: false
                        - year: 2024
                          n_loans: 27
                          n_in_history: 18
                          n_open: 16
                          volume: 10451210
                          n_purchase: 6
                          n_investor: 24
                          median_amount: 375000
                          floor: false
                        - year: 2025
                          n_loans: 69
                          n_in_history: 26
                          n_open: 55
                          volume: 39478719
                          n_purchase: 29
                          n_investor: 45
                          median_amount: 412250
                          floor: false
                        - year: 2026
                          n_loans: 136
                          n_in_history: 19
                          n_open: 131
                          volume: 70904962
                          n_purchase: 122
                          n_investor: 91
                          median_amount: 375288
                          floor: false
                      by_month:
                        - month: 2023-07
                          'n': 0
                          volume: 0
                          market_n: 7604
                          share: 0
                          rank: null
                          hard_money_market_n: 64
                          hard_money_rank: null
                          n_purchase_money: 0
                          partial: false
                        - month: 2023-08
                          'n': 1
                          volume: 521500
                          market_n: 8806
                          share: 0.000113559
                          rank: 552
                          hard_money_market_n: 68
                          hard_money_rank: 11
                          n_purchase_money: 0
                          partial: false
                        - month: 2023-09
                          'n': 2
                          volume: 1081700
                          market_n: 6811
                          share: 0.000293643
                          rank: 280
                          hard_money_market_n: 50
                          hard_money_rank: 9
                          n_purchase_money: 1
                          partial: false
                        - month: 2023-10
                          'n': 1
                          volume: 303300
                          market_n: 6769
                          share: 0.000147732
                          rank: 601
                          hard_money_market_n: 77
                          hard_money_rank: 22
                          n_purchase_money: 1
                          partial: false
                        - month: 2023-11
                          'n': 1
                          volume: 277550
                          market_n: 5689
                          share: 0.000175778
                          rank: 562
                          hard_money_market_n: 70
                          hard_money_rank: 18
                          n_purchase_money: 0
                          partial: false
                        - month: 2023-12
                          'n': 1
                          volume: 958300
                          market_n: 6456
                          share: 0.000154895
                          rank: 455
                          hard_money_market_n: 222
                          hard_money_rank: 13
                          n_purchase_money: 1
                          partial: false
                        - month: 2024-01
                          'n': 0
                          volume: 0
                          market_n: 6421
                          share: 0
                          rank: null
                          hard_money_market_n: 92
                          hard_money_rank: null
                          n_purchase_money: 0
                          partial: false
                        - month: 2024-02
                          'n': 1
                          volume: 405000
                          market_n: 7560
                          share: 0.000132275
                          rank: 572
                          hard_money_market_n: 76
                          hard_money_rank: 17
                          n_purchase_money: 1
                          partial: false
                        - month: 2024-03
                          'n': 4
                          volume: 1416600
                          market_n: 8535
                          share: 0.000468658
                          rank: 251
                          hard_money_market_n: 167
                          hard_money_rank: 10
                          n_purchase_money: 2
                          partial: false
                        - month: 2024-04
                          'n': 2
                          volume: 611500
                          market_n: 9431
                          share: 0.000212067
                          rank: 403
                          hard_money_market_n: 191
                          hard_money_rank: 18
                          n_purchase_money: 1
                          partial: false
                        - month: 2024-05
                          'n': 1
                          volume: 630000
                          market_n: 9442
                          share: 0.00010591
                          rank: 584
                          hard_money_market_n: 89
                          hard_money_rank: 24
                          n_purchase_money: 0
                          partial: false
                        - month: 2024-06
                          'n': 2
                          volume: 1140300
                          market_n: 8694
                          share: 0.000230044
                          rank: 360
                          hard_money_market_n: 160
                          hard_money_rank: 15
                          n_purchase_money: 0
                          partial: false
                        - month: 2024-07
                          'n': 1
                          volume: 277000
                          market_n: 9652
                          share: 0.000103605
                          rank: 780
                          hard_money_market_n: 163
                          hard_money_rank: 29
                          n_purchase_money: 0
                          partial: false
                        - month: 2024-08
                          'n': 1
                          volume: 232000
                          market_n: 10234
                          share: 0.000097714
                          rank: 781
                          hard_money_market_n: 80
                          hard_money_rank: 21
                          n_purchase_money: 0
                          partial: false
                        - month: 2024-09
                          'n': 2
                          volume: 571410
                          market_n: 10224
                          share: 0.000195618
                          rank: 443
                          hard_money_market_n: 96
                          hard_money_rank: 13
                          n_purchase_money: 0
                          partial: false
                        - month: 2024-10
                          'n': 3
                          volume: 2193450
                          market_n: 11654
                          share: 0.000257422
                          rank: 337
                          hard_money_market_n: 110
                          hard_money_rank: 9
                          n_purchase_money: 0
                          partial: false
                        - month: 2024-11
                          'n': 8
                          volume: 2396450
                          market_n: 9260
                          share: 0.000863931
                          rank: 176
                          hard_money_market_n: 139
                          hard_money_rank: 4
                          n_purchase_money: 2
                          partial: false
                        - month: 2024-12
                          'n': 2
                          volume: 577500
                          market_n: 9409
                          share: 0.000212562
                          rank: 430
                          hard_money_market_n: 104
                          hard_money_rank: 15
                          n_purchase_money: 0
                          partial: false
                        - month: 2025-01
                          'n': 3
                          volume: 4534700
                          market_n: 7858
                          share: 0.000381777
                          rank: 251
                          hard_money_market_n: 112
                          hard_money_rank: 8
                          n_purchase_money: 0
                          partial: false
                        - month: 2025-02
                          'n': 3
                          volume: 981450
                          market_n: 8389
                          share: 0.000357611
                          rank: 290
                          hard_money_market_n: 127
                          hard_money_rank: 12
                          n_purchase_money: 0
                          partial: false
                        - month: 2025-03
                          'n': 11
                          volume: 4142296
                          market_n: 10507
                          share: 0.001046921
                          rank: 151
                          hard_money_market_n: 371
                          hard_money_rank: 4
                          n_purchase_money: 2
                          partial: false
                        - month: 2025-04
                          'n': 4
                          volume: 834300
                          market_n: 11599
                          share: 0.000344857
                          rank: 313
                          hard_money_market_n: 118
                          hard_money_rank: 9
                          n_purchase_money: 2
                          partial: false
                        - month: 2025-05
                          'n': 3
                          volume: 1556084
                          market_n: 10891
                          share: 0.000275457
                          rank: 328
                          hard_money_market_n: 147
                          hard_money_rank: 14
                          n_purchase_money: 1
                          partial: false
                        - month: 2025-06
                          'n': 0
                          volume: 0
                          market_n: 10529
                          share: 0
                          rank: null
                          hard_money_market_n: 159
                          hard_money_rank: null
                          n_purchase_money: 0
                          partial: false
                        - month: 2025-07
                          'n': 4
                          volume: 2988500
                          market_n: 10826
                          share: 0.000369481
                          rank: 265
                          hard_money_market_n: 170
                          hard_money_rank: 13
                          n_purchase_money: 2
                          partial: false
                        - month: 2025-08
                          'n': 12
                          volume: 9080403
                          market_n: 10977
                          share: 0.001093195
                          rank: 144
                          hard_money_market_n: 129
                          hard_money_rank: 2
                          n_purchase_money: 4
                          partial: false
                        - month: 2025-09
                          'n': 6
                          volume: 3581250
                          market_n: 12192
                          share: 0.000492126
                          rank: 241
                          hard_money_market_n: 151
                          hard_money_rank: 10
                          n_purchase_money: 3
                          partial: false
                        - month: 2025-10
                          'n': 6
                          volume: 2669786
                          market_n: 12926
                          share: 0.000464181
                          rank: 276
                          hard_money_market_n: 196
                          hard_money_rank: 9
                          n_purchase_money: 4
                          partial: false
                        - month: 2025-11
                          'n': 7
                          volume: 4839100
                          market_n: 10382
                          share: 0.000674244
                          rank: 206
                          hard_money_market_n: 191
                          hard_money_rank: 7
                          n_purchase_money: 5
                          partial: false
                        - month: 2025-12
                          'n': 10
                          volume: 4270850
                          market_n: 12996
                          share: 0.000769468
                          rank: 204
                          hard_money_market_n: 252
                          hard_money_rank: 7
                          n_purchase_money: 6
                          partial: false
                        - month: 2026-01
                          'n': 16
                          volume: 8799600
                          market_n: 9932
                          share: 0.001610954
                          rank: 115
                          hard_money_market_n: 247
                          hard_money_rank: 4
                          n_purchase_money: 14
                          partial: false
                        - month: 2026-02
                          'n': 25
                          volume: 16022272
                          market_n: 11878
                          share: 0.002104731
                          rank: 86
                          hard_money_market_n: 280
                          hard_money_rank: 3
                          n_purchase_money: 22
                          partial: false
                        - month: 2026-03
                          'n': 22
                          volume: 15088315
                          market_n: 14394
                          share: 0.001528415
                          rank: 112
                          hard_money_market_n: 437
                          hard_money_rank: 5
                          n_purchase_money: 20
                          partial: false
                        - month: 2026-04
                          'n': 32
                          volume: 13615400
                          market_n: 13956
                          share: 0.002292921
                          rank: 82
                          hard_money_market_n: 376
                          hard_money_rank: 3
                          n_purchase_money: 29
                          partial: false
                        - month: 2026-05
                          'n': 31
                          volume: 12585225
                          market_n: 12542
                          share: 0.002471695
                          rank: 78
                          hard_money_market_n: 372
                          hard_money_rank: 4
                          n_purchase_money: 28
                          partial: false
                        - month: 2026-06
                          'n': 10
                          volume: 4794150
                          market_n: 4302
                          share: 0.0023245
                          rank: 78
                          hard_money_market_n: 195
                          hard_money_rank: 5
                          n_purchase_money: 9
                          partial: true
                      by_product_24m:
                        - value: OTHER
                          'n': 160
                          share: 0.720721
                        - value: CONSTRUCTION
                          'n': 62
                          share: 0.279279
                      by_term_band_24m:
                        - value: UNKNOWN
                          'n': 189
                          share: 0.851351
                        - value: GE_360M
                          'n': 33
                          share: 0.148649
                      by_product_proxy_24m:
                        - value: RENTAL_TERM
                          'n': 33
                          share: 0.148649
                      by_loan_type_24m:
                        - value: Commercial
                          'n': 137
                          share: 0.617117
                        - value: Building or Construction Loan
                          'n': 62
                          share: 0.279279
                        - value: New Conventional
                          'n': 23
                          share: 0.103604
                      by_label_24m: []
                      n_unlabelled_24m: 56
                      by_property_type_24m:
                        - value: Residential
                          'n': 222
                          share: 1
                      share_non_owner_occupied_24m: 0.688372
                      by_purpose_24m:
                        - value: PURCHASE
                          'n': 153
                          share: 0.689189
                        - value: NOT_PURCHASE
                          'n': 68
                          share: 0.306306
                        - value: UNKNOWN
                          'n': 1
                          share: 0.004505
                      by_outcome_24m:
                        - value: OPEN
                          'n': 65
                          share: 0.59633
                        - value: RESOLVED_BY_RESALE
                          'n': 43
                          share: 0.394495
                        - value: UNKNOWN
                          'n': 1
                          share: 0.009174
                      median_months_to_payoff: 3.7
                      terms:
                        window: 24m
                        amount:
                          p25: 268200
                          p50: 380500
                          p75: 686025
                          'n': 222
                        rate:
                          p25: 6.11
                          p50: 6.22
                          p75: 6.65
                          'n': 181
                          share_rated: 0.815315
                        term:
                          median_months: 360
                          share_le_24m: null
                          share_25_120m: null
                          share_121_359m: null
                          share_ge_360m: null
                          'n': 33
                          share_term_known: 0.148649
                        loan_to_avm:
                          p25: 0.7486
                          p50: 0.8544
                          p75: 1.0706
                          'n': 197
                        loan_to_price:
                          p25: 1.0515
                          p50: 1.1472
                          p75: 1.2638
                          'n': 153
                        estimated_payment_p50: 16665
                      geography:
                        by_county:
                          - value: '04013'
                            n_24m: 222
                            n_all: 577
                            volume_24m: 116631491
                            share_of_lender: 1
                            rank_in_geo: 176
                            share_of_geo: 0.00085592
                        by_city:
                          - value: PHOENIX
                            n_24m: 88
                            n_all: 219
                            volume_24m: 40755939
                            share_of_lender: 0.396396
                            rank_in_geo: 126
                            share_of_geo: 0.001316341
                          - value: SCOTTSDALE
                            n_24m: 41
                            n_all: 79
                            volume_24m: 41422297
                            share_of_lender: 0.184685
                            rank_in_geo: 82
                            share_of_geo: 0.002153814
                          - value: MESA
                            n_24m: 16
                            n_all: 54
                            volume_24m: 6417550
                            share_of_lender: 0.072072
                            rank_in_geo: 224
                            share_of_geo: 0.000567295
                          - value: GLENDALE
                            n_24m: 15
                            n_all: 40
                            volume_24m: 3997725
                            share_of_lender: 0.067568
                            rank_in_geo: 148
                            share_of_geo: 0.001015847
                          - value: TEMPE
                            n_24m: 10
                            n_all: 19
                            volume_24m: 6083400
                            share_of_lender: 0.045045
                            rank_in_geo: 101
                            share_of_geo: 0.001732802
                          - value: GILBERT
                            n_24m: 9
                            n_all: 28
                            volume_24m: 2661250
                            share_of_lender: 0.040541
                            rank_in_geo: 221
                            share_of_geo: 0.000583544
                          - value: CHANDLER
                            n_24m: 8
                            n_all: 34
                            volume_24m: 2867750
                            share_of_lender: 0.036036
                            rank_in_geo: 224
                            share_of_geo: 0.000564772
                          - value: SURPRISE
                            n_24m: 8
                            n_all: 16
                            volume_24m: 2203250
                            share_of_lender: 0.036036
                            rank_in_geo: 201
                            share_of_geo: 0.000527044
                          - value: PEORIA
                            n_24m: 5
                            n_all: 19
                            volume_24m: 3366800
                            share_of_lender: 0.022523
                            rank_in_geo: 252
                            share_of_geo: 0.000386458
                          - value: BUCKEYE
                            n_24m: 4
                            n_all: 8
                            volume_24m: 1264546
                            share_of_lender: 0.018018
                            rank_in_geo: 267
                            share_of_geo: 0.000308404
                          - value: SUN CITY WEST
                            n_24m: 4
                            n_all: 6
                            volume_24m: 1108900
                            share_of_lender: 0.018018
                            rank_in_geo: 90
                            share_of_geo: 0.002004008
                          - value: GOODYEAR
                            n_24m: 3
                            n_all: 11
                            volume_24m: 983284
                            share_of_lender: 0.013514
                            rank_in_geo: 247
                            share_of_geo: 0.000332447
                          - value: SUN CITY
                            n_24m: 3
                            n_all: 6
                            volume_24m: 1140700
                            share_of_lender: 0.013514
                            rank_in_geo: 161
                            share_of_geo: 0.000766675
                          - value: AVONDALE
                            n_24m: 2
                            n_all: 8
                            volume_24m: 330000
                            share_of_lender: 0.009009
                            rank_in_geo: 279
                            share_of_geo: 0.000376152
                          - value: QUEEN CREEK
                            n_24m: 2
                            n_all: 5
                            volume_24m: 922600
                            share_of_lender: 0.009009
                            rank_in_geo: 326
                            share_of_geo: 0.000277624
                          - value: LITCHFIELD PARK
                            n_24m: 1
                            n_all: 6
                            volume_24m: 223600
                            share_of_lender: 0.004505
                            rank_in_geo: 408
                            share_of_geo: 0.000272926
                          - value: LAVEEN
                            n_24m: 1
                            n_all: 4
                            volume_24m: 381900
                            share_of_lender: 0.004505
                            rank_in_geo: 348
                            share_of_geo: 0.000220119
                          - value: TONOPAH
                            n_24m: 1
                            n_all: 3
                            volume_24m: 297500
                            share_of_lender: 0.004505
                            rank_in_geo: 184
                            share_of_geo: 0.000821018
                          - value: TOLLESON
                            n_24m: 1
                            n_all: 2
                            volume_24m: 202500
                            share_of_lender: 0.004505
                            rank_in_geo: 311
                            share_of_geo: 0.00030931
                          - value: CAVE CREEK
                            n_24m: 0
                            n_all: 2
                            volume_24m: 0
                            share_of_lender: 0
                            rank_in_geo: null
                            share_of_geo: null
                        by_zip:
                          - value: '85254'
                            n_24m: 10
                            n_all: 16
                            volume_24m: 13894647
                            share_of_lender: 0.045045
                            rank_in_geo: 54
                            share_of_geo: 0.00325309
                          - value: '85040'
                            n_24m: 10
                            n_all: 12
                            volume_24m: 2411950
                            share_of_lender: 0.045045
                            rank_in_geo: 34
                            share_of_geo: 0.005966587
                          - value: '85258'
                            n_24m: 8
                            n_all: 12
                            volume_24m: 8691550
                            share_of_lender: 0.036036
                            rank_in_geo: 44
                            share_of_geo: 0.00464846
                          - value: '85301'
                            n_24m: 7
                            n_all: 15
                            volume_24m: 1168800
                            share_of_lender: 0.031532
                            rank_in_geo: 49
                            share_of_geo: 0.00401837
                          - value: '85018'
                            n_24m: 7
                            n_all: 12
                            volume_24m: 7311400
                            share_of_lender: 0.031532
                            rank_in_geo: 60
                            share_of_geo: 0.002911814
                          - value: '85251'
                            n_24m: 6
                            n_all: 13
                            volume_24m: 3980250
                            share_of_lender: 0.027027
                            rank_in_geo: 67
                            share_of_geo: 0.002557545
                          - value: '85021'
                            n_24m: 6
                            n_all: 6
                            volume_24m: 3621250
                            share_of_lender: 0.027027
                            rank_in_geo: 48
                            share_of_geo: 0.003771213
                          - value: '85032'
                            n_24m: 5
                            n_all: 12
                            volume_24m: 2128100
                            share_of_lender: 0.022523
                            rank_in_geo: 104
                            share_of_geo: 0.00154321
                          - value: '85008'
                            n_24m: 4
                            n_all: 13
                            volume_24m: 2125100
                            share_of_lender: 0.018018
                            rank_in_geo: 63
                            share_of_geo: 0.002700878
                          - value: '85016'
                            n_24m: 4
                            n_all: 11
                            volume_24m: 2795700
                            share_of_lender: 0.018018
                            rank_in_geo: 94
                            share_of_geo: 0.001977261
                          - value: '85257'
                            n_24m: 4
                            n_all: 11
                            volume_24m: 2275400
                            share_of_lender: 0.018018
                            rank_in_geo: 71
                            share_of_geo: 0.002525253
                          - value: '85282'
                            n_24m: 4
                            n_all: 7
                            volume_24m: 1829900
                            share_of_lender: 0.018018
                            rank_in_geo: 87
                            share_of_geo: 0.002108593
                          - value: '85019'
                            n_24m: 4
                            n_all: 6
                            volume_24m: 798350
                            share_of_lender: 0.018018
                            rank_in_geo: 56
                            share_of_geo: 0.004136505
                          - value: '85023'
                            n_24m: 4
                            n_all: 6
                            volume_24m: 1671600
                            share_of_lender: 0.018018
                            rank_in_geo: 68
                            share_of_geo: 0.002469136
                          - value: '85255'
                            n_24m: 4
                            n_all: 6
                            volume_24m: 6696800
                            share_of_lender: 0.018018
                            rank_in_geo: 123
                            share_of_geo: 0.001355014
                          - value: '85375'
                            n_24m: 4
                            n_all: 6
                            volume_24m: 1108900
                            share_of_lender: 0.018018
                            rank_in_geo: 90
                            share_of_geo: 0.002004008
                          - value: '85086'
                            n_24m: 4
                            n_all: 5
                            volume_24m: 4288293
                            share_of_lender: 0.018018
                            rank_in_geo: 106
                            share_of_geo: 0.001508865
                          - value: '85028'
                            n_24m: 4
                            n_all: 4
                            volume_24m: 2435400
                            share_of_lender: 0.018018
                            rank_in_geo: 56
                            share_of_geo: 0.003187251
                          - value: '85033'
                            n_24m: 3
                            n_all: 11
                            volume_24m: 609700
                            share_of_lender: 0.013514
                            rank_in_geo: 104
                            share_of_geo: 0.001616379
                          - value: '85308'
                            n_24m: 3
                            n_all: 9
                            volume_24m: 1280450
                            share_of_lender: 0.013514
                            rank_in_geo: 155
                            share_of_geo: 0.000818331
                          - value: '85249'
                            n_24m: 3
                            n_all: 8
                            volume_24m: 1431900
                            share_of_lender: 0.013514
                            rank_in_geo: 149
                            share_of_geo: 0.00103484
                          - value: '85035'
                            n_24m: 3
                            n_all: 7
                            volume_24m: 802900
                            share_of_lender: 0.013514
                            rank_in_geo: 79
                            share_of_geo: 0.002120141
                          - value: '85250'
                            n_24m: 3
                            n_all: 7
                            volume_24m: 1638200
                            share_of_lender: 0.013514
                            rank_in_geo: 84
                            share_of_geo: 0.002247191
                          - value: '85295'
                            n_24m: 3
                            n_all: 7
                            volume_24m: 694500
                            share_of_lender: 0.013514
                            rank_in_geo: 154
                            share_of_geo: 0.001111523
                          - value: '85006'
                            n_24m: 3
                            n_all: 6
                            volume_24m: 1145850
                            share_of_lender: 0.013514
                            rank_in_geo: 82
                            share_of_geo: 0.003064351
                          - value: '85009'
                            n_24m: 3
                            n_all: 6
                            volume_24m: 974986
                            share_of_lender: 0.013514
                            rank_in_geo: 86
                            share_of_geo: 0.001908397
                          - value: '85260'
                            n_24m: 3
                            n_all: 6
                            volume_24m: 1724550
                            share_of_lender: 0.013514
                            rank_in_geo: 155
                            share_of_geo: 0.001323335
                          - value: '85022'
                            n_24m: 3
                            n_all: 5
                            volume_24m: 1418500
                            share_of_lender: 0.013514
                            rank_in_geo: 113
                            share_of_geo: 0.001285898
                          - value: '85204'
                            n_24m: 3
                            n_all: 5
                            volume_24m: 2881700
                            share_of_lender: 0.013514
                            rank_in_geo: 114
                            share_of_geo: 0.00125261
                          - value: '85326'
                            n_24m: 3
                            n_all: 5
                            volume_24m: 1007800
                            share_of_lender: 0.013514
                            rank_in_geo: 220
                            share_of_geo: 0.000357356
                          - value: '85208'
                            n_24m: 3
                            n_all: 4
                            volume_24m: 594200
                            share_of_lender: 0.013514
                            rank_in_geo: 118
                            share_of_geo: 0.001539251
                          - value: '85304'
                            n_24m: 3
                            n_all: 4
                            volume_24m: 1014475
                            share_of_lender: 0.013514
                            rank_in_geo: 91
                            share_of_geo: 0.002039429
                          - value: '85041'
                            n_24m: 2
                            n_all: 11
                            volume_24m: 522300
                            share_of_lender: 0.009009
                            rank_in_geo: 236
                            share_of_geo: 0.000595948
                          - value: '85015'
                            n_24m: 2
                            n_all: 9
                            volume_24m: 506910
                            share_of_lender: 0.009009
                            rank_in_geo: 151
                            share_of_geo: 0.001336898
                          - value: '85051'
                            n_24m: 2
                            n_all: 9
                            volume_24m: 303000
                            share_of_lender: 0.009009
                            rank_in_geo: 169
                            share_of_geo: 0.001043297
                          - value: '85020'
                            n_24m: 2
                            n_all: 8
                            volume_24m: 1038100
                            share_of_lender: 0.009009
                            rank_in_geo: 165
                            share_of_geo: 0.001028278
                          - value: '85383'
                            n_24m: 2
                            n_all: 8
                            volume_24m: 2520000
                            share_of_lender: 0.009009
                            rank_in_geo: 250
                            share_of_geo: 0.000318522
                          - value: '85338'
                            n_24m: 2
                            n_all: 7
                            volume_24m: 748684
                            share_of_lender: 0.009009
                            rank_in_geo: 261
                            share_of_geo: 0.000295639
                          - value: '85345'
                            n_24m: 2
                            n_all: 7
                            volume_24m: 516300
                            share_of_lender: 0.009009
                            rank_in_geo: 208
                            share_of_geo: 0.00066357
                          - value: '85007'
                            n_24m: 2
                            n_all: 6
                            volume_24m: 463800
                            share_of_lender: 0.009009
                            rank_in_geo: 89
                            share_of_geo: 0.00304878
                          - value: '85027'
                            n_24m: 2
                            n_all: 5
                            volume_24m: 447300
                            share_of_lender: 0.009009
                            rank_in_geo: 180
                            share_of_geo: 0.001052078
                          - value: '85142'
                            n_24m: 2
                            n_all: 5
                            volume_24m: 922600
                            share_of_lender: 0.009009
                            rank_in_geo: 326
                            share_of_geo: 0.000277624
                          - value: '85234'
                            n_24m: 2
                            n_all: 5
                            volume_24m: 567900
                            share_of_lender: 0.009009
                            rank_in_geo: 214
                            share_of_geo: 0.000746826
                          - value: '85296'
                            n_24m: 2
                            n_all: 5
                            volume_24m: 723850
                            share_of_lender: 0.009009
                            rank_in_geo: 202
                            share_of_geo: 0.000724113
                          - value: '85323'
                            n_24m: 2
                            n_all: 5
                            volume_24m: 330000
                            share_of_lender: 0.009009
                            rank_in_geo: 189
                            share_of_geo: 0.000683293
                          - value: '85374'
                            n_24m: 2
                            n_all: 5
                            volume_24m: 505100
                            share_of_lender: 0.009009
                            rank_in_geo: 179
                            share_of_geo: 0.000863185
                          - value: '85248'
                            n_24m: 2
                            n_all: 4
                            volume_24m: 594000
                            share_of_lender: 0.009009
                            rank_in_geo: 187
                            share_of_geo: 0.000987167
                          - value: '85351'
                            n_24m: 2
                            n_all: 4
                            volume_24m: 726000
                            share_of_lender: 0.009009
                            rank_in_geo: 162
                            share_of_geo: 0.000754717
                          - value: '85388'
                            n_24m: 2
                            n_all: 4
                            volume_24m: 749800
                            share_of_lender: 0.009009
                            rank_in_geo: 193
                            share_of_geo: 0.000677277
                          - value: '85209'
                            n_24m: 2
                            n_all: 3
                            volume_24m: 328250
                            share_of_lender: 0.009009
                            rank_in_geo: 180
                            share_of_geo: 0.000923361
                        n_zips_24m: 90
                        concentration_top3_zips: 0.126126
                      coverage:
                        market: phx
                        counties:
                          - '04013'
                        n_parcels_uncovered: 224192
                        as_of: '2026-06-25'
                        recordings_through: '2026-06-11'
                        dated: true
                        history_capture_share: 0.183706
                      rankings:
                        rank_24m: 176
                        share_24m: 0.000856
                        rank_by_volume_24m: 150
                        rank_in_class_24m: 123
                        rank_hard_money_24m: 5
                        share_of_hard_money_24m: 0.046202
                        rank_purchase_24m: 108
                        share_by_volume_24m: 0.001196
                        n_zips_ranked_first_24m: 0
                        n_cities_ranked_first_24m: 0
                        n_counties_ranked_first_24m: null
                      borrowers:
                        n_borrowers: 418
                        n_borrowers_24m: 109
                        n_resolved_24m: 85
                        share_resolved_24m: 0.779817
                        borrower_measured_share: 0.908146
                        n_repeat_24m: 32
                        n_new_12m: 78
                        n_churned_12m: 0
                        churn_measured: false
                        top_borrowers:
                          - borrower_key: 722461175d36
                            name: LR PROPERTIES LLC
                            investor:
                              id: inv_63c4b7a3aa67
                              name: LR PROPERTIES LLC
                              display_name: LR PROPERTIES LLC
                              kind: BUILDER
                              kinds:
                                - BUILDER
                                - FLIPPER
                                - WHOLESALER
                                - LANDLORD
                              scale: mid
                              institutional: false
                              n_deals: 62
                              last_bought_on: '2026-05-06'
                            is_entity: true
                            is_person: false
                            borrower_match: ENTITY_NAME
                            n_loans: 14
                            n_loans_24m: 14
                            volume_24m: 3325950
                            last_loan_on: '2026-05-12'
                          - borrower_key: 5dfa009f2de4
                            name: ALPHA INVESTMENT GROUP AZ INC
                            investor:
                              id: inv_9a6a8f07a8c9
                              name: ALPHA INVESTMENT GROUP AZ INC
                              display_name: ALPHA INVESTMENT GROUP AZ INC
                              kind: FLIPPER
                              kinds:
                                - FLIPPER
                                - WHOLESALER
                                - LANDLORD
                              scale: large
                              institutional: false
                              n_deals: 291
                              last_bought_on: '2026-08-19'
                            is_entity: true
                            is_person: false
                            borrower_match: DEAL
                            n_loans: 8
                            n_loans_24m: 8
                            volume_24m: 4568534
                            last_loan_on: '2026-06-01'
                          - borrower_key: 556115d5641d
                            name: PRS AZ 1 LLC
                            investor: null
                            is_entity: true
                            is_person: false
                            borrower_match: OWNER_OF_RECORD
                            n_loans: 6
                            n_loans_24m: 6
                            volume_24m: 2538200
                            last_loan_on: '2025-03-28'
                          - borrower_key: 6f79a741a269
                            name: BRYCE RE LLC
                            investor:
                              id: inv_b43ea3cbd8f7
                              name: BRYCE RE LLC
                              display_name: BRYCE RE LLC
                              kind: LANDLORD
                              kinds:
                                - LANDLORD
                              scale: small
                              institutional: false
                              n_deals: 5
                              last_bought_on: '2024-11-20'
                            is_entity: true
                            is_person: false
                            borrower_match: OWNER_OF_RECORD
                            n_loans: 5
                            n_loans_24m: 5
                            volume_24m: 1345400
                            last_loan_on: '2024-11-25'
                          - borrower_key: e1a6d19e29f2
                            name: MTS 7540 LLC
                            investor:
                              id: inv_22038fe8a6b7
                              name: MTS 7540 LLC
                              display_name: MTS 7540 LLC
                              kind: FLIPPER
                              kinds:
                                - FLIPPER
                                - LANDLORD
                              scale: mid
                              institutional: false
                              n_deals: 18
                              last_bought_on: '2026-08-05'
                            is_entity: true
                            is_person: false
                            borrower_match: ENTITY_NAME
                            n_loans: 4
                            n_loans_24m: 4
                            volume_24m: 1884000
                            last_loan_on: '2026-06-10'
                          - borrower_key: eb6c06957756
                            name: ROMAN OFFERS LLC
                            investor:
                              id: inv_1641b2dbf2b8
                              name: ROMAN OFFERS LLC
                              display_name: ROMAN OFFERS LLC
                              kind: FLIPPER
                              kinds:
                                - FLIPPER
                                - WHOLESALER
                                - LANDLORD
                              scale: mid
                              institutional: false
                              n_deals: 42
                              last_bought_on: '2026-08-21'
                            is_entity: true
                            is_person: false
                            borrower_match: DEAL
                            n_loans: 4
                            n_loans_24m: 4
                            volume_24m: 1236000
                            last_loan_on: '2026-05-15'
                          - borrower_key: 3bfb431cf181
                            name: BETTER ASSETS AZ
                            investor:
                              id: inv_47e09d161ab4
                              name: BETTER ASSETS AZ INC
                              display_name: BETTER ASSETS AZ INC
                              kind: FLIPPER
                              kinds:
                                - FLIPPER
                                - WHOLESALER
                                - LANDLORD
                              scale: large
                              institutional: false
                              n_deals: 106
                              last_bought_on: '2026-07-29'
                            is_entity: true
                            is_person: false
                            borrower_match: DEAL
                            n_loans: 5
                            n_loans_24m: 3
                            volume_24m: 1914510
                            last_loan_on: '2026-03-26'
                          - borrower_key: 3f162f563199
                            name: ASTON DEVELOPMENT LLC
                            investor:
                              id: inv_21082668efac
                              name: ASTON DEVELOPMENT LLC
                              display_name: ASTON DEVELOPMENT LLC
                              kind: FLIPPER
                              kinds:
                                - FLIPPER
                                - BUILDER
                                - WHOLESALER
                                - LANDLORD
                              scale: mid
                              institutional: false
                              n_deals: 49
                              last_bought_on: '2026-08-19'
                            is_entity: true
                            is_person: false
                            borrower_match: ENTITY_NAME
                            n_loans: 3
                            n_loans_24m: 3
                            volume_24m: 766050
                            last_loan_on: '2026-05-13'
                          - borrower_key: 4203fa51bfd6
                            name: SPN ESTATES LLC
                            investor:
                              id: inv_5ef24b0ed413
                              name: SPN ESTATES LLC
                              display_name: SPN ESTATES LLC
                              kind: LANDLORD
                              kinds:
                                - LANDLORD
                              scale: small
                              institutional: false
                              n_deals: 5
                              last_bought_on: '2018-12-18'
                            is_entity: true
                            is_person: false
                            borrower_match: ENTITY_NAME
                            n_loans: 3
                            n_loans_24m: 3
                            volume_24m: 694500
                            last_loan_on: '2026-04-30'
                          - borrower_key: 55971d2e78c0
                            name: SARU MANAGEMENT LLC
                            investor:
                              id: inv_bc9ab275d4f6
                              name: SARU MANAGEMENT LLC
                              display_name: SARU MANAGEMENT LLC
                              kind: LANDLORD
                              kinds:
                                - LANDLORD
                              scale: small
                              institutional: false
                              n_deals: 2
                              last_bought_on: '2025-02-10'
                            is_entity: true
                            is_person: false
                            borrower_match: ENTITY_NAME
                            n_loans: 3
                            n_loans_24m: 3
                            volume_24m: 586746
                            last_loan_on: '2025-04-08'
                        competing_lenders:
                          - lender:
                              id: len_b959a8d2abef
                              name: CAPITAL FUND I LLC
                              lender_class: NONBANK
                              is_hard_money: true
                            n_shared_borrowers_24m: 6
                            n_shared_borrowers_all: 25
                          - lender:
                              id: len_3b2d93fee452
                              name: MERCHANTS FUNDING AZ LLC
                              lender_class: NONBANK
                              is_hard_money: true
                            n_shared_borrowers_24m: 5
                            n_shared_borrowers_all: 9
                          - lender:
                              id: len_04af9cb68d51
                              name: CONSTRUCTION LOAN SERVICES LLC
                              lender_class: NONBANK
                              is_hard_money: false
                            n_shared_borrowers_24m: 3
                            n_shared_borrowers_all: 3
                          - lender:
                              id: len_e28e16f5bdfd
                              name: UNITED WHOLESALE MORTGAGE LLC
                              lender_class: NONBANK
                              is_hard_money: false
                            n_shared_borrowers_24m: 1
                            n_shared_borrowers_all: 16
                          - lender:
                              id: len_0116ed5aef33
                              name: SELL WHOLESALE FUNDING LLC
                              lender_class: NONBANK
                              is_hard_money: true
                            n_shared_borrowers_24m: 1
                            n_shared_borrowers_all: 7
                          - lender:
                              id: len_223de92ccb91
                              name: KAYAK CAPITAL LLC
                              lender_class: NONBANK
                              is_hard_money: true
                            n_shared_borrowers_24m: 1
                            n_shared_borrowers_all: 6
                          - lender:
                              id: len_f62ae683c034
                              name: FAIRWAY INDEPENDENT MORTGAGE CORP
                              lender_class: NONBANK
                              is_hard_money: false
                            n_shared_borrowers_24m: 1
                            n_shared_borrowers_all: 5
                          - lender:
                              id: len_28c85b9d7495
                              name: EMPORIUM TPO LLC
                              lender_class: NONBANK
                              is_hard_money: false
                            n_shared_borrowers_24m: 1
                            n_shared_borrowers_all: 3
                          - lender:
                              id: len_6b0c46c8812e
                              name: FRANK WEST CAPITAL LLC
                              lender_class: NONBANK
                              is_hard_money: true
                            n_shared_borrowers_24m: 1
                            n_shared_borrowers_all: 3
                          - lender:
                              id: len_856b687230d6
                              name: RCN CAPITAL LLC
                              lender_class: NONBANK
                              is_hard_money: true
                            n_shared_borrowers_24m: 1
                            n_shared_borrowers_all: 3
                        person_names_redacted: false
                      investor_lending:
                        n_investor_loans: 330
                        n_investor_loans_12m: 122
                        n_investor_loans_24m: 152
                        share_investor_loans_24m: 0.684685
                        n_investors_24m: 78
                        by_investor_kind_24m:
                          - value: LANDLORD
                            'n': 143
                            share: 0.940789
                          - value: FLIPPER
                            'n': 114
                            share: 0.75
                          - value: WHOLESALER
                            'n': 83
                            share: 0.546053
                          - value: BUILDER
                            'n': 44
                            share: 0.289474
                        n_deals_financed: 148
                        n_deals_financed_24m: 105
                        by_deal_kind:
                          - value: hold
                            'n': 85
                            n_24m: 63
                          - value: flip
                            'n': 45
                            n_24m: 34
                          - value: long_hold
                            'n': 9
                            n_24m: 1
                          - value: other
                            'n': 6
                            n_24m: 4
                          - value: wholesale
                            'n': 3
                            n_24m: 3
                        n_auction_purchases_financed_24m: 1
                        n_wholesale_purchases_financed_24m: 11
                        top_investors:
                          - investor:
                              id: inv_63c4b7a3aa67
                              name: LR PROPERTIES LLC
                              display_name: LR PROPERTIES LLC
                              kind: BUILDER
                              kinds:
                                - BUILDER
                                - FLIPPER
                                - WHOLESALER
                                - LANDLORD
                              scale: mid
                              institutional: false
                              n_deals: 62
                              last_bought_on: '2026-05-06'
                            n_loans_24m: 14
                            volume_24m: 3325950
                            last_loan_on: '2026-05-12'
                          - investor:
                              id: inv_9a6a8f07a8c9
                              name: ALPHA INVESTMENT GROUP AZ INC
                              display_name: ALPHA INVESTMENT GROUP AZ INC
                              kind: FLIPPER
                              kinds:
                                - FLIPPER
                                - WHOLESALER
                                - LANDLORD
                              scale: large
                              institutional: false
                              n_deals: 291
                              last_bought_on: '2026-08-19'
                            n_loans_24m: 8
                            volume_24m: 4568534
                            last_loan_on: '2026-06-01'
                          - investor:
                              id: inv_22038fe8a6b7
                              name: MTS 7540 LLC
                              display_name: MTS 7540 LLC
                              kind: FLIPPER
                              kinds:
                                - FLIPPER
                                - LANDLORD
                              scale: mid
                              institutional: false
                              n_deals: 18
                              last_bought_on: '2026-08-05'
                            n_loans_24m: 6
                            volume_24m: 2574600
                            last_loan_on: '2026-06-10'
                          - investor:
                              id: inv_6013d0d5f618
                              name: BELLA RENOVATIONS LLC
                              display_name: BELLA RENOVATIONS LLC
                              kind: FLIPPER
                              kinds:
                                - FLIPPER
                                - WHOLESALER
                                - LANDLORD
                              scale: mid
                              institutional: false
                              n_deals: 90
                              last_bought_on: '2026-08-13'
                            n_loans_24m: 5
                            volume_24m: 1407600
                            last_loan_on: '2026-04-27'
                          - investor:
                              id: inv_b43ea3cbd8f7
                              name: BRYCE RE LLC
                              display_name: BRYCE RE LLC
                              kind: LANDLORD
                              kinds:
                                - LANDLORD
                              scale: small
                              institutional: false
                              n_deals: 5
                              last_bought_on: '2024-11-20'
                            n_loans_24m: 5
                            volume_24m: 1345400
                            last_loan_on: '2024-11-25'
                          - investor:
                              id: inv_1641b2dbf2b8
                              name: ROMAN OFFERS LLC
                              display_name: ROMAN OFFERS LLC
                              kind: FLIPPER
                              kinds:
                                - FLIPPER
                                - WHOLESALER
                                - LANDLORD
                              scale: mid
                              institutional: false
                              n_deals: 42
                              last_bought_on: '2026-08-21'
                            n_loans_24m: 4
                            volume_24m: 1236000
                            last_loan_on: '2026-05-15'
                          - investor:
                              id: inv_33f82b595b17
                              name: POLING WELLNESS LLC
                              display_name: POLING WELLNESS LLC
                              kind: FLIPPER
                              kinds:
                                - FLIPPER
                                - BUILDER
                                - WHOLESALER
                                - LANDLORD
                              scale: mid
                              institutional: false
                              n_deals: 45
                              last_bought_on: '2026-05-27'
                            n_loans_24m: 3
                            volume_24m: 7653547
                            last_loan_on: '2026-03-30'
                          - investor:
                              id: inv_c4536f759290
                              name: SS ANTHEM LLC
                              display_name: SS ANTHEM LLC
                              kind: LANDLORD
                              kinds:
                                - LANDLORD
                              scale: small
                              institutional: false
                              n_deals: 4
                              last_bought_on: '2011-12-13'
                            n_loans_24m: 3
                            volume_24m: 3335700
                            last_loan_on: '2025-08-11'
                          - investor:
                              id: inv_bf3579cb4639
                              name: NEUPAD LLC
                              display_name: NEUPAD LLC
                              kind: FLIPPER
                              kinds:
                                - FLIPPER
                                - LANDLORD
                              scale: mid
                              institutional: false
                              n_deals: 15
                              last_bought_on: '2025-11-18'
                            n_loans_24m: 3
                            volume_24m: 2237900
                            last_loan_on: '2025-11-20'
                          - investor:
                              id: inv_0d8fb4f85747
                              name: ALDER & FINCH LLC
                              display_name: ALDER & FINCH LLC
                              kind: FLIPPER
                              kinds:
                                - FLIPPER
                                - WHOLESALER
                                - LANDLORD
                              scale: mid
                              institutional: false
                              n_deals: 13
                              last_bought_on: '2026-08-18'
                            n_loans_24m: 3
                            volume_24m: 2135000
                            last_loan_on: '2026-06-03'
                        is_investor_lender: true
                      flips_financed:
                        window_from: '2023-04-27'
                        window_to: '2026-04-27'
                        n_flips_captured: 38
                        capture_share: 0.03946
                        n_flips_by_known_borrowers: 925
                        n_resold: 38
                        n_resold_priced: 38
                        median_gross_profit: 150000
                        p25_gross_profit: 96175
                        p75_gross_profit: 294625
                        median_spread_ratio: 0.508437
                        median_hold_days: 123.5
                        median_loan_to_price: 1.1232
                        share_of_financed_flips: 0.044444
                        by_year:
                          - year: 2023
                            n_flips_captured: 1
                            n_resold: 1
                            median_gross_profit: null
                          - year: 2024
                            n_flips_captured: 3
                            n_resold: 3
                            median_gross_profit: null
                          - year: 2025
                            n_flips_captured: 8
                            n_resold: 8
                            median_gross_profit: null
                          - year: 2026
                            n_flips_captured: 26
                            n_resold: 26
                            median_gross_profit: 145000
                      takebacks:
                        n_takebacks: 3
                        n_takebacks_24m: 0
                        by_instrument:
                          - value: TRUSTEES_DEED
                            'n': 2
                            share: 0.666667
                          - value: DEED_IN_LIEU
                            'n': 1
                            share: 0.333333
                        n_loans_foreclosed: 0
                        n_takebacks_unlinked: 3
                        foreclosure_share: 0
                        median_days_takeback_to_resale: 102
                        is_auction_lender: false
                      successor: null
                      nmls:
                        id: 1125207
                        url: >-
                          https://www.nmlsconsumeraccess.org/EntityDetails.aspx/COMPANY/1125207
                      id_history: []
                      summary: >-
                        KIAVI FUNDING INC is a non-bank lender, flagged hard
                        money by its name and its behaviour, with 222 loans
                        recorded in the 24 months to 2026-06-25 (rank 176 among
                        the market's lenders by loans in the window, 0.09% of
                        its instruments), 332 open lien positions at that date
                        and 577 instruments on file since 2014. Its window loans
                        concentrate in PHOENIX (39.6% of them) and its largest
                        ZIP is 85254 (4.5%). The product mix in the window is
                        72.1% other (conventional and everything not flagged),
                        27.9% construction. Registered investors took 68.5% of
                        its window loans: an investor lender by behaviour, and
                        it financed 105 investor purchases the deeds can tie to
                        it; 153 of its window loans financed a purchase by the
                        deeds. The term is known on 14.9% of its instruments
                        (median 360 months); the median loan is $380,500. Its
                        last recording is 2026-06-10, 1 day before the slice's
                        last recording. Counts join the open-lien and
                        recorded-history tables with an instrument counted once;
                        the recorded history is a partial feed, so the older
                        years are a floor.
                      as_of: '2026-06-25'
                      recordings_through: '2026-06-11'
                      dated: true
                      data_end: '2026-08-27'
                      history_capture_share: 0.183706
                      history_floor_year: 2008
                      history_floor_p50: 2004
                      share_parcels_with_lost_history: 0.188759
                      purchase_measured: true
                      investor_lending_measured: true
                      flips_measured: true
                      borrowers_measured: true
                      takebacks_measured: true
                      counties_measured: false
                meta:
                  generated_at: '2026-09-15T12:00:00.000Z'
                  coverage:
                    - market: phx
                      state: AZ
                      counties:
                        - fips: '04013'
                          name: Maricopa
                          data_end: '2026-08-12'
                        - fips: '04021'
                          name: Pinal
                          data_end: '2026-08-06'
                      bbox:
                        - -113.332773
                        - 32.46915
                        - -110.455491
                        - 33.999503
                      data_end: '2026-08-27'
                      build_run_id: 3
                      registry_run: 11
                      registry_version: v6-auction
                      dataset_version: 1789533180
                      loaded_at: '2026-09-16T04:32:59.760Z'
                      metro_buy_to_resale_ratio: 0.719
                      universe_kind: metro
                      universe_zips: null
                      point_tolerance_miles: 20
                      n_parcels: 1836311
                      listings_data_end: '2026-08-31'
                      agents_data_end: '2026-08-31'
                      wholesale_as_of: '2026-09-09'
                      str_as_of: '2026-09-10'
                      str:
                        jurisdictions:
                          - name: APACHE_JUNCTION
                            regime: NOT_REQUIRED
                            coverage_reason: NO_REQUIREMENT
                            served: false
                            snapshot_only: false
                            licence_start: null
                            snapshot_date: null
                            feed_stale: false
                            sources: []
                            n_licensed: 0
                            n_pending: 0
                            n_expired: 0
                            n_advertised: 0
                            share_unmatched: null
                            share_assumed: null
                          - name: AVONDALE
                            regime: REQUIRED
                            coverage_reason: REQUIRED_NOT_PUBLISHED
                            served: false
                            snapshot_only: false
                            licence_start: null
                            snapshot_date: null
                            feed_stale: false
                            sources: []
                            n_licensed: 0
                            n_pending: 0
                            n_expired: 0
                            n_advertised: 0
                            share_unmatched: null
                            share_assumed: null
                      auction_counted: true
                      parcel_as_of: '2026-08-27'
                      address_as_of: null
                      parcel:
                        parcel_as_of: '2026-08-27'
                        n_parcels: 1836311
                        sale_mortgage_measured: false
                        financing:
                          as_of: '2026-06-25'
                          dated: true
                          dated_reason: dataset not in current delivery
                          n_parcels: 1611957
                          n_with_open_lien: 1032808
                          n_free_and_clear: 579149
                          n_avm: 1528967
                          n_involuntary: 192400
                          n_lenders: 76212
                        permits:
                          as_of: '2026-09-01'
                          n_permits: 2377496
                          n_parcels: 663045
                          n_unmatched: 355
                          jurisdictions:
                            - jurisdiction: PHOENIX
                              n_permits: 795764
                              last_issue_date: '2026-05-11'
                              windows_measured: null
                            - jurisdiction: MESA
                              n_permits: 330809
                              last_issue_date: '2026-05-29'
                              windows_measured: null
                            - jurisdiction: MARICOPA COUNTY
                              n_permits: 217628
                              last_issue_date: '2027-10-17'
                              windows_measured: null
                            - jurisdiction: SCOTTSDALE
                              n_permits: 182189
                              last_issue_date: '2024-11-05'
                              windows_measured: null
                            - jurisdiction: GOODYEAR
                              n_permits: 173391
                              last_issue_date: '2025-04-02'
                              windows_measured: null
                            - jurisdiction: GILBERT
                              n_permits: 160199
                              last_issue_date: '2025-04-07'
                              windows_measured: null
                            - jurisdiction: TEMPE
                              n_permits: 102909
                              last_issue_date: '2025-12-29'
                              windows_measured: null
                            - jurisdiction: BUCKEYE
                              n_permits: 94951
                              last_issue_date: '2026-03-18'
                              windows_measured: null
                            - jurisdiction: CHANDLER
                              n_permits: 94942
                              last_issue_date: '2026-05-29'
                              windows_measured: null
                            - jurisdiction: PEORIA
                              n_permits: 75435
                              last_issue_date: '2026-05-07'
                              windows_measured: null
                            - jurisdiction: QUEEN CREEK
                              n_permits: 59103
                              last_issue_date: '2026-04-24'
                              windows_measured: null
                            - jurisdiction: null
                              n_permits: 43845
                              last_issue_date: '2026-06-05'
                              windows_measured: null
                            - jurisdiction: PARADISE VALLEY
                              n_permits: 23135
                              last_issue_date: '2026-04-24'
                              windows_measured: null
                            - jurisdiction: AVONDALE
                              n_permits: 7961
                              last_issue_date: '2026-04-24'
                              windows_measured: null
                            - jurisdiction: MARICOPA
                              n_permits: 5732
                              last_issue_date: '2026-12-12'
                              windows_measured: null
                            - jurisdiction: YOUNGTOWN
                              n_permits: 3979
                              last_issue_date: '2026-06-05'
                              windows_measured: null
                            - jurisdiction: EL MIRAGE
                              n_permits: 1971
                              last_issue_date: '2026-04-13'
                              windows_measured: null
                            - jurisdiction: YUMA
                              n_permits: 1909
                              last_issue_date: '2009-01-15'
                              windows_measured: null
                            - jurisdiction: FOUNTAIN HILLS
                              n_permits: 767
                              last_issue_date: '2026-05-21'
                              windows_measured: null
                            - jurisdiction: ELMIRAGE
                              n_permits: 521
                              last_issue_date: '2025-08-08'
                              windows_measured: null
                            - jurisdiction: SUN CITY
                              n_permits: 133
                              last_issue_date: null
                              windows_measured: null
                            - jurisdiction: COCONINO COUNTY
                              n_permits: 63
                              last_issue_date: '2024-02-16'
                              windows_measured: null
                            - jurisdiction: PINAL COUNTY
                              n_permits: 54
                              last_issue_date: '2022-07-21'
                              windows_measured: null
                            - jurisdiction: APACHE JUNCTION
                              n_permits: 47
                              last_issue_date: '2025-05-13'
                              windows_measured: null
                            - jurisdiction: PIMA COUNTY
                              n_permits: 21
                              last_issue_date: '2016-10-24'
                              windows_measured: null
                            - jurisdiction: WITTMANN
                              n_permits: 8
                              last_issue_date: '2026-02-03'
                              windows_measured: null
                            - jurisdiction: JACKSON COUNTY
                              n_permits: 7
                              last_issue_date: null
                              windows_measured: null
                            - jurisdiction: LEWISVILLE
                              n_permits: 5
                              last_issue_date: '2024-02-07'
                              windows_measured: null
                            - jurisdiction: MONTGOMERY
                              n_permits: 4
                              last_issue_date: '2023-06-05'
                              windows_measured: null
                            - jurisdiction: RIVERSIDE COUNTY
                              n_permits: 3
                              last_issue_date: '2026-06-20'
                              windows_measured: null
                            - jurisdiction: LITCHFIELD PARK
                              n_permits: 3
                              last_issue_date: null
                              windows_measured: null
                            - jurisdiction: APACHE JUNCTION - SEWER UTILITY
                              n_permits: 2
                              last_issue_date: '2026-05-07'
                              windows_measured: null
                            - jurisdiction: FORT WORTH
                              n_permits: 2
                              last_issue_date: null
                              windows_measured: null
                            - jurisdiction: YAVAPAI COUNTY
                              n_permits: 1
                              last_issue_date: null
                              windows_measured: null
                            - jurisdiction: LOCUST GROVE
                              n_permits: 1
                              last_issue_date: null
                              windows_measured: null
                            - jurisdiction: ORO VALLEY
                              n_permits: 1
                              last_issue_date: null
                              windows_measured: null
                            - jurisdiction: TANGIPAHOA
                              n_permits: 1
                              last_issue_date: '2019-05-28'
                              windows_measured: null
                        owner_profile:
                          as_of: '2026-09-09'
                          n_parcels: 1611077
                          n_multi: 646963
                          n_portfolio_5: 277841
                        history:
                          first_week: '2025-07-24'
                          last_week: '2026-09-09'
                          zips:
                            - '85251'
                          n_parcels: 18774
                          n_events: 236022
                          n_weeks: 62
                          domains:
                            tax:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 18597
                            deed:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 17615
                            sale:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 1700
                            listing:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 21122
                            mailing:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 2128
                            vacancy:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 2583
                            financing:
                              first_week: '2025-12-02'
                              last_week: '2026-06-25'
                              n_events: 6420
                            occupancy:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 1297
                            ownership:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 3238
                            structure:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 2548
                            valuation:
                              first_week: '2025-07-24'
                              last_week: '2026-06-25'
                              n_events: 83657
                            assessment:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 16450
                            owner_profile:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 58404
                            classification:
                              first_week: '2025-07-24'
                              last_week: '2026-09-09'
                              n_events: 263
                      lenders:
                        as_of: '2026-06-25'
                        recordings_through: '2026-06-11'
                        counties:
                          - '04013'
                        history_capture_share: 0.183706
                        n_lender_ids: 32046
                        purchase_measured: true
                        investor_lending_measured: true
                        flips_measured: true
                        borrowers_measured: true
                        takebacks_measured: true
                        counties_measured: false
                        dated: true
                        n_parcels_uncovered: 224192
                  dated:
                    - block: financing
                      as_of: '2026-06-25'
                      reason: dataset not in current delivery
                    - block: lenders
                      as_of: '2026-06-25'
                      reason: dataset not in current delivery
                  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
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
            X-Rows:
              $ref: '#/components/headers/X-Rows'
            X-Dataset-Version:
              $ref: '#/components/headers/X-Dataset-Version'
            X-Data-End:
              $ref: '#/components/headers/X-Data-End'
        '400':
          description: >-
            Bad request (dataset_unavailable, geometry_conflict,
            geometry_required, invalid_cursor, invalid_id, market_required,
            quicklist_unavailable, sort_requires_point, unknown_parameter,
            validation_error)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                geometry_conflict:
                  summary: Geometry conflict
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#geometry_conflict
                    title: Geometry conflict
                    status: 400
                    code: geometry_conflict
                    detail: >-
                      You cannot combine radius_miles with bbox. Send one
                      geometry only.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                geometry_required:
                  summary: Geometry required
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#geometry_required
                    title: Geometry required
                    status: 400
                    code: geometry_required
                    detail: >-
                      The request needs one geometry: lat and lng with
                      radius_miles, bbox, property_id, zip (a list) or city.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                invalid_cursor:
                  summary: Invalid cursor
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#invalid_cursor
                    title: Invalid cursor
                    status: 400
                    code: invalid_cursor
                    detail: >-
                      The API issued the cursor for another query. Restart from
                      page 1.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                invalid_id:
                  summary: Invalid id
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#invalid_id
                    title: Invalid id
                    status: 400
                    code: invalid_id
                    detail: >-
                      An investor id is inv_ followed by 12 hex characters. The
                      prefix is part of the id.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                market_required:
                  summary: Market required
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#market_required
                    title: Market required
                    status: 400
                    code: market_required
                    detail: >-
                      inv_0a20a550f33b exists in 2 loaded markets. Pass market=.
                      The codes are in markets[].
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    markets:
                      - phx
                      - hou
                    errors:
                      - param: market
                        message: one of phx, hou
                        code: market_required
                sort_requires_point:
                  summary: Sort requires a reference point
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#sort_requires_point
                    title: Sort requires a reference point
                    status: 400
                    code: sort_requires_point
                    detail: >-
                      sort=distance needs a reference point: add lat and lng, or
                      property_id.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                unknown_parameter:
                  summary: Unknown parameter
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#unknown_parameter
                    title: Unknown parameter
                    status: 400
                    code: unknown_parameter
                    detail: >-
                      The query carries a parameter this endpoint does not
                      define: kind[]. Write the list as kind=flip,hold or as
                      repeated keys.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    errors:
                      - param: kind[]
                        message: unknown parameter
                        code: unknown_parameter
                validation_error:
                  summary: Validation error
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#validation_error
                    title: Validation error
                    status: 400
                    code: validation_error
                    detail: radius_miles must be 20 or less.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    errors:
                      - param: radius_miles
                        message: must be 20 or less
                        code: too_big
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '401':
          description: Unauthorized (unauthorized)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                unauthorized:
                  summary: Unauthorized
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#unauthorized
                    title: Unauthorized
                    status: 401
                    code: unauthorized
                    detail: 'Send Authorization: Bearer with a current key.'
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '403':
          description: >-
            Forbidden (payment_overdue, plan_limit, quota_exceeded,
            subscription_required)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                plan_limit:
                  summary: Plan limit
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#plan_limit
                    title: Plan limit
                    status: 403
                    code: plan_limit
                    detail: >-
                      The free plan searches within 5 miles of a point, a
                      viewport up to 10 miles across, or one ZIP code. Your zip
                      parameter lists 2 ZIP codes. Upgrade in the developer
                      console for city-wide and multi-ZIP searches.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    tier: free
                    limit: geometry
                    max_radius_miles: 5
                    max_bbox_diagonal_miles: 10
                    max_zips: 1
                quota_exceeded:
                  summary: Quota exceeded
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#quota_exceeded
                    title: Quota exceeded
                    status: 403
                    code: quota_exceeded
                    detail: >-
                      Your requests spent the plan's credits for this billing
                      period (5000 of 5000). Wait for the period to reset on the
                      subscription's billing date, or upgrade in the developer
                      console.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    used: 5000
                    line: 5000
                subscription_required:
                  summary: Subscription required
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#subscription_required
                    title: Subscription required
                    status: 403
                    code: subscription_required
                    detail: >-
                      This key has no active plan subscription. Subscribe in the
                      developer console.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                payment_overdue:
                  summary: Payment overdue
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#payment_overdue
                    title: Payment overdue
                    status: 403
                    code: payment_overdue
                    detail: >-
                      The subscription's payment is overdue and the grace period
                      passed. Update the card under Manage Billing in the
                      developer console.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '404':
          description: Not found (not_found)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                not_found:
                  summary: Not found
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#not_found
                    title: Not found
                    status: 404
                    code: not_found
                    detail: No such deal in any loaded market.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '406':
          description: Not acceptable (not_acceptable)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                not_acceptable:
                  summary: Not acceptable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#not_acceptable
                    title: Not acceptable
                    status: 406
                    code: not_acceptable
                    detail: >-
                      Accept text/html names no representation this endpoint
                      produces (application/json).
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '410':
          description: >-
            Gone: a retired investor, agent or lender id, with superseded_by
            (gone)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                gone:
                  summary: Gone
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#gone
                    title: Gone
                    status: 410
                    code: gone
                    detail: >-
                      The registry retired investor inv_003c1db2782c in run 8
                      (RETIRED). No current investor holds its names. Use
                      /v1/investors/search instead.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    superseded_by: null
                    reason: RETIRED
                    market: phx
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '422':
          description: >-
            Unprocessable (addresses_unavailable, agents_unavailable,
            ambiguous_address, ambiguous_apn, auction_unavailable,
            cash_sale_unavailable, dated_refused, history_unavailable,
            lenders_unavailable, listings_unavailable, outside_coverage,
            parcels_unavailable, str_unavailable, wholesale_unavailable)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                agents_unavailable:
                  summary: Agents unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#agents_unavailable
                    title: Agents unavailable
                    status: 422
                    code: agents_unavailable
                    detail: >-
                      This market has no published agent registry. See
                      meta.coverage[].agents_data_end.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                auction_unavailable:
                  summary: Auction counts unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#auction_unavailable
                    title: Auction counts unavailable
                    status: 422
                    code: auction_unavailable
                    detail: >-
                      This market has no published foreclosure-auction counts:
                      its registry predates them. So the API cannot answer
                      buys_at_auction, buys_reo and bought_auction_kind there,
                      and meta.coverage[].auction_counted is false for it. Drop
                      the parameter to list every row.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                lenders_unavailable:
                  summary: Lenders unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#lenders_unavailable
                    title: Lenders unavailable
                    status: 422
                    code: lenders_unavailable
                    detail: >-
                      Market hou has no published lender registry
                      (meta.coverage[].lenders is null there). The API still
                      serves the financing block on parcels where the slice is.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    markets:
                      - hou
                listings_unavailable:
                  summary: Listings unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#listings_unavailable
                    title: Listings unavailable
                    status: 422
                    code: listings_unavailable
                    detail: >-
                      You gave listing_status for a market with no published
                      listing tables. See meta.coverage[].listings_data_end.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                outside_coverage:
                  summary: Outside coverage
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#outside_coverage
                    title: Outside coverage
                    status: 422
                    code: outside_coverage
                    detail: >-
                      The point 40.712776, -74.005974 is outside every loaded
                      market's point tolerance (loaded: phx, hou). See
                      meta.coverage[].bbox and point_tolerance_miles on any list
                      response.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                str_unavailable:
                  summary: Short-term rental data unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#str_unavailable
                    title: Short-term rental data unavailable
                    status: 422
                    code: str_unavailable
                    detail: >-
                      This market has no published short-term rental tables. See
                      meta.coverage[].str_as_of.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                wholesale_unavailable:
                  summary: Wholesale transactions unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#wholesale_unavailable
                    title: Wholesale transactions unavailable
                    status: 422
                    code: wholesale_unavailable
                    detail: >-
                      This market has no published Investorlift wholesale
                      tables. See meta.coverage[].wholesale_as_of.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '429':
          description: Rate limited, with Retry-After (rate_limited)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                rate_limited:
                  summary: Rate limited
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#rate_limited
                    title: Rate limited
                    status: 429
                    code: rate_limited
                    detail: >-
                      The request exceeded the per-key budget. Retry in 12
                      seconds.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    retry_after: 12
                    bucket: key
          headers:
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '500':
          description: Internal error (internal_error)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                internal_error:
                  summary: Internal error
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#internal_error
                    title: Internal error
                    status: 500
                    code: internal_error
                    detail: The request failed. Quote request_id when you report it.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '503':
          description: >-
            Unavailable, with Retry-After on pool_saturated and
            ledger_unavailable (database_unavailable, ledger_unavailable,
            pool_saturated)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                database_unavailable:
                  summary: Database unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#database_unavailable
                    title: Database unavailable
                    status: 503
                    code: database_unavailable
                    detail: >-
                      The service failed to reach the database and did not run
                      the request.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                ledger_unavailable:
                  summary: Ledger unavailable
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#ledger_unavailable
                    title: Ledger unavailable
                    status: 503
                    code: ledger_unavailable
                    detail: >-
                      The credit ledger is unreachable. The API charged nothing.
                      Retry in 5 seconds.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
                    retry_after: 5
                pool_saturated:
                  summary: Pool saturated
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#pool_saturated
                    title: Pool saturated
                    status: 503
                    code: pool_saturated
                    detail: >-
                      No pooled connection was free. The service did not run the
                      request.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '504':
          description: Statement timeout (statement_timeout)
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
              examples:
                statement_timeout:
                  summary: Statement timeout
                  value:
                    type: >-
                      https://developers.investorlift.com/guides/concepts/errors#statement_timeout
                    title: Statement timeout
                    status: 504
                    code: statement_timeout
                    detail: >-
                      The query exceeded the 10 second statement timeout. Narrow
                      the geometry or filters.
                    instance: /v1/lenders/{id}
                    request_id: 6f1c2a8e-3b7d-4f21-9a0c-2e5b81d7a4f3
          headers:
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
components:
  schemas:
    Lender:
      type: object
      properties:
        id:
          type: string
          pattern: ^len_[0-9a-f]{12}$
          description: >-
            Lender id: len_ followed by 12 hex characters, for example
            len_3f9a1c27b4e0. The registry mints the id from the lender's folded
            name, so the same lender carries the same id in every market, stable
            across data refreshes. A hand-kept dictionary row can merge two
            spellings into one lender. The API then follows the old id from the
            earlier registry run to that lender and lists it in
            meta.resolved_from. A retired id with no successor answers 410 gone.
            Store the whole id, prefix included, as the identity.
        name:
          type: string
          description: >-
            The lender's display name in its lead market, upper case as the file
            writes it, for example KIAVI FUNDING INC. The lead market is the
            market with the most loans in the window. The name can change under
            a stable id, so it is never a key. It is a business name, and the
            API serves it to every key.
        lender_class:
          type: string
          enum:
            - BANK
            - NONBANK
            - PRIVATE
            - INDIVIDUAL
            - GOVERNMENT
          description: >-
            A reading of the name, never a legal status. The parcel financing
            block carries the same reading. How the lender name reads. BANK: a
            bank, credit union or thrift. NONBANK: a mortgage company or other
            lending business. PRIVATE: a trust, a seller carry-back or another
            private party, not the hard-money sense of private lender, which the
            Lender object carries as is_hard_money. INDIVIDUAL: a person's name.
            GOVERNMENT: an agency or a public body.
        class_basis:
          anyOf:
            - type: string
              enum:
                - NAME
                - DICTIONARY
              description: >-
                Why the class reads as it does. NAME: the name rules of the
                registry, read on the folded name. The rules apply the
                government, bank, trust, lending and person vocabularies in that
                order. So KS STATEBANK reads BANK, and a trust with lender words
                reads NONBANK. DICTIONARY: a hand-kept row overrides the name's
                reading, for example BBVA USA as a BANK. Null on a registry
                built before the registry recorded a basis.
            - type: 'null'
        identity_basis:
          type: string
          enum:
            - NAME_FOLD
            - TRUNCATED_PREFIX
            - ALIAS_DICTIONARY
          description: >-
            How the registry ties the spelling to its lender: NAME_FOLD means
            the folded name alone joins them. The fold uses upper case, drops
            punctuation and entity suffixes and spells out abbreviations: WELLS
            FARGO BANK NA and WELLS FARGO BANK N.A. are one. TRUNCATED_PREFIX:
            the file cut the name at 30 or 40 characters, and the registry
            joined it to the one longer name that starts with it.
            ALIAS_DICTIONARY: a hand-kept row joined it, for a rename such as
            QUICKEN LOANS to ROCKET MORTGAGE, a trade name or a charter form. A
            row also covers a spelling the same instrument carries both ways.
            The registry never merges acquisitions.
        is_hard_money:
          type: boolean
          description: >-
            True when the name carries hard-money vocabulary or is a known
            hard-money brand, or when the book behaves like one. The field
            hard_money_basis says which, and the behaviour test needs the
            market's deed link. A PRIVATE lender_class is a trust or a seller
            carry-back, not this. The hard_money filter of the list reads this
            flag.
        hard_money_basis:
          anyOf:
            - type: string
              enum:
                - NAME
                - BEHAVIOUR
                - BOTH
              description: >-
                Why is_hard_money is true: NAME means the name carries
                hard-money vocabulary such as BRIDGE, FIX AND FLIP, REHAB,
                PRIVATE MONEY or a numbered FUND. A known brand such as KIAVI,
                LIMA ONE or RCN CAPITAL also counts as NAME. FUNDING, CAPITAL
                and LENDING alone never qualify. BEHAVIOUR: the lender is not a
                bank and has 20 or more loans since 2015. A quarter or more of
                those loans sit within 45 days of a registered investor's
                purchase. BOTH: name and behaviour.
            - type: 'null'
          description: >-
            Null when is_hard_money is false. Why is_hard_money is true: NAME
            means the name carries hard-money vocabulary such as BRIDGE, FIX AND
            FLIP, REHAB, PRIVATE MONEY or a numbered FUND. A known brand such as
            KIAVI, LIMA ONE or RCN CAPITAL also counts as NAME. FUNDING, CAPITAL
            and LENDING alone never qualify. BEHAVIOUR: the lender is not a bank
            and has 20 or more loans since 2015. A quarter or more of those
            loans sit within 45 days of a registered investor's purchase. BOTH:
            name and behaviour.
        names:
          type: array
          items:
            type: string
            description: One spelling, as the file writes it.
          description: >-
            Every spelling across the markets, the lead market's first. These
            are business names, and the API serves them to every key.
        n_names:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: How many spellings names holds.
        profile_gate:
          type: string
          enum:
            - SERVED
            - BELOW_PERSON_THRESHOLD
            - PLACEHOLDER
          description: >-
            The profile gate of the identity: SERVED means it has a profile, the
            only value a served lender carries. BELOW_PERSON_THRESHOLD: a
            person-named lender, class INDIVIDUAL or PRIVATE, with fewer than 10
            loans or fewer than 5 parcels. Such a lender has no id, no search
            hit and no profile, and its name stays on the parcel financing block
            only. PLACEHOLDER: a name such as NOT AVAILABLE, NOT PROVIDED or
            UNKNOWN, with no id. The market's coverage counts the two hidden
            values, and the API never serves them as rows.
        nmls:
          anyOf:
            - $ref: '#/components/schemas/LenderNmls'
            - type: 'null'
          description: >-
            The NMLS id and the NMLS Consumer Access page it opens. The registry
            curates the id by hand for the largest lenders. The block is the
            lead market's, and the same lender carries one id everywhere. Null
            where the lender has no curated id, and on a registry built before
            phase 4.
        n_loans_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Instruments recorded in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock, summed
            over markets[].
        volume_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Sum of the loan amounts of the priced instruments in the 24 months
            ending on `as_of` (730 days, inclusive), as of `as_of`, the slice
            date, never the clock, whole dollars, summed over markets[] after
            each market profile's exclusions. The exclusions count a blanket
            group once and leave out amounts above $5,000,000. 0 when none
            carries a price.
        n_open_liens:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Open lien positions at `as_of`, summed over markets[].
        open_balance:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The lender's open balance after the exclusions each market profile
            describes, whole dollars, summed over markets[]. 0 when none.
        n_markets:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: 'How many markets the lender has a profile in: the length of markets.'
        markets:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/LenderMarketProfile'
          description: >-
            The per-market profiles, most loans in the window first. One entry
            when market= names one. Each carries its own ranks, coverage, as_of
            and dated. The union totals above are their sums.
      required:
        - id
        - name
        - lender_class
        - class_basis
        - identity_basis
        - is_hard_money
        - hard_money_basis
        - names
        - n_names
        - profile_gate
        - nmls
        - n_loans_24m
        - volume_24m
        - n_open_liens
        - open_balance
        - n_markets
        - markets
      additionalProperties: false
      description: >-
        One lender: who it is, its totals across the loaded markets, and a
        profile per market. The identity is the names, the class, the hard-money
        flag and how the registry established the identity. Nothing in any
        delivery carries a lender's phone or email, so no such block exists.
    Meta:
      type: object
      properties:
        generated_at:
          type: string
          description: >-
            When the API produced this response, ISO 8601. It does not change
            the ETag.
        weights:
          description: >-
            The effective match weights, one per factor, rounded to 4 decimals
            (buyers/match only). The API rescales the weights of the scored
            factors to sum 1 before it reports them.
          type: object
          propertyNames:
            type: string
          additionalProperties:
            type: number
        reference_point:
          description: >-
            The point the API measures every distance in the response from: lat
            + lng, or the centre of the property_id parcel. Absent with a bare
            bbox.
          type: object
          properties:
            lat:
              type: number
              minimum: -90
              maximum: 90
              description: Latitude of the reference point.
            lng:
              type: number
              minimum: -180
              maximum: 180
              description: Longitude of the reference point.
          required:
            - lat
            - lng
          additionalProperties: false
        geometry:
          $ref: '#/components/schemas/MetaGeometry'
          description: >-
            The location that ran, defaults filled and keyed as the query is
            (see MetaGeometry), on REST only: the MCP meta carries
            reference_point alone. Present on every route that takes a location:
            the deal lists, summary and cells, the investors, wholesale listings
            and short-term rental parcels, and `/v1/buyers/match`. Also on the
            comps of a parcel, kind radius around the subject and property_id
            the subject, and on POST `/v1/properties/search` (a county-only body
            echoes nothing). The lender list and a lender's loans carry it when
            you gave a geometry, a zip or a city. They apply a geometry as the
            H3 res-8 cells whose centre lies inside it, and echo no county,
            because MetaGeometry has no county slot. Absent on a route with no
            location, and on `/v1/properties/resolve`, whose lat + lng is a hint
            for the nearest parcel, not an area that ran.
        resolved_from:
          description: >-
            Present when an id in the request was an old id from an earlier data
            refresh: the old ids the API followed, in order. The ids are the
            investor id, from the path or the investor_id filter, the agent id
            and the lender id. The lender id comes from the path of the lender
            routes, the financed_by filter or filters.financing.lender_id. Store
            the id the response carries, not the old one.
          type: array
          items:
            type: string
            pattern: ^(inv|agt|len)_[0-9a-f]{12}$
            description: >-
              An investor id (inv_...), a listing agent id (agt_...) or a lender
              id (len_...).
        coverage:
          type: array
          items:
            $ref: '#/components/schemas/Coverage'
          description: >-
            The markets the response draws on, with their counties, data end
            dates and data versions.
        dated:
          description: >-
            Present when the response carries a block that is a dated snapshot
            at its as-of date, not current data. Those blocks are the financing,
            lien and valuation blocks of the parcel products. One entry per
            dated block, with its as-of date. Absent when nothing in the
            response is dated.
          type: array
          items:
            $ref: '#/components/schemas/Dated'
        terms:
          type: string
          description: Attribution and data-use terms for the data in this response.
      required:
        - generated_at
        - coverage
        - terms
      additionalProperties: false
      description: >-
        Response metadata: when the API produced it, which markets it covers,
        and how fresh they are.
    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.
    LenderNmls:
      type: object
      properties:
        id:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The NMLS id (Nationwide Multistate Licensing System), for example
            1120. The registry keeps it by hand for the largest lenders.
        url:
          type: string
          description: >-
            The NMLS Consumer Access page for that id, for example
            https://www.nmlsconsumeraccess.org/EntityDetails.aspx/COMPANY/1120:
            the lender's licences and registrations as the regulators publish
            them.
      required:
        - id
        - url
      additionalProperties: false
      description: >-
        The NMLS id the registry keeps by hand for the largest lenders, and the
        NMLS Consumer Access page it opens. Null where the registry keeps none.
    LenderMarketProfile:
      type: object
      properties:
        market:
          type: string
          description: >-
            Market code, for example phx. The loaded markets are in
            meta.coverage[]. A lender has the same id in every market and a
            profile per market.
        name:
          type: string
          description: >-
            The lender's display name, upper case as the file writes it, for
            example KIAVI FUNDING INC. This is the spelling with the most rows
            in the window, or the newest spelling after a recorded rename. For
            example, ROCKET MORTGAGE LLC, not QUICKEN LOANS INC. It can change
            under a stable id. Never use it as a key. A business name, and the
            API serves it to every key.
        lender_class:
          type: string
          enum:
            - BANK
            - NONBANK
            - PRIVATE
            - INDIVIDUAL
            - GOVERNMENT
          description: >-
            A reading of the name, never a legal status. The parcel financing
            block carries the same reading. How the lender name reads. BANK: a
            bank, credit union or thrift. NONBANK: a mortgage company or other
            lending business. PRIVATE: a trust, a seller carry-back or another
            private party, not the hard-money sense of private lender, which the
            Lender object carries as is_hard_money. INDIVIDUAL: a person's name.
            GOVERNMENT: an agency or a public body.
        class_basis:
          anyOf:
            - type: string
              enum:
                - NAME
                - DICTIONARY
              description: >-
                Why the class reads as it does. NAME: the name rules of the
                registry, read on the folded name. The rules apply the
                government, bank, trust, lending and person vocabularies in that
                order. So KS STATEBANK reads BANK, and a trust with lender words
                reads NONBANK. DICTIONARY: a hand-kept row overrides the name's
                reading, for example BBVA USA as a BANK. Null on a registry
                built before the registry recorded a basis.
            - type: 'null'
        identity_basis:
          type: string
          enum:
            - NAME_FOLD
            - TRUNCATED_PREFIX
            - ALIAS_DICTIONARY
          description: >-
            How the registry ties the spelling to its lender: NAME_FOLD means
            the folded name alone joins them. The fold uses upper case, drops
            punctuation and entity suffixes and spells out abbreviations: WELLS
            FARGO BANK NA and WELLS FARGO BANK N.A. are one. TRUNCATED_PREFIX:
            the file cut the name at 30 or 40 characters, and the registry
            joined it to the one longer name that starts with it.
            ALIAS_DICTIONARY: a hand-kept row joined it, for a rename such as
            QUICKEN LOANS to ROCKET MORTGAGE, a trade name or a charter form. A
            row also covers a spelling the same instrument carries both ways.
            The registry never merges acquisitions.
        is_hard_money:
          type: boolean
          description: >-
            True when the name carries hard-money vocabulary or is a known
            hard-money brand, or when the book behaves like one. The field
            hard_money_basis says which, and the behaviour test needs the
            market's deed link. A PRIVATE lender_class is a trust or a seller
            carry-back, not this. The hard_money filter of the list reads this
            flag.
        hard_money_basis:
          anyOf:
            - type: string
              enum:
                - NAME
                - BEHAVIOUR
                - BOTH
              description: >-
                Why is_hard_money is true: NAME means the name carries
                hard-money vocabulary such as BRIDGE, FIX AND FLIP, REHAB,
                PRIVATE MONEY or a numbered FUND. A known brand such as KIAVI,
                LIMA ONE or RCN CAPITAL also counts as NAME. FUNDING, CAPITAL
                and LENDING alone never qualify. BEHAVIOUR: the lender is not a
                bank and has 20 or more loans since 2015. A quarter or more of
                those loans sit within 45 days of a registered investor's
                purchase. BOTH: name and behaviour.
            - type: 'null'
          description: >-
            Null when is_hard_money is false. Why is_hard_money is true: NAME
            means the name carries hard-money vocabulary such as BRIDGE, FIX AND
            FLIP, REHAB, PRIVATE MONEY or a numbered FUND. A known brand such as
            KIAVI, LIMA ONE or RCN CAPITAL also counts as NAME. FUNDING, CAPITAL
            and LENDING alone never qualify. BEHAVIOUR: the lender is not a bank
            and has 20 or more loans since 2015. A quarter or more of those
            loans sit within 45 days of a registered investor's purchase. BOTH:
            name and behaviour.
        names:
          type: array
          items:
            type: string
            description: One spelling, as the file writes it.
          description: >-
            Every spelling the two source tables use for this lender in this
            market, for example ["KIAVI FUNDING INC", "LENDINGHOME FUNDING
            CORP"]. The display name comes first, then the rest by rows in the
            window. Business names, and the API serves them to every key.
        former_names:
          type: array
          items:
            type: string
            description: One retired spelling.
          description: >-
            Spellings retired by a recorded rename, for example QUICKEN LOANS
            INC under ROCKET MORTGAGE LLC. Empty when none.
        n_names:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: How many spellings names holds.
        n_loans:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Instruments on record with this lender as lender of record, all
            time, counted once across the open-lien and recorded-history tables.
            An instrument in both tables, with the same parcel, date and amount,
            counts once. So does a duplicated history slot. A floor: the history
            keeps 5 slots per parcel, and a paid-off loan is in neither table.
        n_loans_12m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The same over the 12 months ending on `as_of` (365 days, inclusive),
            as of `as_of`, the slice date, never the clock.
        n_loans_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The same over the 24 months ending on `as_of` (730 days, inclusive),
            as of `as_of`, the slice date, never the clock: the number the
            lender list ranks by. It counts every instrument of any kind
            (purchase money, refinance, HELOC, construction). For a GOVERNMENT
            lender it counts insurance claims and partial-claim seconds recorded
            under the agency's name, not originations.
        volume_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Sum of the loan amounts of the priced instruments in the 24 months
            ending on `as_of` (730 days, inclusive), as of `as_of`, the slice
            date, never the clock, whole dollars, after the amount rule. The
            rule counts a blanket group once: one loan recorded across 5 or more
            parcels. It also leaves out amounts above $5,000,000, and
            n_amount_excluded_24m counts them. Such an amount is a facility
            amount the file records on every parcel a commercial facility
            covers. Without the rule, a bank's window volume is in the hundreds
            of billions. 0 when none carries a price.
        n_unpriced_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Instruments in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock with no
            amount on file.
        n_blanket_positions_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Open lien positions in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock inside a
            blanket group: the same lender, date and amount on 5 or more
            parcels. The rule leaves out credit lines and banks. Counted in
            n_loans_24m, collapsed in volume_24m and open_balance.
        n_amount_excluded_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Instruments in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock whose
            loan amount exceeds $5,000,000. The count n_loans_24m includes them.
            These leave them out: volume_24m, every volume in by_year, by_month
            and geography, and the terms.amount quartiles. The loan row keeps
            its amount and carries amount_outlier.
        n_parcels:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Distinct parcels carrying any of the lender's instruments, all time.
        n_in_history:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Recorded-history slots that name the lender, all time, duplicates
            included. This is what the history holds: a floor, never an activity
            measure. The field history_capture_share says how much of the open
            table it sees.
        n_in_history_12m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The same over the 12 months ending on `as_of` (365 days, inclusive),
            as of `as_of`, the slice date, never the clock.
        n_in_history_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The same over the 24 months ending on `as_of` (730 days, inclusive),
            as of `as_of`, the slice date, never the clock.
        n_open_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Open lien positions at `as_of` recorded in the 24 months ending on
            `as_of` (730 days, inclusive), as of `as_of`, the slice date, never
            the clock, under the lender the open-lien table names.
        n_in_both_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Instruments in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock found in
            both tables: an open row and a recorded slot on the same parcel with
            the same date and amount.
        n_open_liens:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Open lien positions at `as_of` under the lender the open-lien table
            names, every position. "Open" is the vendor's state in the slice,
            not a reconveyance-checked book.
        n_open_first_liens:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Of those, position 1 (senior).
        n_open_junior_liens:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Of those, positions 2 to 4.
        n_open_maturing_12m_from_as_of:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Open lien positions whose maturity date falls in the 365 days after
            `as_of`. Null when fewer than half of the positions carry a maturity
            date (share_due_known), as on most hard-money books.
        n_open_on_resold_parcels:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Open lien positions on a parcel sold more than 30 days after the
            recording, per the deeds. The loan is probably paid off, and the
            slice does not show that. The field open_balance leaves them out.
        share_due_known:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            The share of open lien positions that carry a maturity date, 0 to 1.
            Null when the lender has no open position.
        open_balance:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Sum of the estimated current balances of the open lien positions at
            `as_of`, whole dollars. The sum leaves out positions above
            $5,000,000, the repeats of a blanket group and positions on resold
            parcels. The field n_balance_excluded counts them. 0 when none
            survives. "Open" is the vendor's state in the slice, not a
            reconveyance-checked book. The API never serves the raw sum.
        n_balance_excluded:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Open lien positions left out of open_balance.
        n_loans_lender_disagrees:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Instruments in both tables where the recorded history and the open
            table name different lenders. The cause is the insurer (HUD, the VA)
            against the servicer, or a spelling the dictionary does not join in
            this registry run. The history's lender is the lender of record.
        n_first_lien_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Instruments in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock whose
            open lien position is 1: what position=1 on the lender list counts.
        n_heloc_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Instruments in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock with
            product HELOC.
        n_construction_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Instruments in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock with
            product CONSTRUCTION.
        n_purchase_money_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Instruments in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock whose
            purpose is PURCHASE. PURCHASE means a priced deed on the parcel in
            the 45 days up to the recording, and by_purpose_24m has the rest.
            This is what sort=purchase_desc on the lender list orders by. Null
            while the market has no deed link (purchase_measured false).
        n_investor_loans_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Instruments in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock whose
            borrower resolves to a registered investor. The investor_lending
            block has the rest. Null while the market has no borrower match
            (investor_lending_measured false).
        n_borrowers:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Distinct borrowers (by key) with a loan from this lender, all time.
            The borrowers block has the rest. Null while the market has no
            borrower match (borrowers_measured false).
        n_borrowers_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The same over the 24 months ending on `as_of` (730 days, inclusive),
            as of `as_of`, the slice date, never the clock. Null under the same
            rule.
        is_investor_lender:
          description: >-
            True when half or more of the window's instruments go to registered
            investors and the window holds 20 or more. Such a lender is an
            investor lender by behaviour, whatever the name says. The lender
            list keeps these under investor_only=true. Null while the market has
            no borrower match.
          type:
            - boolean
            - 'null'
        first_recording_date:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The oldest recording date on any of the lender's instruments,
            YYYY-MM-DD: a floor, since the history keeps 5 slots per parcel.
            Null when none is dated.
        last_recording_date:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The newest recording date, YYYY-MM-DD. Null when none is dated.
        days_before_recordings_through:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Days from last_recording_date to recordings_through, for example 1
            for a lender that records every week. Null when last_recording_date
            is null.
        active_12m_to_as_of:
          type: boolean
          description: >-
            True when n_loans_12m is at least 1: a loan recorded in the 12
            months ending on `as_of` (365 days, inclusive), as of `as_of`, the
            slice date, never the clock.
        n_before_2002:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Instruments recorded before 2002, outside by_year. The history
            begins in 2002, but an open lien can be older.
        n_undated:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Instruments with no recording date on file: outside by_year and
            every window.
        by_year:
          type: array
          items:
            $ref: '#/components/schemas/LenderYear'
          description: >-
            Originations per calendar year from 2002 to the year of `as_of`,
            every year present, oldest first. The yearly n_loans values sum to
            the profile's n_loans less n_before_2002 and n_undated.
        by_month:
          type: array
          items:
            $ref: '#/components/schemas/LenderMonth'
          description: >-
            The 36 calendar months ending with the month of `as_of`, every month
            present, oldest first. Each month carries the lender's count, the
            market's count and the rank among lenders that month. The month of
            `as_of` is partial.
        by_product_24m:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
                enum:
                  - CONSTRUCTION
                  - HELOC
                  - OTHER
                description: >-
                  What the file says the loan is, read from its flags and loan
                  type and never from the label. CONSTRUCTION: the construction
                  flag or a "Building or Construction Loan" type. HELOC: the
                  credit-line flag or a "Credit Line (Revolving)" type. OTHER:
                  everything else, that is a purchase-money or refinance
                  mortgage of any kind.
              'n':
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
                description: >-
                  Instruments with this value among the lender's instruments in
                  the window.
              share:
                type: number
                description: n divided by the lender's instruments in the window, 0 to 1.
            required:
              - value
              - 'n'
              - share
            additionalProperties: false
          description: >-
            Instruments in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock by
            product, largest first. The shares sum to 1. Empty when the lender
            has none in the window.
        by_term_band_24m:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
                enum:
                  - LE_24M
                  - 25_TO_120M
                  - 121_TO_359M
                  - GE_360M
                  - UNKNOWN
                description: >-
                  The loan term in months, from the file's term where it carries
                  one, else from the maturity date less the recording date.
                  LE_24M: up to 24 months, the bridge and fix-and-flip range.
                  25_TO_120M: 25 to 120 months. 121_TO_359M: 121 to 359 months.
                  GE_360M: 30 years and longer. UNKNOWN: neither a term nor a
                  maturity on file, which is most hard-money rows.
              'n':
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
                description: >-
                  Instruments with this value among the lender's instruments in
                  the window.
              share:
                type: number
                description: n divided by the lender's instruments in the window, 0 to 1.
            required:
              - value
              - 'n'
              - share
            additionalProperties: false
          description: >-
            Instruments in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock by term
            band, largest first. The shares sum to 1.
        by_product_proxy_24m:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
                enum:
                  - BRIDGE
                  - RENTAL_TERM
                  - RETAIL
                description: >-
                  An inference from the term, not a fact the file states.
                  BRIDGE: an OTHER product with a term of 24 months or less, a
                  bridge or fix-and-flip loan. RENTAL_TERM: a term of 30 years
                  or more from a hard-money lender, a DSCR rental loan. RETAIL:
                  any other known term. Null when the term band is UNKNOWN.
              'n':
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
                description: >-
                  Instruments with this value among the lender's instruments in
                  the window.
              share:
                type: number
                description: n divided by the lender's instruments in the window, 0 to 1.
            required:
              - value
              - 'n'
              - share
            additionalProperties: false
          description: >-
            Instruments in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock by the
            term-inferred product, largest first. Instruments with an UNKNOWN
            term band have no proxy, and the list leaves them out. So the shares
            sum to 1 less that band's share.
        by_loan_type_24m:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
                description: >-
                  The loan type as the file writes it, for example "New
                  Conventional" or "FHA", or "Other" for the fold of the
                  smallest types.
              'n':
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
                description: >-
                  Instruments with this value among the lender's instruments in
                  the window.
              share:
                type: number
                description: n divided by the lender's instruments in the window, 0 to 1.
            required:
              - value
              - 'n'
              - share
            additionalProperties: false
          description: >-
            Instruments in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock by loan
            type, largest first. The list leaves out a blank type and "Unknown
            (DEFAULT)". At most 12 rows, with the smallest folded into "Other".
        by_label_24m:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
                enum:
                  - REFI_OR_SECOND
                  - HELOC
                  - RESALE_PURCHASE_MONEY
                  - NEW_PURCHASE_MONEY
                  - CONSTRUCTION
                  - NON_RESIDENTIAL
                description: >-
                  The file's transaction label, mapped to a closed list.
                  REFI_OR_SECOND: refinance loans and second trust deeds,
                  purchase and non-purchase money lumped together.
                  RESALE_PURCHASE_MONEY: a purchase-money loan on a resale.
                  NEW_PURCHASE_MONEY: a purchase-money loan on a new home.
                  HELOC, CONSTRUCTION and NON_RESIDENTIAL: the file's label of
                  that name. The purchase labels stop in January 2022, and a
                  label never decides if a loan financed a purchase.
              'n':
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
                description: >-
                  Instruments with this value among the labelled
                  recorded-history slots in the window.
              share:
                type: number
                description: >-
                  n divided by the labelled recorded-history slots in the
                  window, 0 to 1.
            required:
              - value
              - 'n'
              - share
            additionalProperties: false
          description: >-
            Recorded-history slots in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock by
            transaction label, largest first, over the labelled slots only. The
            field n_unlabelled_24m counts the rest. The open table leaves the
            label blank on most rows, so the block reads the history alone.
        n_unlabelled_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Recorded-history slots in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock with no
            label.
        by_property_type_24m:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
                description: >-
                  The parcel's property type category as the assessor feed
                  writes it, for example "Residential", or "Other" for the fold
                  of the smallest categories.
              'n':
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
                description: >-
                  Instruments with this value among the lender's instruments in
                  the window.
              share:
                type: number
                description: n divided by the lender's instruments in the window, 0 to 1.
            required:
              - value
              - 'n'
              - share
            additionalProperties: false
          description: >-
            Instruments in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock by the
            parcel's property type category, largest first. The list leaves out
            parcels without one. At most 12 rows.
        share_non_owner_occupied_24m:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            Of the parcels that carry the lender's instruments in the 24 months
            ending on `as_of` (730 days, inclusive), as of `as_of`, the slice
            date, never the clock whose occupancy is known, the share not
            owner-occupied, 0 to 1. An investor-lending signal. Null when none
            is known.
        by_purpose_24m:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
                enum:
                  - PURCHASE
                  - NOT_PURCHASE
                  - UNKNOWN
                description: >-
                  The loan's purpose, that is if it financed a purchase, read
                  from the recorded deeds and never from the file's label.
                  PURCHASE: a priced deed on the parcel, $10,000 or more, is
                  dated in the 45 days up to and including the recording date. A
                  deed after the loan is a later sale, never this loan's
                  purchase. NOT_PURCHASE: the deed registry covers those 45
                  days, the parcel has priced deeds, and none falls in them.
                  Such a loan is a refinance, a second, a HELOC or a
                  construction draw. UNKNOWN: the deed registry does not cover
                  the window: its deeds or the parcel's deeds start after the
                  loan, or the market has none.
              'n':
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
                description: >-
                  Instruments with this value among the lender's instruments in
                  the window.
              share:
                type: number
                description: n divided by the lender's instruments in the window, 0 to 1.
            required:
              - value
              - 'n'
              - share
            additionalProperties: false
          description: >-
            Instruments in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock by
            purpose, largest first. The purposes are PURCHASE, NOT_PURCHASE and
            UNKNOWN, by the deed link. The shares sum to 1. Empty while the
            market has no deed link (purchase_measured false), and when the
            lender has none in the window.
        by_outcome_24m:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
                enum:
                  - RESOLVED_BY_RESALE
                  - REFINANCED
                  - OPEN
                  - FORECLOSED
                  - UNKNOWN
                description: >-
                  What became of a loan tied to a deal: a performance proxy read
                  from the deed chain, never from a delinquency record or
                  payment history. RESOLVED_BY_RESALE is a priced deed on the
                  parcel after the loan, and REFINANCED is a later mortgage on
                  it in either table before any resale. OPEN is an open lien
                  position at the slice date and nothing later, and UNKNOWN is
                  none of these because the chain runs out. FORECLOSED: a
                  take-back deed on the parcel more than 90 days after the
                  loan's recording, before any priced resale and any later
                  mortgage. A take-back deed is a trustee's deed, a sheriff's
                  deed or a deed in lieu, and the foreclosed block on the loan
                  row carries it. A shorter gap is the auction buyer's own deed,
                  not a foreclosure of this loan.
              'n':
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
                description: >-
                  Instruments with this value among the captured loans recorded
                  in the window.
              share:
                type: number
                description: >-
                  n divided by the captured loans recorded in the window, 0 to
                  1.
            required:
              - value
              - 'n'
              - share
            additionalProperties: false
          description: >-
            The loans tied to a deal, recorded in the 24 months ending on
            `as_of` (730 days, inclusive), as of `as_of`, the slice date, never
            the clock, by what became of them, largest first. A tied loan has
            deal set on the loan row. The shares sum to 1. A performance proxy
            from the deed chain, never delinquency. Empty while the market has
            no deal link (investor_lending_measured false), and when the slice
            captured none.
        median_months_to_payoff:
          description: >-
            Median months from recording to resolution, 1 decimal, over the
            loans tied to a deal with a resolution by resale or refinance in the
            24 months ending on `as_of` (730 days, inclusive), as of `as_of`,
            the slice date, never the clock. The resolution falls in the window,
            and the recording date can fall at any time. Null under 3, and while
            the market has no deal link.
          type:
            - number
            - 'null'
        terms:
          $ref: '#/components/schemas/LenderTerms'
        geography:
          $ref: '#/components/schemas/LenderGeography'
        coverage:
          $ref: '#/components/schemas/LenderCoverage'
        rankings:
          $ref: '#/components/schemas/LenderRankings'
        borrowers:
          anyOf:
            - $ref: '#/components/schemas/LenderBorrowers'
            - type: 'null'
          description: >-
            Who borrows from the lender: counts, repeats, churn (a lower bound),
            the largest borrowers (never a person's name) and the competing
            lenders. Null while the market has no borrower match
            (borrowers_measured false).
        investor_lending:
          anyOf:
            - $ref: '#/components/schemas/LenderInvestorLending'
            - type: 'null'
          description: >-
            How much of the book funds registered investors, the deals financed
            and the largest investors. Null while the market has no deal
            registry or no borrower match (investor_lending_measured false).
        flips_financed:
          anyOf:
            - $ref: '#/components/schemas/LenderFlipsFinanced'
            - type: 'null'
          description: >-
            The flips the lender financed on the purchases the slice can tie to
            a loan. The block gives the resale margins where 20 or more resold
            with both prices. Null while the market has no flip measure
            (flips_measured false).
        takebacks:
          anyOf:
            - $ref: '#/components/schemas/LenderTakebacks'
            - type: 'null'
          description: >-
            The properties the lender took back since 2016 by a trustee's deed,
            a sheriff's deed or a deed in lieu that names it as grantee. The
            block also gives the foreclosure share of its captured loans and
            says if it is an auction lender. Null while the market has no
            take-back join (takebacks_measured false), and on a registry built
            before the place rankings.
        successor:
          anyOf:
            - $ref: '#/components/schemas/LenderSuccessor'
            - type: 'null'
          description: >-
            The lender this one is part of, an acquirer or a parent recorded by
            hand: its id, name, class, hard-money flag and kind. The registry
            never merges the books: this lender's loans stay under this id. Null
            when the registry records none, when the successor has no profile in
            the market, and on a registry built before phase 4.
        nmls:
          anyOf:
            - $ref: '#/components/schemas/LenderNmls'
            - type: 'null'
          description: >-
            The NMLS id, curated by hand for the largest lenders, and the NMLS
            Consumer Access page it opens. Null where uncurated (most lenders),
            and on a registry built before phase 4.
        id_history:
          type: array
          items:
            $ref: '#/components/schemas/LenderIdHistoryEntry'
          description: >-
            Ids retired into this lender by a merge, oldest run first. Each one
            continues to answer on GET `/v1/lenders/{id}` and on its loans and
            borrowers routes, and meta.resolved_from names it. Empty when none,
            and on a registry built before phase 4.
        summary:
          type: string
          description: >-
            One paragraph on the lender, written from the served numbers at
            build time. It covers class, hard money, scale, rank and share, top
            geography, product mix and last recording. Every build regenerates
            it, and no one writes it by hand. It never quotes a margin and never
            says LTV.
        as_of:
          type: string
          description: >-
            The slice date, YYYY-MM-DD. The API measures every count on this
            profile at it. Dated: see meta.dated[].
        recordings_through:
          type: string
          description: >-
            The newest recording date in either source table, YYYY-MM-DD. The
            API measures recency against it.
        dated:
          type: boolean
          description: >-
            True while the Recorder & Mortgage datasets are not in the current
            delivery: this profile is a snapshot at as_of.
        data_end:
          type: string
          description: >-
            The market's deed data end date, YYYY-MM-DD. The API measures the
            resold-parcel test, the deed link and the outcome chain against it.
            The registry's own slice date is as_of.
        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 (for example
            0.18). This share is why a history count is a floor.
        history_floor_year:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The year by which 90% of the parcels with a full history (5 slots)
            lost older mortgages, for example 2008. The by_year rows before it
            are floors.
        history_floor_p50:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The median year of the oldest kept mortgage on those parcels, for
            example 2004.
        share_parcels_with_lost_history:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            The share of parcels with a recorded history whose 5 slots are full,
            0 to 1 (for example 0.19). The recorded history dropped their older
            mortgages.
        purchase_measured:
          type: boolean
          description: >-
            True when the market has a deed link and the API serves the
            purchase-money counts. Those counts are purpose on the loan rows,
            by_purpose_24m, n_purchase_money_24m, terms.loan_to_price and
            rankings.rank_purchase_24m. False while the market has no deed link,
            and every such count is then null.
        investor_lending_measured:
          type: boolean
          description: >-
            True when the market has the deal link and the borrower match, and
            the API serves the investor_lending block. The API then also serves
            the deal block, the outcome and the investor ids on the loan rows.
            False while the market does not have them.
        flips_measured:
          type: boolean
          description: >-
            True when the registry measures the flips the lender financed and
            the API serves the flips_financed block. False while it does not.
        borrowers_measured:
          type: boolean
          description: >-
            True when the market has the borrower fold and the API serves the
            borrowers block, n_borrowers and the borrowers route. False while it
            does not.
        takebacks_measured:
          type: boolean
          description: >-
            True when the registry carries the foreclosure take-backs. False
            while it does not.
        counties_measured:
          type: boolean
          description: >-
            True when the slice has more than one county, so a county ranking
            means something. False while the slice covers one county.
      required:
        - market
        - name
        - lender_class
        - class_basis
        - identity_basis
        - is_hard_money
        - hard_money_basis
        - names
        - former_names
        - n_names
        - n_loans
        - n_loans_12m
        - n_loans_24m
        - volume_24m
        - n_unpriced_24m
        - n_blanket_positions_24m
        - n_amount_excluded_24m
        - n_parcels
        - n_in_history
        - n_in_history_12m
        - n_in_history_24m
        - n_open_24m
        - n_in_both_24m
        - n_open_liens
        - n_open_first_liens
        - n_open_junior_liens
        - n_open_maturing_12m_from_as_of
        - n_open_on_resold_parcels
        - share_due_known
        - open_balance
        - n_balance_excluded
        - n_loans_lender_disagrees
        - n_first_lien_24m
        - n_heloc_24m
        - n_construction_24m
        - n_purchase_money_24m
        - n_investor_loans_24m
        - n_borrowers
        - n_borrowers_24m
        - is_investor_lender
        - first_recording_date
        - last_recording_date
        - days_before_recordings_through
        - active_12m_to_as_of
        - n_before_2002
        - n_undated
        - by_year
        - by_month
        - by_product_24m
        - by_term_band_24m
        - by_product_proxy_24m
        - by_loan_type_24m
        - by_label_24m
        - n_unlabelled_24m
        - by_property_type_24m
        - share_non_owner_occupied_24m
        - by_purpose_24m
        - by_outcome_24m
        - median_months_to_payoff
        - terms
        - geography
        - coverage
        - rankings
        - borrowers
        - investor_lending
        - flips_financed
        - takebacks
        - successor
        - nmls
        - id_history
        - summary
        - as_of
        - recordings_through
        - dated
        - data_end
        - history_capture_share
        - history_floor_year
        - history_floor_p50
        - share_parcels_with_lost_history
        - purchase_measured
        - investor_lending_measured
        - flips_measured
        - borrowers_measured
        - takebacks_measured
        - counties_measured
      additionalProperties: false
      description: >-
        The lender in one market. The profile carries its names and class, and
        its originations counted once across the open-lien and recorded-history
        tables, all time, 12 and 24 months. It also carries its open book, the
        year and month series against the market, and the product, term and
        label mix. It also carries pricing and terms, geography, coverage and
        rankings. Every window ends on as_of, the slice date. Every value is a
        dated snapshot.
    MetaGeometry:
      type: object
      properties:
        kind:
          type: string
          enum:
            - radius
            - bbox
            - place
          description: >-
            Which location ran: radius, bbox or place. A radius is a point with
            radius_miles, or a property_id request, which runs around the parcel
            centroid. A bbox is a viewport. A place is a ZIP list or a postal
            city.
        lat:
          anyOf:
            - type: number
              minimum: -90
              maximum: 90
              description: WGS84 latitude.
            - type: 'null'
          description: >-
            The centre of the radius, or the reference point you gave beside a
            bbox or a place. For a property_id request the centre is the parcel
            centroid. Null when a bbox or a place had no reference point.
        lng:
          anyOf:
            - type: number
              minimum: -180
              maximum: 180
              description: WGS84 longitude.
            - type: 'null'
          description: The longitude beside lat. Null when lat is null.
        radius_miles:
          description: >-
            The radius that ran, in miles: the value you sent, or the default
            when you sent none. The default is 2 on the GET lists and 1 around
            property_id on POST `/v1/properties/search`. Null for a bbox or a
            place.
          type:
            - number
            - 'null'
        bbox:
          anyOf:
            - type: array
              prefixItems:
                - type: number
                  minimum: -180
                  maximum: 180
                  description: West edge (longitude).
                - type: number
                  minimum: -90
                  maximum: 90
                  description: South edge (latitude).
                - type: number
                  minimum: -180
                  maximum: 180
                  description: East edge (longitude).
                - type: number
                  minimum: -90
                  maximum: 90
                  description: North edge (latitude).
              items: false
              minItems: 4
              maxItems: 4
              description: '[west, south, east, north] in WGS84 degrees.'
            - type: 'null'
          description: >-
            The viewport as [west, south, east, north] in WGS84 degrees. Null
            unless kind is bbox.
        property_id:
          anyOf:
            - type: string
              pattern: ^prop_[0-9a-f]{32}$
              description: >-
                Parcel id: prop_ followed by 32 hex characters, for example
                prop_e93c776c53354a88de4e58448a6bf21b. The prefix is part of the
                id.
            - type: 'null'
          description: >-
            The parcel at the centre of the radius. Null unless the request
            named property_id.
        zip:
          anyOf:
            - type: array
              items:
                type: string
                pattern: ^\d{5}$
            - type: 'null'
          description: >-
            The ZIP list as you sent it, for example ["85251", "85257"]. Null
            unless kind is place and the request named ZIPs.
        city:
          description: >-
            The postal city as the API compared it: trimmed and folded to upper
            case ("Scottsdale" ran as "SCOTTSDALE"). Null unless kind is place
            and the request named a city.
          type:
            - string
            - 'null'
      required:
        - kind
        - lat
        - lng
        - radius_miles
        - bbox
        - property_id
        - zip
        - city
      additionalProperties: false
      description: >-
        The location the API computed the response over, as it ran: defaults
        filled, a parcel resolved to its centroid, a city folded. Copy it back
        as the query to repeat the request.
    Coverage:
      type: object
      properties:
        market:
          type: string
          description: Market code, for example phx. One entry per loaded market.
        state:
          type: string
          description: >-
            2-letter state of the market. The loaded markets and their states
            are in meta.coverage[].
        counties:
          type: array
          items:
            type: object
            properties:
              fips:
                type: string
                description: The 5-digit county FIPS code, for example 04013.
              name:
                type: string
                description: County name, for example Maricopa.
              data_end:
                anyOf:
                  - type: string
                    description: Calendar date, YYYY-MM-DD.
                  - type: 'null'
                description: >-
                  The last deed date on file for this county, YYYY-MM-DD. Null
                  when the county carries no dated deed.
            required:
              - fips
              - name
              - data_end
            additionalProperties: false
            description: One county the loaded area lies in.
          description: >-
            The counties the loaded area lies in, each with its own data end
            date. For a zip market the list names the county, but the loaded
            area is only the ZIP (see universe_kind).
        bbox:
          type: array
          prefixItems:
            - type: number
              minimum: -180
              maximum: 180
              description: West edge (longitude).
            - type: number
              minimum: -90
              maximum: 90
              description: South edge (latitude).
            - type: number
              minimum: -180
              maximum: 180
              description: East edge (longitude).
            - type: number
              minimum: -90
              maximum: 90
              description: North edge (latitude).
          items: false
          minItems: 4
          maxItems: 4
          description: >-
            The rectangle (west, south, east, north) that encloses every deal in
            the market: the initial map viewport and, with
            point_tolerance_miles, the limit for outside_coverage.
        data_end:
          type: string
          description: >-
            The last deed date in the data, YYYY-MM-DD. The API measures every
            "days since" value from this data_end, never from the request time.
        build_run_id:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Which pipeline build produced the data. Informational: use
            dataset_version for caching. Null when the data does not record it.
        registry_run:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Which investor registry run produced the data. Informational: use
            dataset_version for caching. Null when the data does not record it.
        registry_version:
          description: >-
            Which registry code version produced the data. Informational: use
            dataset_version for caching. Null when the data does not record it.
          type:
            - string
            - 'null'
        dataset_version:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Version of the loaded data, an integer that grows with every
            refresh. It is the cache key and the ETag, and every cursor binds to
            it.
        loaded_at:
          type: string
          description: When this data version went live, ISO 8601.
        metro_buy_to_resale_ratio:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            The median of purchase price divided by resale price over the
            market's priced flips since 2021. For example, 0.72 means flippers
            pay about 72% of the resale price. The price_fit factor uses it when
            an investor has too few flips of their own. Null when no priced
            flips exist.
        universe_kind:
          anyOf:
            - type: string
              enum:
                - zip
                - county
                - metro
              description: >-
                The area every count in this market covers: metro, county or
                zip. A metro market covers whole counties. A county market
                covers one county. The market cannot see what an investor did in
                the neighbouring counties. A zip market covers one or more ZIP
                codes. The market cannot see what an investor did outside them,
                a larger gap. In a county or zip market every investor count,
                price band, scale tier and confidence is a floor.
            - type: 'null'
          description: >-
            Null when the market row does not record it, a seed older than the
            column. The area every count in this market covers: metro, county or
            zip. A metro market covers whole counties. A county market covers
            one county. The market cannot see what an investor did in the
            neighbouring counties. A zip market covers one or more ZIP codes.
            The market cannot see what an investor did outside them, a larger
            gap. In a county or zip market every investor count, price band,
            scale tier and confidence is a floor.
        universe_zips:
          anyOf:
            - type: array
              items:
                type: string
                description: A 5-digit ZIP.
            - type: 'null'
          description: >-
            The ZIP codes of a zip universe, for example ["77088"]. Null for
            county and metro markets.
        point_tolerance_miles:
          type: number
          description: >-
            How far outside bbox a point can lie and get an answer, in miles: 20
            for a metro, 2 for a county market. The point is lat + lng, or the
            centre of a property_id parcel. Farther out, the API answers 422
            outside_coverage. A bbox must intersect the coverage bbox.
        n_parcels:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Parcels in the loaded area, the universe every count covers. Null
            when the data does not record it.
        listings_data_end:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The as-of date of the MLS listing feed for this market, YYYY-MM-DD:
            the newest status update among its listing rows, later than
            data_end. The deeds and the listings arrive in one delivery, each
            with its own end. The API measures every listing window
            (days_on_market, n_listed_12m) against this date. Null when this
            market has no published listing tables. Every listing block and
            listings rollup is null then, and the correct reading is "no listing
            data".
        agents_data_end:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The as-of date of the listing set behind the agent registry of this
            market, YYYY-MM-DD. It equals listings_data_end when the registry is
            current. It is earlier when a refresh moved the listings but left
            the agents on the older set. Null when this market has no published
            agent tables. Then every agent_id, identity_basis and
            agent_is_holder_member on the listing agents is null, and the
            investor profile carries has_licensed_member and agent_links null.
            The /v1/agents routes then answer 422 agents_unavailable.
        wholesale_as_of:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The date of the Investorlift export behind the market's wholesale
            transactions, YYYY-MM-DD. Every Investorlift listing published up to
            this date is on file. The API measures every wholesale window
            (n_listed_12m, n_bought_via_investorlift_12m) against the deed
            data_end. Null when this market has no published wholesale tables.
            Then every wholesale_listing block on deal rows, wholesale_purchases
            block on investor rows and wholesale_listings[] on a parcel is null.
            Then /v1/wholesale-listings, /v1/wholesalers,
            `/v1/investors/{id}/wholesale-purchases` and the source=investorlift
            and bought_on_investorlift filters answer 422 wholesale_unavailable.
        str_as_of:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The short-term rental snapshot of this market, YYYY-MM-DD: the
            oldest snapshot date among its served jurisdictions. Each
            jurisdiction's own date is in str.jurisdictions[].snapshot_date and
            on every block as data_as_of. Null when this market has no published
            short-term rental tables, or when the API serves none of its
            jurisdictions. Then every short_term_rental block on parcels and
            hold rows and every str roll-up on investor rows is null. Then the
            str_status, str_business_use, str_operator and str_holdings_min
            filters and /v1/str-parcels answer 422 str_unavailable.
        str:
          anyOf:
            - type: object
              properties:
                jurisdictions:
                  type: array
                  items:
                    $ref: '#/components/schemas/StrCoverageJurisdiction'
                  description: >-
                    Every city of the market the short-term rental build knows,
                    served or not. This list, not the parcel, explains a null
                    block on a parcel: read the city's coverage_reason.
              required:
                - jurisdictions
              additionalProperties: false
            - type: 'null'
          description: >-
            The short-term rental jurisdiction table of this market. Null when
            this market has no published short-term rental tables.
        auction_counted:
          type: boolean
          description: >-
            True when this market measures the foreclosure-auction and REO
            purchase counts. Then every investor row carries the auction block
            (investor.auction) and deal rows carry bought_auction_kind. False
            when the market's registry build came before the counts existed.
            Then the block is null on every investor of the market, and
            bought_auction_kind is null on every deal. The buys_at_auction,
            buys_reo and bought_auction_kind filters then answer 422
            auction_unavailable.
        parcel_as_of:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The deed data end that the build of the parcel product layer used,
            YYYY-MM-DD. The layer serves POST /v1/properties/search and the
            financing, permit and history routes. Null when this market has no
            published parcel product tables: those routes then answer 422
            parcels_unavailable.
        address_as_of:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The deed data end of the address table behind GET
            /v1/properties/resolve?address, YYYY-MM-DD. Null when this market
            has no published address table. The address lookup answers 422
            addresses_unavailable while no market carries the table.
        parcel:
          anyOf:
            - $ref: '#/components/schemas/ParcelCoverage'
            - type: 'null'
          description: >-
            What the parcel products cover in this market. The parts are the
            layer, the dated financing slice, the permit snapshot, the Owner
            Profile block and the history lake with its ZIP set. Null when this
            market has no published parcel product tables.
        lenders:
          anyOf:
            - type: object
              properties:
                as_of:
                  anyOf:
                    - type: string
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The slice date behind the lender registry, YYYY-MM-DD. It
                    equals parcel.financing.as_of.
                recordings_through:
                  anyOf:
                    - type: string
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The newest recording date in either source table,
                    YYYY-MM-DD. The API measures every recency on a lender
                    against this date.
                counties:
                  type: array
                  items:
                    type: string
                    description: A 5-digit county FIPS.
                  description: >-
                    The counties the lender registry covers. A ZIP, city or
                    county outside them answers 422 outside_coverage.
                history_capture_share:
                  anyOf:
                    - type: number
                      description: Decimal ratio, never a percentage (0.53 = +53%).
                    - type: 'null'
                  description: >-
                    The share of open lien positions recorded since 2022 that
                    the recorded history also carries within 3 days, 0 to 1. It
                    says how much of the open table the history sees.
                n_lender_ids:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Lender ids served in the market: the identities with a
                    profile, after the person gate. parcel.financing.n_lenders
                    counts raw spellings, several per id.
                purchase_measured:
                  type: boolean
                  description: >-
                    True when the market has the deed link. Then the API serves
                    purpose and the deed block on the loan rows, and the
                    purchase-money counts and ranks on the lenders. It also
                    serves the lender list's purpose, investor_only and
                    purchase_desc parameters. False on a registry built before
                    the deed link: every such value is null, and those
                    parameters answer 422 lenders_unavailable.
                investor_lending_measured:
                  type: boolean
                  description: >-
                    True when the market has the deal link and the borrower
                    match. Then the API serves the deal block, outcome and
                    investor ids on the loan rows, and the investor_lending
                    block on the profiles. It also serves the financing block on
                    deal rows and the financing sidecar on investor profiles.
                    False otherwise: every one of those is null.
                flips_measured:
                  type: boolean
                  description: >-
                    True when the market measures the flips each lender
                    financed, the flips_financed block on the profiles. False
                    otherwise: the block is null.
                borrowers_measured:
                  type: boolean
                  description: >-
                    True when the market has the borrower fold. Then the API
                    serves borrower keys on the loan rows, the borrowers block
                    on the profiles, GET `/v1/lenders/{id}/borrowers` and the
                    financed_by and uses_private_lender filters. False
                    otherwise: the block is null, and the route and the filters
                    answer 422 lenders_unavailable.
                takebacks_measured:
                  type: boolean
                  description: >-
                    True when the registry of this market includes the
                    foreclosure take-backs. That needs the auction deed tables
                    built and the lender members present. Then the API serves
                    the takebacks block on the profiles, the foreclosed block on
                    the loan rows and the FORECLOSED outcome. False otherwise:
                    the block is null on every profile, and foreclosed is null
                    on every loan row.
                counties_measured:
                  type: boolean
                  description: >-
                    True when the market has more than one loaded county, so a
                    county ranking means something:
                    rankings.n_counties_ranked_first_24m on the profiles. False
                    while the slice covers one county: that count is null.
                dated:
                  description: >-
                    True when the registry is a snapshot valued at as_of, like
                    the financing slice behind it. The API stamps every value
                    from it in meta.dated[] as the lenders block. Null on a
                    registry row that does not record it, a row older than the
                    column.
                  type:
                    - boolean
                    - 'null'
                n_parcels_uncovered:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Parcels of the market outside the counties the registry
                    covers. Such a county is one the financing slice does not
                    reach. Null when the row does not record it.
              required:
                - as_of
                - recordings_through
                - counties
                - history_capture_share
                - n_lender_ids
                - purchase_measured
                - investor_lending_measured
                - flips_measured
                - borrowers_measured
                - takebacks_measured
                - counties_measured
                - dated
                - n_parcels_uncovered
              additionalProperties: false
            - type: 'null'
          description: >-
            The lender registry of this market. Null when this market has no
            published lender tables: every /v1/lenders route then answers 422
            lenders_unavailable.
      required:
        - market
        - state
        - counties
        - bbox
        - data_end
        - build_run_id
        - registry_run
        - registry_version
        - dataset_version
        - loaded_at
        - metro_buy_to_resale_ratio
        - universe_kind
        - universe_zips
        - point_tolerance_miles
        - n_parcels
        - listings_data_end
        - agents_data_end
        - wholesale_as_of
        - str_as_of
        - str
        - auction_counted
        - parcel_as_of
        - address_as_of
        - parcel
        - lenders
      additionalProperties: false
      description: >-
        One loaded market: the area its counts cover (universe_kind), the
        counties it lies in, how fresh it is, and its data version.
    Dated:
      type: object
      properties:
        block:
          type: string
          enum:
            - valuation
            - financing
            - liens
            - lenders
          description: >-
            The block of the response that is a snapshot at as_of, not current
            data. The values are valuation (the AVM, equity and LTV), financing
            (open liens and mortgage history), liens (involuntary liens) and
            lenders. The lenders block is the lender registry and every count on
            it, built from the same slice.
        as_of:
          type: string
          description: >-
            The date of the delivery that valued the snapshot, YYYY-MM-DD: the
            same date as meta.coverage[].parcel.financing.as_of for the market.
        reason:
          type: string
          description: >-
            Why the block is dated, in one sentence: the dataset is not in the
            current delivery.
      required:
        - block
        - as_of
        - reason
      additionalProperties: false
      description: >-
        One block of the response that is a dated snapshot. Every response that
        carries a value from a dated block lists it here. A caller that cannot
        use dated data passes require_current: true. The API then answers 422
        dated_refused instead.
    LenderYear:
      type: object
      properties:
        year:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The calendar year of the recording date, 2002 or later.
        n_loans:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Instruments recorded that year with this lender as lender of record,
            counted once across the open-lien and recorded-history tables.
        n_in_history:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Recorded-history slots dated that year, duplicates included: what
            the history holds, a floor, not activity.
        n_open:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Open lien positions at the slice date with a recording date in that
            year.
        volume:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Sum of the loan amounts of the priced instruments, whole dollars.
            The sum counts a blanket group once, that is one loan recorded
            across 5 or more parcels. It leaves out amounts above $5,000,000, a
            facility amount the file records on every parcel it covers, which
            amount_outlier on the loan row flags. 0 when no instrument carries a
            price.
        n_purchase:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Instruments recorded that year whose purpose is PURCHASE, a priced
            deed in the 45 days up to the recording. Null while the market has
            no deed link (purchase_measured false), and for years before the
            deed registry begins.
        n_investor:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Instruments recorded that year whose borrower resolves to a
            registered investor, so the loan row carries investor_id. Null while
            the market has no borrower match (investor_lending_measured false).
        median_amount:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            Median loan amount of the priced instruments, whole dollars, amounts
            above $5,000,000 left out. Null under 3.
        floor:
          type: boolean
          description: >-
            True for years before history_floor_year. The history keeps 5 slots
            per parcel and newer mortgages push older ones out, so the count is
            a floor.
      required:
        - year
        - n_loans
        - n_in_history
        - n_open
        - volume
        - n_purchase
        - n_investor
        - median_amount
        - floor
      additionalProperties: false
      description: >-
        One calendar year of the lender's originations, from 2002, the year the
        recorded history begins.
    LenderMonth:
      type: object
      properties:
        month:
          type: string
          description: The calendar month, YYYY-MM.
        'n':
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Instruments recorded in the month with this lender as lender of
            record, counted once across both tables.
        volume:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Sum of the loan amounts of the priced instruments, whole dollars, a
            blanket group counted once and amounts above $5,000,000 left out. 0
            when no instrument carries a price.
        market_n:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The market's instruments recorded that month, every lender, persons
            below the gate and placeholders included: the share denominator.
        share:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            n divided by market_n, 0 to 1. 0 when n is 0, and null when market_n
            is 0.
        rank:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Rank by n among the lenders with at least one instrument that month,
            every class included, with ties by volume then id. Null when n is 0.
        hard_money_market_n:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Of market_n, the instruments from hard-money lenders
            (is_hard_money).
        hard_money_rank:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Rank by n among the hard-money lenders with at least one instrument
            that month. Null when this lender is not a hard-money lender or n is
            0.
        n_purchase_money:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Of n, the instruments whose purpose is PURCHASE, a priced deed in
            the 45 days up to the recording. Null while the market has no deed
            link (purchase_measured false).
        partial:
          type: boolean
          description: >-
            True on the last month only: recordings in the slice stop on
            recordings_through, before the month ends.
      required:
        - month
        - 'n'
        - volume
        - market_n
        - share
        - rank
        - hard_money_market_n
        - hard_money_rank
        - n_purchase_money
        - partial
      additionalProperties: false
      description: >-
        One calendar month of the lender's originations against the market's:
        count, volume, share and rank.
    LenderTerms:
      type: object
      properties:
        window:
          anyOf:
            - type: string
              enum:
                - 24m
                - all
              description: >-
                Which loans the terms block covers. 24m is the lender's loans in
                the 24 months ending on the slice date. The block uses 24m when
                20 or more of those loans carry an amount, else all, which is
                every loan on record.
            - type: 'null'
          description: >-
            Null when no loan of the lender carries an amount. Which loans the
            terms block covers. 24m is the lender's loans in the 24 months
            ending on the slice date. The block uses 24m when 20 or more of
            those loans carry an amount, else all, which is every loan on
            record.
        amount:
          type: object
          properties:
            p25:
              anyOf:
                - type: integer
                  minimum: -9007199254740991
                  maximum: 9007199254740991
                  description: Whole US dollars.
                - type: 'null'
              description: >-
                25th percentile of loan amount, whole dollars. Null under 3
                values.
            p50:
              anyOf:
                - type: integer
                  minimum: -9007199254740991
                  maximum: 9007199254740991
                  description: Whole US dollars.
                - type: 'null'
              description: Median loan amount, whole dollars. Null under 3 values.
            p75:
              anyOf:
                - type: integer
                  minimum: -9007199254740991
                  maximum: 9007199254740991
                  description: Whole US dollars.
                - type: 'null'
              description: >-
                75th percentile of loan amount, whole dollars. Null under 3
                values.
            'n':
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: >-
                Values behind the quartiles: the window's priced instruments,
                amounts above $5,000,000 left out.
          required:
            - p25
            - p50
            - p75
            - 'n'
          additionalProperties: false
          description: >-
            What the lender lends: the quartiles of the loan amounts, amounts
            above $5,000,000 left out. A facility amount the file records on
            every parcel it covers is not what the lender lends on one.
        rate:
          type: object
          properties:
            p25:
              description: >-
                25th percentile of interest rate, percent as the file writes it.
                Null under 3 values.
              type:
                - number
                - 'null'
            p50:
              description: >-
                Median interest rate, percent as the file writes it. Null under
                3 values.
              type:
                - number
                - 'null'
            p75:
              description: >-
                75th percentile of interest rate, percent as the file writes it.
                Null under 3 values.
              type:
                - number
                - 'null'
            'n':
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: >-
                Values behind the quartiles: the window's instruments carrying a
                rate.
            share_rated:
              anyOf:
                - type: number
                  description: Decimal ratio, never a percentage (0.53 = +53%).
                - type: 'null'
              description: >-
                The share of the window's instruments that carry a rate, 0 to 1.
                Null when the window is empty. Under 0.5 the quartiles describe
                a minority of the book.
          required:
            - p25
            - p50
            - p75
            - 'n'
            - share_rated
          additionalProperties: false
          description: >-
            The rate as the file writes it: an estimate at the slice date on
            open rows, the rate at recording on history rows.
        term:
          type: object
          properties:
            median_months:
              description: >-
                Median term in months over the window's instruments whose term
                is known. Null under 3.
              type:
                - number
                - 'null'
            share_le_24m:
              anyOf:
                - type: number
                  description: Decimal ratio, never a percentage (0.53 = +53%).
                - type: 'null'
              description: >-
                Share of the known-term instruments at 24 months or less, 0 to
                1. Null when share_term_known is under 0.5.
            share_25_120m:
              anyOf:
                - type: number
                  description: Decimal ratio, never a percentage (0.53 = +53%).
                - type: 'null'
              description: >-
                Share at 25 to 120 months, 0 to 1. Null when share_term_known is
                under 0.5.
            share_121_359m:
              anyOf:
                - type: number
                  description: Decimal ratio, never a percentage (0.53 = +53%).
                - type: 'null'
              description: >-
                Share at 121 to 359 months, 0 to 1. Null when share_term_known
                is under 0.5.
            share_ge_360m:
              anyOf:
                - type: number
                  description: Decimal ratio, never a percentage (0.53 = +53%).
                - type: 'null'
              description: >-
                Share at 360 months and longer, 0 to 1. Null when
                share_term_known is under 0.5.
            'n':
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: >-
                Instruments whose term is known, from a term or a maturity on
                file.
            share_term_known:
              anyOf:
                - type: number
                  description: Decimal ratio, never a percentage (0.53 = +53%).
                - type: 'null'
              description: >-
                The share of the window's instruments whose term band is not
                UNKNOWN, 0 to 1. Null when the window is empty. A hard-money
                book often carries a term on one row in ten.
          required:
            - median_months
            - share_le_24m
            - share_25_120m
            - share_121_359m
            - share_ge_360m
            - 'n'
            - share_term_known
          additionalProperties: false
          description: >-
            The term, from the file's term in months or its maturity date. The
            API serves the band shares only where half or more of the book
            carries a term.
        loan_to_avm:
          type: object
          properties:
            p25:
              anyOf:
                - type: number
                  description: Decimal ratio, never a percentage (0.53 = +53%).
                - type: 'null'
              description: >-
                25th percentile of the loan amount divided by the parcel's
                automated valuation at the slice date. Null under 3 values.
            p50:
              anyOf:
                - type: number
                  description: Decimal ratio, never a percentage (0.53 = +53%).
                - type: 'null'
              description: >-
                Median the loan amount divided by the parcel's automated
                valuation at the slice date. Null under 3 values.
            p75:
              anyOf:
                - type: number
                  description: Decimal ratio, never a percentage (0.53 = +53%).
                - type: 'null'
              description: >-
                75th percentile of the loan amount divided by the parcel's
                automated valuation at the slice date. Null under 3 values.
            'n':
              type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: >-
                Values behind the quartiles: the window's open lien positions on
                a parcel with a valuation.
          required:
            - p25
            - p50
            - p75
            - 'n'
          additionalProperties: false
          description: >-
            The loan against the as-of valuation, open lien positions only: not
            a loan-to-value at origination. A ratio above 1 on a short-term loan
            is a rehab holdback, not negative equity.
        loan_to_price:
          anyOf:
            - type: object
              properties:
                p25:
                  anyOf:
                    - type: number
                      description: Decimal ratio, never a percentage (0.53 = +53%).
                    - type: 'null'
                  description: >-
                    25th percentile of the loan amount divided by the price on
                    the purchase deed it financed. Null under 3 values.
                p50:
                  anyOf:
                    - type: number
                      description: Decimal ratio, never a percentage (0.53 = +53%).
                    - type: 'null'
                  description: >-
                    Median the loan amount divided by the price on the purchase
                    deed it financed. Null under 3 values.
                p75:
                  anyOf:
                    - type: number
                      description: Decimal ratio, never a percentage (0.53 = +53%).
                    - type: 'null'
                  description: >-
                    75th percentile of the loan amount divided by the price on
                    the purchase deed it financed. Null under 3 values.
                'n':
                  type: integer
                  minimum: -9007199254740991
                  maximum: 9007199254740991
                  description: >-
                    Values behind the quartiles: the window's PURCHASE
                    instruments with a priced deed and an amount.
              required:
                - p25
                - p50
                - p75
                - 'n'
              additionalProperties: false
            - type: 'null'
          description: >-
            The loan against the purchase price, over the window's
            purchase-money instruments (purpose PURCHASE). The ratio is the loan
            divided by the price on the deed dated in the 45 days up to the
            recording. Above 1 is a rehab holdback on top of the price, not an
            error, and a fix-and-flip lender's median sits near 1.1. Above 3 is
            a blanket loan, which the quartiles leave out. Null while the market
            has no deed link (purchase_measured false).
        estimated_payment_p50:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            Median estimated monthly payment over the window's open lien
            positions carrying one, whole dollars. Null under 3.
      required:
        - window
        - amount
        - rate
        - term
        - loan_to_avm
        - loan_to_price
        - estimated_payment_p50
      additionalProperties: false
      description: >-
        The lender's pricing and terms: amount, rate and term quartiles, the
        loan against the as-of valuation, the payment. The block covers the
        24-month window when 20 or more loans in it carry an amount, else all
        time, and window says which.
    LenderGeography:
      type: object
      properties:
        by_county:
          type: array
          items:
            $ref: '#/components/schemas/LenderGeoRow'
          description: >-
            Every county with the lender's loans on record, most window loans
            first. Every one is inside coverage.counties.
        by_city:
          type: array
          items:
            $ref: '#/components/schemas/LenderGeoRow'
          description: The top 20 cities by window loans, then all-time loans.
        by_zip:
          type: array
          items:
            $ref: '#/components/schemas/LenderGeoRow'
          description: The top 50 ZIP codes by window loans, then all-time loans.
        n_zips_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Distinct ZIP codes with at least one instrument in the 24 months
            ending on `as_of` (730 days, inclusive), as of `as_of`, the slice
            date, never the clock.
        concentration_top3_zips:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            The share of the lender's window instruments in its three largest
            ZIP codes, 0 to 1. Null when the lender has none in the window.
      required:
        - by_county
        - by_city
        - by_zip
        - n_zips_24m
        - concentration_top3_zips
      additionalProperties: false
      description: >-
        Where the lender lends: by county, city and ZIP, with the lender's share
        of each place and each place's share of the lender. Every count is of
        dated instruments. The profile counts an instrument without a recording
        date in n_undated and in no place. A place whose instruments are all
        undated is absent.
    LenderCoverage:
      type: object
      properties:
        market:
          type: string
          description: Market code, for example phx.
        counties:
          type: array
          items:
            type: string
            description: A 5-digit county FIPS.
          description: >-
            The counties the financing slice covers for this market, for example
            ["04013"]: every loan, geography and ranking is inside them. For a
            ZIP, city or county outside them, the API answers 422
            outside_coverage.
        n_parcels_uncovered:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Parcels of the market outside those counties. They carry no
            financing rows and so no loans here. For example, the Phoenix market
            has 224,192 such parcels in Pinal County.
        as_of:
          type: string
          description: >-
            The slice date, YYYY-MM-DD. The registry measures every count at
            this date.
        recordings_through:
          type: string
          description: >-
            The newest recording date in either source table, YYYY-MM-DD. The
            registry measures recency against this date, not against as_of.
        dated:
          type: boolean
          description: >-
            True while the Recorder & Mortgage datasets are not in the current
            delivery, so every lender value is a snapshot at as_of. The API
            lists the lenders and financing blocks in meta.dated[].
        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 (for example
            0.18). The history sees about one open loan in five. So a
            recorded-history count is a floor, and the union of the two tables
            is the origination count.
      required:
        - market
        - counties
        - n_parcels_uncovered
        - as_of
        - recordings_through
        - dated
        - history_capture_share
      additionalProperties: false
      description: >-
        What the lender registry covers in one market: the counties, the parcels
        left out, the slice date and the newest recording. It also says how much
        of the open table the history captures.
    LenderRankings:
      type: object
      properties:
        rank_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Rank by loans in the window among every lender of the market with at
            least one. The ranking includes every class and the persons above
            the gate. The registry breaks ties by volume, then by id. Null when
            the lender has none in the window. The default list hides persons
            and GOVERNMENT, so its positions differ.
        share_24m:
          type: number
          description: >-
            The lender's instruments over the market's in the window, 0 to 1.
            The denominator counts every lender, the persons below the gate and
            the placeholders included. 0 when the lender has none.
        rank_by_volume_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Rank by loan total in the window. Null when the total is 0.
        rank_in_class_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Rank by loans in the window among the market's lenders of the same
            lender_class. Null when the lender has none.
        rank_hard_money_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Rank by loans in the window among hard-money lenders. Null when the
            lender is not one or has none.
        share_of_hard_money_24m:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            The lender's instruments over every hard-money lender's in the
            window, 0 to 1. Null when the lender is not one.
        rank_purchase_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Rank by purchase-money instruments in the window among every lender
            of the market with at least one. A purchase-money instrument has
            purpose PURCHASE by the deed link. The registry breaks ties by
            volume, then by id. Null when the lender has none. Also null while
            the market has no deed link (purchase_measured false). The lender
            list walks this order under sort=purchase_desc.
        share_by_volume_24m:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            The lender's loan total over the market's in the window, 0 to 1,
            both after the amount rule. The rule counts a blanket group once and
            leaves out amounts above $5,000,000. 0 when the lender's total is 0.
            Null on a registry built before the place rankings.
        n_zips_ranked_first_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            ZIP codes where the lender ranks first by instruments in the window
            with 10 or more of its own there: "#1 in N ZIPs". The rule: the
            lender's own n is 10 or more and its rank is 1 in the ZIP. The
            ranking counts every lender. You can recompute it from GET
            `/v1/lenders/{id}/rankings?group_by=zip&min_n=10`. Null on a
            registry built before the place rankings.
        n_cities_ranked_first_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The same over cities. Null on a registry built before the place
            rankings.
        n_counties_ranked_first_24m:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The same over counties. Null while counties_measured is false: with
            one county loaded, the count says nothing. Also null on a registry
            built before the place rankings.
      required:
        - rank_24m
        - share_24m
        - rank_by_volume_24m
        - rank_in_class_24m
        - rank_hard_money_24m
        - share_of_hard_money_24m
        - rank_purchase_24m
        - share_by_volume_24m
        - n_zips_ranked_first_24m
        - n_cities_ranked_first_24m
        - n_counties_ranked_first_24m
      additionalProperties: false
      description: >-
        Where the lender stands in the market over the 24 months ending on the
        slice date, by loans and by volume. The rankings are overall, within its
        class, among hard-money lenders and by purchase-money loans.
    LenderBorrowers:
      type: object
      properties:
        n_borrowers:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Distinct borrowers (by key) with a loan from this lender, all time.
            The count includes every borrower a recorded mortgage names, plus
            the owner of record on open liens that name none.
        n_borrowers_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The same over the 24 months ending on `as_of` (730 days, inclusive),
            as of `as_of`, the slice date, never the clock.
        n_resolved_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Of the window's borrowers, those that resolve to a registered
            investor.
        share_resolved_24m:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            n_resolved_24m over n_borrowers_24m, 0 to 1. Null when the window
            has no borrower.
        borrower_measured_share:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            The share of the lender's instruments, all time, with any borrower
            source, 0 to 1. A borrower source is a recorded slot that names
            borrowers, or an open lien whose owner of record qualifies. The
            recorded history sees about one open loan in five, so most open
            liens have no named borrower. Null when the lender has no
            instrument.
        n_repeat_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Borrowers with 2 or more loans from this lender in the 24 months
            ending on `as_of` (730 days, inclusive), as of `as_of`, the slice
            date, never the clock.
        n_new_12m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Borrowers whose first loan from this lender has a recording date in
            the 12 months ending on `as_of` (365 days, inclusive), as of
            `as_of`, the slice date, never the clock.
        n_churned_12m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Borrowers who churned (churned true on their row) and whose later
            loan elsewhere has a recording date in the 12 months ending on
            `as_of` (365 days, inclusive), as of `as_of`, the slice date, never
            the clock. A lower bound of leaving, since the history sees one loan
            in five.
        churn_measured:
          type: boolean
          description: >-
            True when the registry can measure churn for half or more of the
            borrowers it tests. It tests the lender's borrowers whose last loan
            here is dated 12 to 36 months before the slice date (as_of). False
            when most of those borrowers hold open positions the history does
            not carry, the bridge-borrower case. Then the churn counts here are
            floors of floors.
        top_borrowers:
          type: array
          items:
            $ref: '#/components/schemas/LenderBorrowerRef'
          description: >-
            The 10 largest borrowers by loans in the window, then all time, then
            key. A person's name is never here, nor anywhere on this host.
        competing_lenders:
          type: array
          items:
            $ref: '#/components/schemas/LenderCompetingLender'
          description: >-
            The 10 lenders that share the most borrowers with this one in the
            window, then all time.
        person_names_redacted:
          type: boolean
          description: >-
            True when at least one of top_borrowers is a person. That name is
            null here whatever the key. False when every one is a company.
      required:
        - n_borrowers
        - n_borrowers_24m
        - n_resolved_24m
        - share_resolved_24m
        - borrower_measured_share
        - n_repeat_24m
        - n_new_12m
        - n_churned_12m
        - churn_measured
        - top_borrowers
        - competing_lenders
        - person_names_redacted
      additionalProperties: false
      description: >-
        Who borrows from the lender: how many, how many are registered
        investors, repeats, newcomers and churn (a lower bound). It also lists
        the largest borrowers and the other lenders they use. Null on the
        profile while the market has no borrower match.
    LenderInvestorLending:
      type: object
      properties:
        n_investor_loans:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Instruments whose borrower resolves to a registered investor, all
            time, counted once per instrument. Such a loan row carries
            investor_id.
        n_investor_loans_12m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The same over the 12 months ending on `as_of` (365 days, inclusive),
            as of `as_of`, the slice date, never the clock.
        n_investor_loans_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The same over the 24 months ending on `as_of` (730 days, inclusive),
            as of `as_of`, the slice date, never the clock.
        share_investor_loans_24m:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            n_investor_loans_24m over the lender's instruments in the window, 0
            to 1: how much of the book goes to investors. Null when the lender
            has none in the window. Read against borrower_measured_share: an
            open lien that names no borrower, and whose owner is not the
            borrower, counts in the denominator and cannot resolve.
        n_investors_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Distinct registered investors borrowing in the 24 months ending on
            `as_of` (730 days, inclusive), as of `as_of`, the slice date, never
            the clock.
        by_investor_kind_24m:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
                enum:
                  - FLIPPER
                  - WHOLESALER
                  - LANDLORD
                  - BUILDER
                  - IBUYER
                description: >-
                  Investor kind, the primary one of kinds[] (an investor can
                  carry several), for display only. FLIPPER: buys, renovates and
                  resells. WHOLESALER: buys to resell quickly, often through a
                  double close. LANDLORD: buys and holds rentals. BUILDER:
                  builds on lots it buys. IBUYER: Opendoor, Offerpad or Zillow.
              'n':
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
                description: Instruments with this value among the window's investor loans.
              share:
                type: number
                description: n divided by the window's investor loans, 0 to 1.
            required:
              - value
              - 'n'
              - share
            additionalProperties: false
          description: >-
            The window's investor loans by the investor's kinds, largest first.
            An investor carries every kind it qualifies for, so a loan counts
            under each and the shares can sum above 1.
        n_deals_financed:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Deals (purchases by a registered investor) whose purchase loan is
            this lender's, all time. The purchase loan is the largest loan of
            either table recorded in the 45 days from the purchase date.
        n_deals_financed_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The same over the deals bought in the 24 months ending on `as_of`
            (730 days, inclusive), as of `as_of`, the slice date, never the
            clock.
        by_deal_kind:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
                enum:
                  - flip
                  - wholesale
                  - hold
                  - long_hold
                  - other
                  - build
                description: >-
                  What occurred on the deal. flip: bought, fixed and resold
                  within about a year at a profit-shaped margin; wholesale:
                  bought and resold in under 30 days, or a chain resale or round
                  trip within 90 (a double close); hold: bought and still owned
                  at data_end, a confirmed holding or an un-resold purchase;
                  long_hold: held over a year, then sold (a landlord exit);
                  other: an investor resale that is not a clean flip. Reasons: a
                  loss, a thin margin, a builder's new home resold, an iBuyer
                  resale, or a chain resale of 3 to 12 months; build: a
                  registered investor bought a lot or teardown, built a house on
                  it during the hold, then sold. A builder's finished home
                  bought and resold is other. On data built after 2026-09-17 the
                  kind keeps only a single-family parcel held over 90 days, its
                  house complete by the sale year. A market built on or before
                  2026-09-17 (meta.coverage[].loaded_at) counts every
                  lot-to-build resale by a registered investor as a build until
                  its next build.
              'n':
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
                description: Deals of this kind financed, all time.
              n_24m:
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
                description: >-
                  Of those, bought in the 24 months ending on `as_of` (730 days,
                  inclusive), as of `as_of`, the slice date, never the clock.
            required:
              - value
              - 'n'
              - n_24m
            additionalProperties: false
          description: >-
            The financed deals by kind, that is by what occurred on them,
            largest first. A kind with none is absent, for example a market with
            no build.
        n_auction_purchases_financed_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Financed deals bought at auction (a trustee's or sheriff's sale) in
            the 24 months ending on `as_of` (730 days, inclusive), as of
            `as_of`, the slice date, never the clock.
        n_wholesale_purchases_financed_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Financed deals bought from a wholesaler in the 24 months ending on
            `as_of` (730 days, inclusive), as of `as_of`, the slice date, never
            the clock. The evidence is a documented double close or a known
            wholesaler seller.
        top_investors:
          type: array
          items:
            $ref: '#/components/schemas/LenderTopInvestor'
          description: >-
            The 10 registered investors with the most loans from this lender in
            the window, then volume, then id.
        is_investor_lender:
          type: boolean
          description: >-
            True when half or more of the window's instruments go to registered
            investors and the window holds 20 or more. Such a lender is an
            investor lender by behaviour, whatever the name says. The
            uses_private_lender filter of the investor routes reads it beside
            the hard-money flag.
      required:
        - n_investor_loans
        - n_investor_loans_12m
        - n_investor_loans_24m
        - share_investor_loans_24m
        - n_investors_24m
        - by_investor_kind_24m
        - n_deals_financed
        - n_deals_financed_24m
        - by_deal_kind
        - n_auction_purchases_financed_24m
        - n_wholesale_purchases_financed_24m
        - top_investors
        - is_investor_lender
      additionalProperties: false
      description: >-
        How much of the lender's book funds registered investors: the loans and
        share, the investors and their kinds. It also carries the deals financed
        by what occurred on them, the largest investors and the flag for an
        investor lender by behaviour. Null on the profile while the market has
        no deal registry or no borrower match.
    LenderFlipsFinanced:
      type: object
      properties:
        window_from:
          type: string
          description: >-
            The first purchase date the block counts, YYYY-MM-DD: 36 months
            before window_to.
        window_to:
          type: string
          description: >-
            The last purchase date the block counts, YYYY-MM-DD: 45 days before
            recordings_through, so every counted purchase had its 45-day loan
            window inside the slice.
        n_flips_captured:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Flips (deals of kind flip) bought in the window whose purchase loan
            is this lender's. Wholesales and builds count apart, in
            investor_lending.by_deal_kind.
        capture_share:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            n_flips_captured over the flips in the window tied to this lender by
            any route, 0 to 1. The denominator is n_flips_captured plus
            n_flips_by_known_borrowers. The ratio says how much of what the
            lender probably funded the slice actually shows. Null when neither
            count is above 0.
        n_flips_by_known_borrowers:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Flips in the window by investors who borrow from this lender
            elsewhere, whose own purchase loan the slice did not capture. These
            are probably this lender's, but the block never counts them as such.
        n_resold:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Of the captured flips, those resold by the deed data end date.
        n_resold_priced:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Of those, resold with both prices on the deeds: the rows behind
            every margin figure.
        median_gross_profit:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            Median resale price less purchase price over the priced resold
            flips, whole dollars. Null under 20 of them: the API never quotes a
            margin on fewer. Not net of rehab or costs.
        p25_gross_profit:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: 25th percentile of the same. Null under 20.
        p75_gross_profit:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: 75th percentile of the same. Null under 20.
        median_spread_ratio:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            Median resale price over purchase price less 1 over the priced
            resold flips (0.336 = +33.6%). Null under 20.
        median_hold_days:
          description: >-
            Median days from purchase to resale over the resold flips. Null
            under 3.
          type:
            - number
            - 'null'
        median_loan_to_price:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            Median purchase loan over purchase price over the captured flips
            with both, 0 to 1 and above. A value above 1 is a rehab holdback.
            Null under 3.
        share_of_financed_flips:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            n_flips_captured over every flip in the window with a captured
            purchase loan from any lender, 0 to 1. This is the lender's share of
            the flips the slice can attribute, never of every flip. The shares
            sum to 1 over the market's lenders. Null when the market has none.
        by_year:
          type: array
          items:
            $ref: '#/components/schemas/LenderFlipsYear'
          description: >-
            The captured flips by purchase year, oldest first. A year with none
            is absent.
      required:
        - window_from
        - window_to
        - n_flips_captured
        - capture_share
        - n_flips_by_known_borrowers
        - n_resold
        - n_resold_priced
        - median_gross_profit
        - p25_gross_profit
        - p75_gross_profit
        - median_spread_ratio
        - median_hold_days
        - median_loan_to_price
        - share_of_financed_flips
        - by_year
      additionalProperties: false
      description: >-
        The flips the lender financed, on the purchases the slice can tie to a
        loan. The block says how many and how much of the lender's flip lending
        that is. It also gives the resale margins where 20 or more resold with
        both prices. Null on the profile while the market has no flip measure.
    LenderTakebacks:
      type: object
      properties:
        n_takebacks:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Take-back deeds that name the lender as grantee under any of its
            spellings, from 2016 through the deed data end date (data_end). The
            registry counts once per parcel and deed. A take-back deed is a
            trustee's deed, a sheriff's deed or a deed in lieu.
        n_takebacks_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The same over the 24 months ending on `as_of` (730 days, inclusive),
            as of `as_of`, the slice date, never the clock.
        by_instrument:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
                enum:
                  - TRUSTEES_DEED
                  - SHERIFFS_DEED
                  - DEED_IN_LIEU
                description: >-
                  The deed by which a lender took a property back.
                  TRUSTEES_DEED: a trustee's deed after a non-judicial
                  foreclosure sale, the certificate of title in Arizona.
                  SHERIFFS_DEED: a sheriff's deed after a judicial sale, in an
                  Arizona or Washington market. In Texas a sheriff's deed is a
                  tax sale, never a take-back. DEED_IN_LIEU: the borrower deeded
                  the property to the lender instead of a foreclosure.
              'n':
                type: integer
                minimum: -9007199254740991
                maximum: 9007199254740991
                description: >-
                  Instruments with this value among the lender's take-back
                  deeds.
              share:
                type: number
                description: n divided by the lender's take-back deeds, 0 to 1.
            required:
              - value
              - 'n'
              - share
            additionalProperties: false
          description: >-
            The take-back deeds by instrument, largest first. The shares sum to
            1. Empty when the lender has none.
        n_loans_foreclosed:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Take-backs on a parcel that carries a loan row of this lender
            recorded before the deed. The loan row names the lender as lender of
            record or as open-lien lender, in either source table. These are the
            take-backs the registry can tie to one of the lender's own loans.
        n_takebacks_unlinked:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            n_takebacks less n_loans_foreclosed: the take-backs with no tie to
            one of the lender's own loans. Two causes: the loan is older than
            the five kept history slots, or it is in neither table. A third
            cause: the grantee is the trustee or the servicer of a securitised
            loan, whose originator the registry cannot see.
        foreclosure_share:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            Of the lender's loans tied to a deal (STRICT link, the captured
            instruments), the share with outcome FORECLOSED, 0 to 1. Null under
            20 captured loans. A performance proxy from the deed chain, never a
            delinquency rate.
        median_days_takeback_to_resale:
          description: >-
            Median days from the take-back deed to the next priced deed on the
            parcel ($10,000 or more). The registry measures it over the
            take-backs that resold by the deed data end date. It says how long
            the lender held what it took back. Null under 3.
          type:
            - number
            - 'null'
        is_auction_lender:
          type: boolean
          description: >-
            True when any of the lender's spellings is a grantee the auction
            build classed as a lender at its own sale. The test is a credit bid
            or a deed in lieu on two or more parcels. Such a lender takes
            properties back at the courthouse steps. The flag reads from the
            auction build's lender list alone, never from the buyer-side
            exclusion vocabulary. That vocabulary matches every bank.
      required:
        - n_takebacks
        - n_takebacks_24m
        - by_instrument
        - n_loans_foreclosed
        - n_takebacks_unlinked
        - foreclosure_share
        - median_days_takeback_to_resale
        - is_auction_lender
      additionalProperties: false
      description: >-
        The properties the lender took back by trustee's deed, sheriff's deed or
        deed in lieu since 2016. The block says how many, by instrument and
        window, and how many tie to one of its own loans. It also gives the
        foreclosure share of its captured loans, how fast it resold them, and if
        it is an auction lender. Deeds, never delinquency. The grantee is
        usually the trustee or servicer, so the originator of a securitised loan
        is invisible. Null on the profile while the market has no take-back join
        (takebacks_measured false).
    LenderSuccessor:
      type: object
      properties:
        id:
          type: string
          pattern: ^len_[0-9a-f]{12}$
          description: >-
            The successor: the key to GET `/v1/lenders/{id}`, a served lender of
            the same market.
        name:
          type: string
          description: >-
            The lender's display name in the market, upper case as the file
            writes it, for example KIAVI FUNDING INC. A business name, which the
            API serves to every key.
        lender_class:
          type: string
          enum:
            - BANK
            - NONBANK
            - PRIVATE
            - INDIVIDUAL
            - GOVERNMENT
          description: >-
            A reading of the name, never a legal status. How the lender name
            reads. BANK: a bank, credit union or thrift. NONBANK: a mortgage
            company or other lending business. PRIVATE: a trust, a seller
            carry-back or another private party, not the hard-money sense of
            private lender, which the Lender object carries as is_hard_money.
            INDIVIDUAL: a person's name. GOVERNMENT: an agency or a public body.
        is_hard_money:
          type: boolean
          description: >-
            True when the name carries hard-money vocabulary or is a known
            hard-money brand, or when the book behaves like one. The profile's
            hard_money_basis says which, and the behaviour test needs the
            market's deed link. A PRIVATE lender_class is a trust or a seller
            carry-back, not a hard-money lender.
        kind:
          type: string
          enum:
            - ACQUISITION
            - SUBSIDIARY
          description: >-
            How the lender is part of its successor. ACQUISITION: the successor
            bought it or absorbed it, for example NATIONAL CITY BANK into PNC
            BANK. SUBSIDIARY: the successor is its parent, for example WELLS
            FARGO FINANCIAL ARIZONA under WELLS FARGO BANK.
      required:
        - id
        - name
        - lender_class
        - is_hard_money
        - kind
      additionalProperties: false
      description: >-
        The lender this one is part of. An acquisition never merges the books:
        BANK ONE's loans stay BANK ONE's, under BANK ONE's id. So the profile
        points at the acquirer or the parent instead. Null when the registry
        records no successor, and when the successor has no profile in the
        market.
    LenderIdHistoryEntry:
      type: object
      properties:
        old_id:
          type: string
          pattern: ^len_[0-9a-f]{12}$
          description: >-
            The id the registry retired into this lender. After the merge, the
            old id answers on GET `/v1/lenders/{id}` and its loans and borrowers
            routes, and the API redirects here with meta.resolved_from.
        reason:
          type: string
          enum:
            - MERGED
            - MERGED_PARTIAL
            - NEW_SPLIT
            - RETIRED
          description: >-
            Why the API stopped serving the old id. MERGED: every spelling
            behind it belongs to this lender, because a dictionary row or a fold
            decision joined them. MERGED_PARTIAL: some of its spellings came
            here, the rest went elsewhere. NEW_SPLIT: the registry split this
            lender out of it. RETIRED: no lender holds its spellings any more,
            so such an id answers 410 gone and never appears in an id_history.
        lender_run:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The lender registry run that retired it, an integer that grows with
            every build.
      required:
        - old_id
        - reason
        - lender_run
      additionalProperties: false
      description: >-
        One id a merge retired into this lender: the old id, why, and the
        registry run that did it.
    StrCoverageJurisdiction:
      type: object
      properties:
        name:
          type: string
          description: >-
            The jurisdiction, upper case, for example SCOTTSDALE, PHOENIX or
            HOUSTON: the city-limit polygon the parcel falls in, never the
            postal city. The same value as
            short_term_rental.coverage.jurisdiction on the parcels inside it.
        regime:
          anyOf:
            - type: string
              enum:
                - REQUIRED
                - NOT_REQUIRED
                - UNKNOWN
              description: >-
                The city's rule on a short-term rental licence or permit.
                REQUIRED: an ordinance requires one. NOT_REQUIRED: the city has
                no requirement, so no roll exists. UNKNOWN: the survey did not
                cover the city. Null when the market row does not record it.
            - type: 'null'
          description: >-
            Null when the market row does not record it. The city's rule on a
            short-term rental licence or permit. REQUIRED: an ordinance requires
            one. NOT_REQUIRED: the city has no requirement, so no roll exists.
            UNKNOWN: the survey did not cover the city. Null when the market row
            does not record it.
        coverage_reason:
          anyOf:
            - type: string
              enum:
                - LOADED_SERVED
                - LOADED_UNVALIDATED
                - LOADED_COUNTS_ONLY
                - REQUIRED_NOT_PUBLISHED
                - NO_REQUIREMENT
                - NOT_SURVEYED
              description: >-
                Why parcels of this jurisdiction carry, or do not carry, a
                short-term rental block. LOADED_SERVED: the city's roll is on
                file, matched to parcels and served, so every parcel inside
                carries a block, NONE when it has no record. LOADED_UNVALIDATED:
                the roll is on file and matched, but without a spot check, so
                the block is present with status null and coverage.served false.
                LOADED_COUNTS_ONLY: the roll is on file for counts only, because
                no parcel match is possible for the file, so no block. No block
                for REQUIRED_NOT_PUBLISHED (licence required, no roll
                published), NO_REQUIREMENT (no licence required) or NOT_SURVEYED
                (outside the survey). Null when the market row does not record
                it.
            - type: 'null'
          description: >-
            Null when the market row does not record it. Why parcels of this
            jurisdiction carry, or do not carry, a short-term rental block.
            LOADED_SERVED: the city's roll is on file, matched to parcels and
            served, so every parcel inside carries a block, NONE when it has no
            record. LOADED_UNVALIDATED: the roll is on file and matched, but
            without a spot check, so the block is present with status null and
            coverage.served false. LOADED_COUNTS_ONLY: the roll is on file for
            counts only, because no parcel match is possible for the file, so no
            block. No block for REQUIRED_NOT_PUBLISHED (licence required, no
            roll published), NO_REQUIREMENT (no licence required) or
            NOT_SURVEYED (outside the survey). Null when the market row does not
            record it.
        served:
          type: boolean
          description: >-
            True when parcels inside this jurisdiction carry a measured status
            (LICENSED, PENDING, EXPIRED or NONE). False when they carry a block
            with status null, or no block at all: coverage_reason says why.
        snapshot_only:
          type: boolean
          description: >-
            True when the roll came from a single pull and has no weekly feed
            (Fountain Hills, Cave Creek). Its dates are the pull date, and the
            API never sets feed_stale.
        licence_start:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The earliest possible date of a licence in this jurisdiction, the
            day its ordinance took effect, YYYY-MM-DD, for example 2025-10-01
            for Houston. Null when unknown, or when the city requires no
            licence.
        snapshot_date:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The snapshot the served blocks read, YYYY-MM-DD:
            short_term_rental.data_as_of on every parcel inside. Null when no
            roll is on file.
        feed_stale:
          type: boolean
          description: >-
            True when this week's feed failed the freshness rule and the API
            serves the last good snapshot instead. Every block inside then
            carries coverage.feed_stale true. False otherwise.
        sources:
          type: array
          items:
            $ref: '#/components/schemas/StrCoverageSource'
          description: >-
            The city files behind this jurisdiction, each with its newest load
            date and its stale flag. Empty when no roll is on file.
        n_licensed:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Parcels inside with status LICENSED on this snapshot. Null when no
            roll is on file.
        n_pending:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Parcels inside with status PENDING. Null when no roll is on file.
        n_expired:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Parcels inside with status EXPIRED. Null when no roll is on file.
        n_advertised:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            Parcels the city lists as advertised without a licence, Scottsdale
            only. The API counts them and never serves them as a status. Null
            when the city publishes no such list.
        share_unmatched:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            The share of the city's records that matched no parcel, 0 to 1, for
            example 0.04. Null when no roll is on file.
        share_assumed:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            The share of attributed parcels with attribution_basis ASSUMED, 0 to
            1. ASSUMED means the attribution has no date, no name and no regime
            bound. Null when no roll is on file.
      required:
        - name
        - regime
        - coverage_reason
        - served
        - snapshot_only
        - licence_start
        - snapshot_date
        - feed_stale
        - sources
        - n_licensed
        - n_pending
        - n_expired
        - n_advertised
        - share_unmatched
        - share_assumed
      additionalProperties: false
      description: >-
        One city of the market in the short-term rental build. It says if the
        licence roll is on file and served, how fresh it is, and what it counts.
        It explains a null short_term_rental block on a parcel: the block is
        null where the API does not serve the jurisdiction.
    ParcelCoverage:
      type: object
      properties:
        parcel_as_of:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: The deed data end that the parcel layer build used, YYYY-MM-DD.
        n_parcels:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: Parcels in the layer for this market.
        sale_mortgage_measured:
          type: boolean
          description: >-
            True when the delivery records a purchase mortgage on at least one
            priced last sale in five of the market. Then cash_sale_proxy, the
            sale.cash_sale filter and the cash-buyer quicklist are measured.
            False below that bar, as in the 2026 deliveries, which carry the
            column empty. Then cash_sale_proxy is null on every parcel, and the
            filter and the quicklist answer 422 cash_sale_unavailable.
        financing:
          anyOf:
            - type: object
              properties:
                as_of:
                  anyOf:
                    - type: string
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The date of the delivery that valued the financing, lien and
                    valuation slice, YYYY-MM-DD.
                dated:
                  type: boolean
                  description: >-
                    True while the Recorder & Mortgage and AVM datasets are not
                    in the current delivery, so the slice stays at as_of. The
                    API then stamps every value from the slice in meta.dated[].
                dated_reason:
                  description: Why the slice is dated.
                  type:
                    - string
                    - 'null'
                n_parcels:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels with a row in the slice.
                n_with_open_lien:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels with at least one open lien at as_of.
                n_free_and_clear:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels with zero open liens at as_of.
                n_avm:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels with an AVM at as_of.
                n_involuntary:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels with an involuntary lien at as_of.
                n_lenders:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Distinct raw lender spellings over the two lien tables, not
                    registry ids. For registry ids, read
                    meta.coverage[].lenders.n_lender_ids.
              required:
                - as_of
                - dated
                - dated_reason
                - n_parcels
                - n_with_open_lien
                - n_free_and_clear
                - n_avm
                - n_involuntary
                - n_lenders
              additionalProperties: false
            - type: 'null'
          description: The financing slice. Null when this market has none.
        permits:
          anyOf:
            - type: object
              properties:
                as_of:
                  anyOf:
                    - type: string
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The effective date of the loaded permit snapshot,
                    YYYY-MM-DD.
                n_permits:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Permits served for this market.
                n_parcels:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels with at least one permit.
                n_unmatched:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: >-
                    Permits in the county file that landed on no parcel of the
                    market, so the API does not serve them.
                jurisdictions:
                  anyOf:
                    - type: array
                      items:
                        type: object
                        properties:
                          jurisdiction:
                            type:
                              - string
                              - 'null'
                          n_permits:
                            anyOf:
                              - type: integer
                                minimum: -9007199254740991
                                maximum: 9007199254740991
                              - type: 'null'
                          last_issue_date:
                            anyOf:
                              - type: string
                                description: Calendar date, YYYY-MM-DD.
                              - type: 'null'
                          windows_measured:
                            description: >-
                              True when the jurisdiction issued a permit in the
                              12 months before as_of. False when it did not: its
                              feed is stale, so its parcels carry null 24-month
                              and 36-month windows. The rule applies in every
                              market. Read those null windows (n_permits_24m,
                              n_open_permits_12m, major_work_36m, tags_24m,
                              job_value_24m) as unmeasured, not as permit-free.
                              The negative permit filters of the search leave
                              such parcels out. Null only on a coverage row
                              built before the flag existed.
                            type:
                              - boolean
                              - 'null'
                        required:
                          - jurisdiction
                          - n_permits
                          - last_issue_date
                          - windows_measured
                        additionalProperties: false
                    - type: 'null'
                  description: >-
                    The issuing jurisdictions, largest first, each with its
                    permit count, its newest issue date and its windows_measured
                    flag.
              required:
                - as_of
                - n_permits
                - n_parcels
                - n_unmatched
                - jurisdictions
              additionalProperties: false
            - type: 'null'
          description: The permit snapshot. Null when this market has none.
        owner_profile:
          anyOf:
            - type: object
              properties:
                as_of:
                  anyOf:
                    - type: string
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The date of the delivery the Owner Profile block comes from,
                    YYYY-MM-DD.
                n_parcels:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels carrying a profile.
                n_multi:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels whose owner holds two or more properties.
                n_portfolio_5:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels whose owner holds five or more.
              required:
                - as_of
                - n_parcels
                - n_multi
                - n_portfolio_5
              additionalProperties: false
            - type: 'null'
          description: The Owner Profile block. Null when this market has none.
        history:
          anyOf:
            - type: object
              properties:
                first_week:
                  anyOf:
                    - type: string
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: >-
                    The first weekly file the history lake replayed (the
                    baseline FULL).
                last_week:
                  anyOf:
                    - type: string
                      description: Calendar date, YYYY-MM-DD.
                    - type: 'null'
                  description: The last weekly file replayed.
                zips:
                  anyOf:
                    - type: array
                      items:
                        type: string
                    - type: 'null'
                  description: >-
                    The ZIP codes the history lake covers. A parcel outside them
                    has no history: `GET /v1/properties/{id}/history` answers
                    422 history_unavailable and the history block is null.
                n_parcels:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Parcels observed in the ZIP set.
                n_events:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Typed events on record.
                n_weeks:
                  anyOf:
                    - type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                    - type: 'null'
                  description: Weekly files replayed.
                domains:
                  anyOf:
                    - type: object
                      propertyNames:
                        type: string
                      additionalProperties:
                        type: object
                        properties:
                          first_week:
                            anyOf:
                              - type: string
                                description: Calendar date, YYYY-MM-DD.
                              - type: 'null'
                          last_week:
                            anyOf:
                              - type: string
                                description: Calendar date, YYYY-MM-DD.
                              - type: 'null'
                          n_events:
                            anyOf:
                              - type: integer
                                minimum: -9007199254740991
                                maximum: 9007199254740991
                              - type: 'null'
                        required:
                          - first_week
                          - last_week
                          - n_events
                        additionalProperties: false
                    - type: 'null'
                  description: >-
                    Per domain, the weeks the lake covers it. Valuation and
                    financing end at the financing slice date, financing.as_of.
                    The rest run to last_week.
              required:
                - first_week
                - last_week
                - zips
                - n_parcels
                - n_events
                - n_weeks
                - domains
              additionalProperties: false
            - type: 'null'
          description: The history lake. Null when this market has none.
      required:
        - parcel_as_of
        - n_parcels
        - sale_mortgage_measured
        - financing
        - permits
        - owner_profile
        - history
      additionalProperties: false
      description: >-
        What the parcel products cover in one market. The parts are the parcel
        layer, the dated financing slice, the permit snapshot, the Owner Profile
        block and the history lake. Each carries its as-of date and counts.
    LenderGeoRow:
      type: object
      properties:
        value:
          type: string
          description: >-
            The geography: a 5-digit county FIPS such as 04013, a city name
            upper case such as PHOENIX, or a 5-digit ZIP.
        n_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Instruments recorded there in the 24 months ending on `as_of` (730
            days, inclusive), as of `as_of`, the slice date, never the clock.
        n_all:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Dated instruments recorded there, all time. The profile counts an
            instrument without a recording date in n_undated and in no place.
        volume_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Loan volume recorded there in the 24 months ending on `as_of` (730
            days, inclusive), as of `as_of`, the slice date, never the clock.
            The volume sums the priced instruments' loan amounts in whole
            dollars, counts a blanket group once and leaves out amounts above
            $5,000,000. 0 when no instrument carries a price.
        share_of_lender:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            n_24m over the lender's instruments in the window, 0 to 1: how
            concentrated the lender is here. Null when the lender has no
            instrument in the window.
        rank_in_geo:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: >-
            The lender's rank by n_24m among every lender active in this
            geography in the window. The registry breaks ties by volume, then by
            id. Null when n_24m is 0.
        share_of_geo:
          anyOf:
            - type: number
              description: Decimal ratio, never a percentage (0.53 = +53%).
            - type: 'null'
          description: >-
            n_24m over every lender's instruments in this geography in the
            window, 0 to 1. Null when n_24m is 0.
      required:
        - value
        - n_24m
        - n_all
        - volume_24m
        - share_of_lender
        - rank_in_geo
        - share_of_geo
      additionalProperties: false
      description: >-
        One geography with the lender's loans on record: how much of the lender
        is here, and how much of this place is the lender.
    LenderBorrowerRef:
      type: object
      properties:
        borrower_key:
          type: string
          pattern: ^[0-9a-f]{12}$
          description: >-
            Borrower key: 12 hex characters hashed from the borrower's folded
            name with the dataset salt. The same key appears on every lender's
            rows and in every market. It is not a name and not reversible, and
            it is stable across data refreshes. Use the key to compare borrowers
            across lenders.
        name:
          description: >-
            The borrower's name as the recorded mortgages write it, upper case,
            when the borrower is a company (is_entity). This is a business name
            on a recorded instrument, and the API serves it to every key. Null
            when the borrower is a person: this host never serves a person's
            name.
          type:
            - string
            - 'null'
        investor:
          anyOf:
            - $ref: '#/components/schemas/LenderInvestorRef'
            - type: 'null'
          description: >-
            The registered investor the borrower belongs to. Null when the key
            resolves to none: borrower_match PARTY or MORTGAGE_ONLY, or an owner
            of record outside the registry.
        is_entity:
          type: boolean
          description: >-
            True when the name reads as a company: an LLC, a corporation, a
            partnership or a similar entity. A trust is neither this nor a
            person.
        is_person:
          type: boolean
          description: True when the name reads as a person's.
        borrower_match:
          type: string
          enum:
            - DEAL
            - ENTITY_NAME
            - PERSON_NAME
            - PARTY
            - MORTGAGE_ONLY
            - OWNER_OF_RECORD
          description: >-
            How the registry resolved the borrower, by the first rule that
            applied. DEAL: the loan has a deal whose investor has a member with
            the borrower's key, or the deal's investor when no key matched.
            ENTITY_NAME: the key is an entity member of exactly one investor,
            and PERSON_NAME means a person member of exactly one investor.
            PARTY: the key is on a recorded deed but belongs to no investor,
            while MORTGAGE_ONLY means the key is on no deed. OWNER_OF_RECORD: an
            open lien that names no borrower resolves to the parcel's owner of
            record. The registry takes the owner only when the owner held the
            parcel on the recording date and no sale followed.
        n_loans:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Loans from this lender that carry this borrower, all time, counted
            once per instrument.
        n_loans_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            The same over the 24 months ending on `as_of` (730 days, inclusive),
            as of `as_of`, the slice date, never the clock.
        volume_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Sum of the loan amounts of those in the 24 months ending on `as_of`
            (730 days, inclusive), as of `as_of`, the slice date, never the
            clock, whole dollars, with amounts above $5,000,000 left out. 0 when
            none carries a price.
        last_loan_on:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The recording date of the borrower's newest loan from this lender,
            YYYY-MM-DD. Null when none is dated.
      required:
        - borrower_key
        - name
        - investor
        - is_entity
        - is_person
        - borrower_match
        - n_loans
        - n_loans_24m
        - volume_24m
        - last_loan_on
      additionalProperties: false
      description: >-
        One of the lender's largest borrowers as the profile lists them. The row
        carries the key, the name when it is a company, the investor behind it
        and the loan counts. Never a person's name.
    LenderCompetingLender:
      type: object
      properties:
        lender:
          $ref: '#/components/schemas/LenderRef'
        n_shared_borrowers_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Borrowers with a loan from both lenders in the 24 months ending on
            `as_of` (730 days, inclusive), as of `as_of`, the slice date, never
            the clock.
        n_shared_borrowers_all:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Borrowers with a loan from both lenders, all time.
      required:
        - lender
        - n_shared_borrowers_24m
        - n_shared_borrowers_all
      additionalProperties: false
      description: >-
        Another lender that lends to the same borrowers, with how many they
        share.
    LenderTopInvestor:
      type: object
      properties:
        investor:
          $ref: '#/components/schemas/LenderInvestorRef'
        n_loans_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Loans from this lender to the investor (its borrower or a
            co-borrower) in the 24 months ending on `as_of` (730 days,
            inclusive), as of `as_of`, the slice date, never the clock, counted
            once per instrument.
        volume_24m:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Sum of the loan amounts of those, whole dollars, with amounts above
            $5,000,000 left out. 0 when none carries a price.
        last_loan_on:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The recording date of the investor's newest loan from this lender,
            YYYY-MM-DD. Null when none is dated.
      required:
        - investor
        - n_loans_24m
        - volume_24m
        - last_loan_on
      additionalProperties: false
      description: >-
        One registered investor the lender funds most, with the loans and volume
        in the window.
    LenderFlipsYear:
      type: object
      properties:
        year:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: The calendar year of the flip's purchase.
        n_flips_captured:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Flips bought that year with a purchase loan of this lender.
        n_resold:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Of those, resold by the deed data end date.
        median_gross_profit:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
              description: Whole US dollars.
            - type: 'null'
          description: >-
            Median resale price less purchase price over the resold flips with
            both prices, whole dollars. Null under 20 of them: the API never
            quotes a margin on fewer. Not net of rehab or costs.
      required:
        - year
        - n_flips_captured
        - n_resold
        - median_gross_profit
      additionalProperties: false
      description: One purchase year of the flips the lender financed.
    StrCoverageSource:
      type: object
      properties:
        source:
          type: string
          description: >-
            The source code of one city file, for example S1 (the Scottsdale
            licensed roll), P1 (the Phoenix active permits layer) or COH (the
            Houston registry).
        snapshot_date:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            The date of the newest load of this source, YYYY-MM-DD. Null before
            the first load of this source.
        stale:
          type: boolean
          description: >-
            True when the newest load failed the freshness rule and the API
            still serves the previous snapshot. A load fails the rule when the
            count moved more than 30 percent, or when its newest date is more
            than 14 days old.
      required:
        - source
        - snapshot_date
        - stale
      additionalProperties: false
      description: >-
        One city file behind a jurisdiction's short-term rental data: the date
        of its newest load, and if that load is stale.
    LenderInvestorRef:
      type: object
      properties:
        id:
          type: string
          pattern: ^inv_[0-9a-f]{12}$
          description: 'The investor: the key to GET `/v1/investors/{id}`.'
        name:
          type: string
          description: >-
            The investor's registry name, upper case, SURNAME GIVEN for a
            person, for example SAGUARO HOLDINGS LLC. It is the deed spelling
            most often on their deeds. The API serves it to every key, as the
            registry serves it, and it can be a natural person's. It can change
            under a stable id. Never use it as a key.
        display_name:
          type: string
          description: >-
            The name to print (API 0.32.0). For a person whose deed spelling
            parsed cleanly, GIVEN [MIDDLE] SURNAME [SUFFIX] in upper case, for
            example DANA RIVERA from the deed's RIVERA DANA. For an entity, a
            trust, a public body or an ambiguous spelling it equals name.
            Display only: match, join and search on name. The API serves it to
            every key, as it serves name.
        kind:
          anyOf:
            - type: string
              enum:
                - FLIPPER
                - WHOLESALER
                - LANDLORD
                - BUILDER
                - IBUYER
              description: >-
                Investor kind, the primary one of kinds[] (an investor can carry
                several), for display only. FLIPPER: buys, renovates and
                resells. WHOLESALER: buys to resell quickly, often through a
                double close. LANDLORD: buys and holds rentals. BUILDER: builds
                on lots it buys. IBUYER: Opendoor, Offerpad or Zillow.
            - type: 'null'
          description: >-
            Primary kind, display only. Null when not classified. Investor kind,
            the primary one of kinds[] (an investor can carry several), for
            display only. FLIPPER: buys, renovates and resells. WHOLESALER: buys
            to resell quickly, often through a double close. LANDLORD: buys and
            holds rentals. BUILDER: builds on lots it buys. IBUYER: Opendoor,
            Offerpad or Zillow.
        kinds:
          type: array
          items:
            type: string
            enum:
              - FLIPPER
              - WHOLESALER
              - LANDLORD
              - BUILDER
              - IBUYER
            description: >-
              Investor kind, the primary one of kinds[] (an investor can carry
              several), for display only. FLIPPER: buys, renovates and resells.
              WHOLESALER: buys to resell quickly, often through a double close.
              LANDLORD: buys and holds rentals. BUILDER: builds on lots it buys.
              IBUYER: Opendoor, Offerpad or Zillow.
          description: Every kind the investor qualifies for. Empty when none.
        scale:
          anyOf:
            - type: string
              enum:
                - individual
                - small
                - mid
                - large
                - institutional
              description: >-
                Investor scale: individual (one person, no entity), small (fewer
                than 10 investment deals), mid (10 to 99), large (100 to 999) or
                institutional. An institutional investor is an iBuyer, a
                production builder, a bulk landlord with 500 or more holdings,
                or a known brand from a list. The registry counts the deals
                inside the area loaded for the market
                (meta.coverage[].universe_kind), so in a ZIP market the tier is
                a floor.
            - type: 'null'
          description: >-
            Scale tier. Null when not classified. Investor scale: individual
            (one person, no entity), small (fewer than 10 investment deals), mid
            (10 to 99), large (100 to 999) or institutional. An institutional
            investor is an iBuyer, a production builder, a bulk landlord with
            500 or more holdings, or a known brand from a list. The registry
            counts the deals inside the area loaded for the market
            (meta.coverage[].universe_kind), so in a ZIP market the tier is a
            floor.
        institutional:
          type: boolean
          description: >-
            True for iBuyers, production builders, bulk landlords and the brand
            list.
        n_deals:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: >-
            Investment deals as buyer inside the area loaded for the market, all
            kinds and years.
        last_bought_on:
          anyOf:
            - type: string
              description: Calendar date, YYYY-MM-DD.
            - type: 'null'
          description: >-
            Their last purchase inside the loaded area, YYYY-MM-DD. Null when
            they never bought.
      required:
        - id
        - name
        - display_name
        - kind
        - kinds
        - scale
        - institutional
        - n_deals
        - last_bought_on
      additionalProperties: false
      description: >-
        The investor behind a borrower or a financed deal: id, registry name
        (the deed spelling), kinds, scale and size, enough to choose the right
        one. The profile has the rest.
    LenderRef:
      type: object
      properties:
        id:
          type: string
          pattern: ^len_[0-9a-f]{12}$
          description: 'The lender: the key to GET `/v1/lenders/{id}`.'
        name:
          type: string
          description: >-
            The lender's display name in the market, upper case as the file
            writes it, for example KIAVI FUNDING INC. A business name, which the
            API serves to every key.
        lender_class:
          type: string
          enum:
            - BANK
            - NONBANK
            - PRIVATE
            - INDIVIDUAL
            - GOVERNMENT
          description: >-
            A reading of the name, never a legal status. How the lender name
            reads. BANK: a bank, credit union or thrift. NONBANK: a mortgage
            company or other lending business. PRIVATE: a trust, a seller
            carry-back or another private party, not the hard-money sense of
            private lender, which the Lender object carries as is_hard_money.
            INDIVIDUAL: a person's name. GOVERNMENT: an agency or a public body.
        is_hard_money:
          type: boolean
          description: >-
            True when the name carries hard-money vocabulary or is a known
            hard-money brand, or when the book behaves like one. The profile's
            hard_money_basis says which, and the behaviour test needs the
            market's deed link. A PRIVATE lender_class is a trust or a seller
            carry-back, not a hard-money lender.
      required:
        - id
        - name
        - lender_class
        - is_hard_money
      additionalProperties: false
      description: >-
        The lender behind a ranking row: id, display name, class and the
        hard-money flag.
  headers:
    ETag:
      description: >-
        The entity tag of the answer, derived from the dataset version of the
        markets in the response and from the representation, not from the body.
        It moves only when a refresh rebuilds the tables of a market. On a JSON
        route, send it back as If-None-Match, and an unchanged dataset answers
        304 with no body. The API streams an export whatever the tag. GET
        /v1/dataset runs no query, so it is the lowest-cost place to send the
        tag. On every 2xx and the 304, never on an error.
      schema:
        type: string
    X-Request-Id:
      description: >-
        The id of this call. The edge mints it and also sends it as zp-rid, the
        gateway's own name for it. The API keys its log line for the call on it,
        and every error body repeats it as request_id. Log it on every response,
        not only on errors. A refusal the gateway answers itself carries zp-rid
        and request_id alone. Those refusals are a 401, a 403 quota_exceeded and
        a 429 at the limit of the plan.
      schema:
        type: string
    X-Rows:
      description: >-
        How many rows the body carries: data.length on a list, 1 on a single
        record. The size of the body, not a charge. Absent on a streamed export,
        whose count the API knows only when the stream ends, and on a 304.
      schema:
        type: integer
        minimum: 0
    X-Dataset-Version:
      description: >-
        The dataset version of every market in the response, as market=version
        pairs joined by commas (phx=1788469819 for one market). The header
        carries one pair per loaded market. The figures are the same as
        meta.coverage[].dataset_version, and you can read them without parsing
        the body. A version moves only when a refresh rebuilds the tables of the
        market, so fold the label into cache keys. On every 2xx and the 304,
        never on an error. Absent when the answer names no market: an empty
        deployment, or a GET /v1/coverage lookup outside every market.
      schema:
        type: string
    X-Data-End:
      description: >-
        The last deed date of every market in the response, as market=YYYY-MM-DD
        pairs joined by commas (phx=2026-08-12 for one market). The header
        carries one pair per loaded market. The dates are the same as
        meta.coverage[].data_end. On every 2xx and the 304, never on an error.
        Absent when the answer names no market: an empty deployment, or a GET
        /v1/coverage lookup outside every market.
      schema:
        type: string
    Retry-After:
      description: >-
        Whole seconds to wait before you retry, never below 1. On a 429, the
        seconds until the spent bucket refills. On a 503, 1 for pool_saturated
        and 5 for ledger_unavailable, and none for database_unavailable. On a
        403 plan_limit for the name-search day cap, the seconds to the next UTC
        midnight, when the cap resets. The other plan limits carry none. The
        body repeats it as retry_after on the 429, the ledger refusal and the
        day cap.
      schema:
        type: integer
        minimum: 1
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API key from the developer console (starts with zpka_). Create one at
        https://developers.investorlift.com/get-a-key.

````

## Related topics

- [Get one lender](/api-reference/endpoints/lenders-get.md)
- [Get the profile of one Investorlift listing company](/api-reference/wholesale/get-the-profile-of-one-investorlift-listing-company.md)
- [Get the full profile of one investor](/api-reference/investors/get-the-full-profile-of-one-investor.md)
- [Get the profile of one listing agent](/api-reference/agents/get-the-profile-of-one-listing-agent.md)
- [List one lender's borrowers](/api-reference/endpoints/lenders-borrowers.md)
