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

# The Lender loan

> One loan of a lender: the parcel, the source table, the terms as filed, the purpose, the deal, the outcome and any take-back deed.

<Note>
  Early access: while the developer tier is in beta, the API serves this route to Investorlift's team and trusted partners. Investorlift will restrict the route further before it opens to every key.
</Note>

One row of [`GET /v1/lenders/{id}/loans`](/api-reference/endpoints/lenders-loans): a recorded instrument with the
parcel it sits on. `property_id` is the key to
[the parcel's financing block](/api-reference/endpoints/properties-financing).

## Two tables, one instrument

`source` says where the row comes from. `OPEN` is an open lien position at the slice date, 1 to 4 per parcel. An open
row carries the estimated balance, rate, term and maturity from the open-lien table. `RECORDED` is a slot of the
recorded mortgage history, the 5 most recent per parcel. The same instrument is in both tables when the parcel, the
recording date and the amount match. Then `in_both` is true, `loan_key` is the same on both rows, and the default
`source=both` serves the open row alone.

* `position` is the row's slot in its own table. On an open row it is the lien position, where 1 is senior. On a
  recorded row it is the history slot, where 1 is the oldest kept slot and the highest filled slot is the newest.
  `open_position` is the lien position of the instrument on either row. It is null when a recorded row has no open
  twin.
* `lender_id` is the lender of record. When the instrument is in both tables, it is the recorded history's lender. It
  equals the path id on this route. `lender_id_open` is the lender the open table names. `lender_disagrees` is true
  when the two differ: the insurer (HUD, the VA) against the servicer, or a spelling the dictionary does not join yet.
* `lender_name_as_recorded` is the spelling on this row as the file writes it. It is the spelling the parcel's
  financing block serves. `lender_class` and `identity_basis` describe that spelling.

## What the file states and what is read from it

`loan_amount`, `recording_date`, `due_date`, `term_months`, `interest_rate` and `loan_type` come from the file.
`current_balance`, and the rate on an open row, are the file's estimates at the slice date. These fields come
from them:

| Field              | Read from                                                                                                                                                                                                                                |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `product`          | The construction and credit-line flags and `loan_type`: `CONSTRUCTION`, `HELOC` or `OTHER`. Never from the label.                                                                                                                        |
| `term_band`        | `term_months`, else the maturity date less the recording date. `UNKNOWN` when neither is on file, which is most hard-money rows. `product_basis` says which.                                                                             |
| `product_proxy`    | An inference from the term, named as a proxy. `BRIDGE` is an `OTHER` loan of 24 months or less. `RENTAL_TERM` is a loan of 30 years or more from a hard-money lender. The third value is `RETAIL`. Null when the term is unknown.        |
| `label`            | The file's transaction label, mapped to a closed list. Null on most open rows. A label never decides if a loan financed a purchase.                                                                                                      |
| `balance_outlier`  | `current_balance` over \$5,000,000. The lender's `open_balance` leaves such a row out.                                                                                                                                                   |
| `amount_outlier`   | `loan_amount` over \$5,000,000: a facility amount the file records on every parcel a commercial facility covers. The row stays, but the lender's volumes and amount quartiles leave the amount out. `n_amount_excluded_24m` counts them. |
| `on_resold_parcel` | The deeds show a sale of the parcel more than 30 days after the recording. The loan is probably paid off, so `open_balance` leaves it out.                                                                                               |
| `blanket_group_id` | The open rows of one loan recorded across 5 or more parcels. `blanket_n_parcels` counts them.                                                                                                                                            |

## What the deeds say about the loan

Since 0.16.0 every row carries a join to the recorded deeds, and four fields read the join. Each is null on a registry
built before the deed link, where `purchase_measured` is false on the lender's profile. That null means not measured.

| Field                                                                        | Read from                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `purpose`                                                                    | The deeds on the parcel, never the label. `PURCHASE` when a priced deed (\$10,000 or more) is dated in the 45 days up to and including the recording date. `NOT_PURCHASE` when the deed registry covers those days, the parcel has priced deeds and none falls in them. That is a refinance, a second, a HELOC or a construction draw. `UNKNOWN` when the registry does not cover the window. A purchase-money HELOC is both `purpose: PURCHASE` and `product: HELOC`.                                                                                                                                                                                                                                                                                                               |
| `deed`                                                                       | On a `PURCHASE` row, the deed it financed: `dt`, `price` and `loan_to_price`. The last is the amount over the price, to 4 decimals. Above 1 it is a rehab holdback on top of the price, not an error. Above 3 without a blanket group it is null, because the amount is a facility amount, not a loan on this parcel. Null on every other row.                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `deal`                                                                       | The [investor deal](/api-reference/objects/deal) the loan ties to: a purchase by a registered investor in the 45 days before the recording, `link_window: STRICT`. `LOOSE` reaches from 15 days after to 90 days before, and no count includes it. `is_purchase_loan` marks the deal's purchase loan: the largest amount in the window, then the earliest. `secondary_loans_n` on it counts the others, for example a second or a rehab draw. `investor_id` and `investor_name` are the buyer's. `bought_on`, `bought_price`, `sold_on`, `sold_price`, `gross_profit` and `hold_days` are what the deeds show. Null when the loan ties to no deal.                                                                                                                                   |
| `outcome`, `months_to_resolution`                                            | What became of a loan tied to a deal, read from the deed chain after it. `FORECLOSED`, since 0.19.0: a take-back deed on the parcel more than 90 days after the loan, before any resale or later mortgage. The `foreclosed` block below carries it. `RESOLVED_BY_RESALE`: a priced deed on the parcel after the loan. A distressed deed's credit-bid price is not a resale. `REFINANCED`: a later mortgage in either table, with no resale first. `OPEN`: an open lien position at the slice date and nothing later. `UNKNOWN`: the chain runs out. `months_to_resolution` is the months from the recording to the take-back deed, the resale or the refinance, to 1 decimal. It is null otherwise. Both are a performance proxy, never a payment history. Null when `deal` is null. |
| `investor_id`, `co_borrower_investor_ids`, `borrower_keys`, `borrower_match` | The borrowers as keys, the registered investor they resolve to, and how. A key is 12 hex characters hashed from each folded name, in the file's order. On an open lien that names no borrower, the key is the owner of record. That applies when the owner held the parcel on the recording date and no sale followed. When several investors match, the registered investor is the one with the most deals, and `co_borrower_investor_ids` holds the others. `borrower_match` says how: `DEAL`, `ENTITY_NAME`, `PERSON_NAME`, `PARTY`, `MORTGAGE_ONLY` or `OWNER_OF_RECORD`. The API serves keys and ids, never names, to every key. Null when the row has no borrower source.                                                                                                      |

Every row is dated. `as_of` is the slice date, and `meta.dated[]` on the response names the `lenders` and `financing`
blocks.

## Foreclosed

`foreclosed` (since 0.19.0) is on every dated row, tied to a deal or not. It is the earliest take-back deed on the
parcel more than 90 days after the recording. The deed must come before any priced resale and before any later
mortgage from another lender. A trustee's deed recorded within 90 days of a loan is the buyer's own auction purchase,
not a foreclosure of it. The block is null when no such deed followed, and null on every row of a registry built
before the take-back join. On a loan tied to a deal, the same deed makes `outcome` read `FORECLOSED`.

The block carries the `instrument`, the `deed_date` and `buyer_is_lender`. The instrument is `TRUSTEES_DEED`,
`SHERIFFS_DEED` or `DEED_IN_LIEU`. The flag is true when the grantee is this lender under any of its spellings. It is
false when the grantee is the trustee, the servicer or another lender.

A take-back deed is a deed, read from the county's records. It says the loan ended at foreclosure, never when the
borrower missed payments. `foreclosed=true` on [the route](/api-reference/endpoints/lenders-loans) keeps these rows. The
lender's [`takebacks`](/api-reference/objects/lender#take-backs) block is the same deeds counted from the grantee's
side.

## Contact data

`borrowers[]` is the borrowers of a `RECORDED` row as the recorded history names them. They are the same names the
parcel's [Financing object](/api-reference/objects/financing) carries on `mortgage_history[].borrowers[]` for that
slot. An `OPEN` row names none, because the open-lien table carries no borrower. The field is a contact field, and
this host does not serve it. The row carries no `borrowers` key and no `contact_redacted` flag, as the parcel products
do.

Lender names (`lender_name_as_recorded`, `assigned_lender_name`) are business records of the loan. The API serves them
in full on every key, whatever the `lender_class`.

## The CSV representation

With `Accept: text/csv` on [`GET /v1/lenders/{id}/loans`](/api-reference/endpoints/lenders-loans), each row is one line
of `lender-<id>-loans.csv`. The file has one column per field above, in the same order, under a header row. The header
row names these columns, in this order:

* Market, Property id, Address, City, ZIP, Source, Position, Loan key, In both
* Lender id, Lender id (open), Lender disagrees, Lender as recorded, Lender class, Identity basis
* Recording date, Due date, Loan amount, Amount outlier, Current balance, Balance outlier, On resold parcel
* Interest rate, Term months, Term band, Loan type, Label, Label as recorded
* Product, Product proxy, Product basis, Open position, Assigned lender, Blanket group id, Blanket parcels, County FIPS, Property type
* Since 0.16.0: Purpose, Deed date, Deed price, Loan to price, Deal id, Deal kind, Purchase loan, Outcome, Investor id, Borrower keys, Borrower match
* Since 0.19.0: Foreclosed on, Foreclosed instrument, Foreclosed by lender
* As of, Dated
* Borrowers, the last column

Borrower keys joins the keys with `;`. Dates are `YYYY-MM-DD`, money is whole dollars, booleans are `true` / `false`
and a null is an empty cell. Borrowers joins the names with `; `. It is a contact column, absent on this host like the
`borrowers` key of the JSON row. The file is the whole filtered window in the requested sort, at most 50,000 rows. See
[the CSV section of the route](/api-reference/endpoints/lenders-loans#csv).


## Related topics

- [List one lender's loans](/api-reference/endpoints/lenders-loans.md)
- [The twenty-six tools](/mcp/tools.md)
- [Changelog](/changelog.md)
- [API reference](/api-reference/introduction.md)
- [Worked examples](/mcp/examples.md)
