curl --request GET \
--url https://api.investorlift.com/v1/lenders/{id}/loans \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.investorlift.com/v1/lenders/{id}/loans', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.investorlift.com/v1/lenders/{id}/loans"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"market": "<string>",
"property_id": "<string>",
"address_short": "<string>",
"city": "<string>",
"zip": "<string>",
"source": "OPEN",
"position": 0,
"loan_key": "<string>",
"in_both": true,
"lender_id": "<string>",
"lender_id_open": "<string>",
"lender_disagrees": true,
"lender_name_as_recorded": "<string>",
"lender_class": "BANK",
"identity_basis": "NAME_FOLD",
"recording_date": "<string>",
"due_date": "<string>",
"loan_amount": 0,
"amount_outlier": true,
"current_balance": 0,
"balance_outlier": true,
"on_resold_parcel": true,
"interest_rate": 123,
"term_months": 0,
"term_band": "LE_24M",
"loan_type": "<string>",
"label": "REFI_OR_SECOND",
"label_as_recorded": "<string>",
"product": "CONSTRUCTION",
"product_proxy": "BRIDGE",
"product_basis": "FILE",
"open_position": 0,
"assigned_lender_name": "<string>",
"blanket_group_id": "<string>",
"blanket_n_parcels": 0,
"county_fips": "<string>",
"property_type_category": "<string>",
"purpose": "PURCHASE",
"deed": {
"dt": "<string>",
"price": 0,
"loan_to_price": 123
},
"deal": {
"deal_id": "<string>",
"kind": "flip",
"link_window": "STRICT",
"is_purchase_loan": true,
"secondary_loans_n": 0,
"investor_id": "<string>",
"investor_name": "<string>",
"investor_display_name": "<string>",
"bought_on": "<string>",
"bought_price": 0,
"sold_on": "<string>",
"sold_price": 0,
"gross_profit": 0,
"hold_days": 0
},
"outcome": "RESOLVED_BY_RESALE",
"months_to_resolution": 123,
"foreclosed": {
"instrument": "TRUSTEES_DEED",
"deed_date": "<string>",
"buyer_is_lender": true
},
"investor_id": "<string>",
"co_borrower_investor_ids": [
"<string>"
],
"borrower_keys": [
"<string>"
],
"borrower_match": "DEAL",
"as_of": "<string>",
"dated": true
}
],
"page": {
"next_cursor": "<string>",
"limit": 0,
"returned": 0
},
"meta": {
"generated_at": "<string>",
"coverage": [
{
"market": "<string>",
"state": "<string>",
"counties": [
{
"fips": "<string>",
"name": "<string>",
"data_end": "<string>"
}
],
"bbox": [
0,
0,
0,
0
],
"data_end": "<string>",
"build_run_id": 0,
"registry_run": 0,
"registry_version": "<string>",
"dataset_version": 0,
"loaded_at": "<string>",
"metro_buy_to_resale_ratio": 123,
"universe_kind": "zip",
"universe_zips": [
"<string>"
],
"point_tolerance_miles": 123,
"n_parcels": 0,
"listings_data_end": "<string>",
"agents_data_end": "<string>",
"wholesale_as_of": "<string>",
"str_as_of": "<string>",
"str": {
"jurisdictions": [
{
"name": "<string>",
"regime": "REQUIRED",
"coverage_reason": "LOADED_SERVED",
"served": true,
"snapshot_only": true,
"licence_start": "<string>",
"snapshot_date": "<string>",
"feed_stale": true,
"sources": [
{
"source": "<string>",
"snapshot_date": "<string>",
"stale": true
}
],
"n_licensed": 0,
"n_pending": 0,
"n_expired": 0,
"n_advertised": 0,
"share_unmatched": 123,
"share_assumed": 123
}
]
},
"auction_counted": true,
"parcel_as_of": "<string>",
"address_as_of": "<string>",
"parcel": {
"parcel_as_of": "<string>",
"n_parcels": 0,
"sale_mortgage_measured": true,
"financing": {
"as_of": "<string>",
"dated": true,
"dated_reason": "<string>",
"n_parcels": 0,
"n_with_open_lien": 0,
"n_free_and_clear": 0,
"n_avm": 0,
"n_involuntary": 0,
"n_lenders": 0
},
"permits": {
"as_of": "<string>",
"n_permits": 0,
"n_parcels": 0,
"n_unmatched": 0,
"jurisdictions": [
{
"jurisdiction": "<string>",
"n_permits": 0,
"last_issue_date": "<string>",
"windows_measured": true
}
]
},
"owner_profile": {
"as_of": "<string>",
"n_parcels": 0,
"n_multi": 0,
"n_portfolio_5": 0
},
"history": {
"first_week": "<string>",
"last_week": "<string>",
"zips": [
"<string>"
],
"n_parcels": 0,
"n_events": 0,
"n_weeks": 0,
"domains": {}
}
},
"lenders": {
"as_of": "<string>",
"recordings_through": "<string>",
"counties": [
"<string>"
],
"history_capture_share": 123,
"n_lender_ids": 0,
"purchase_measured": true,
"investor_lending_measured": true,
"flips_measured": true,
"borrowers_measured": true,
"takebacks_measured": true,
"counties_measured": true,
"dated": true,
"n_parcels_uncovered": 0
}
}
],
"terms": "<string>",
"weights": {},
"reference_point": {
"lat": 0,
"lng": 0
},
"geometry": {
"kind": "radius",
"lat": 0,
"lng": 0,
"radius_miles": 123,
"bbox": {
"[0]": 0,
"[1]": 0,
"[2]": 0,
"[3]": 0
},
"property_id": "<string>",
"zip": [
"<string>"
],
"city": "<string>"
},
"resolved_from": [
"<string>"
],
"dated": [
{
"block": "valuation",
"as_of": "<string>",
"reason": "<string>"
}
]
}
}List one lender's loans
Every recorded instrument of a lender in one market, newest recording first, with the parcel, the terms as filed and what the deeds did next.
curl --request GET \
--url https://api.investorlift.com/v1/lenders/{id}/loans \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.investorlift.com/v1/lenders/{id}/loans', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.investorlift.com/v1/lenders/{id}/loans"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"market": "<string>",
"property_id": "<string>",
"address_short": "<string>",
"city": "<string>",
"zip": "<string>",
"source": "OPEN",
"position": 0,
"loan_key": "<string>",
"in_both": true,
"lender_id": "<string>",
"lender_id_open": "<string>",
"lender_disagrees": true,
"lender_name_as_recorded": "<string>",
"lender_class": "BANK",
"identity_basis": "NAME_FOLD",
"recording_date": "<string>",
"due_date": "<string>",
"loan_amount": 0,
"amount_outlier": true,
"current_balance": 0,
"balance_outlier": true,
"on_resold_parcel": true,
"interest_rate": 123,
"term_months": 0,
"term_band": "LE_24M",
"loan_type": "<string>",
"label": "REFI_OR_SECOND",
"label_as_recorded": "<string>",
"product": "CONSTRUCTION",
"product_proxy": "BRIDGE",
"product_basis": "FILE",
"open_position": 0,
"assigned_lender_name": "<string>",
"blanket_group_id": "<string>",
"blanket_n_parcels": 0,
"county_fips": "<string>",
"property_type_category": "<string>",
"purpose": "PURCHASE",
"deed": {
"dt": "<string>",
"price": 0,
"loan_to_price": 123
},
"deal": {
"deal_id": "<string>",
"kind": "flip",
"link_window": "STRICT",
"is_purchase_loan": true,
"secondary_loans_n": 0,
"investor_id": "<string>",
"investor_name": "<string>",
"investor_display_name": "<string>",
"bought_on": "<string>",
"bought_price": 0,
"sold_on": "<string>",
"sold_price": 0,
"gross_profit": 0,
"hold_days": 0
},
"outcome": "RESOLVED_BY_RESALE",
"months_to_resolution": 123,
"foreclosed": {
"instrument": "TRUSTEES_DEED",
"deed_date": "<string>",
"buyer_is_lender": true
},
"investor_id": "<string>",
"co_borrower_investor_ids": [
"<string>"
],
"borrower_keys": [
"<string>"
],
"borrower_match": "DEAL",
"as_of": "<string>",
"dated": true
}
],
"page": {
"next_cursor": "<string>",
"limit": 0,
"returned": 0
},
"meta": {
"generated_at": "<string>",
"coverage": [
{
"market": "<string>",
"state": "<string>",
"counties": [
{
"fips": "<string>",
"name": "<string>",
"data_end": "<string>"
}
],
"bbox": [
0,
0,
0,
0
],
"data_end": "<string>",
"build_run_id": 0,
"registry_run": 0,
"registry_version": "<string>",
"dataset_version": 0,
"loaded_at": "<string>",
"metro_buy_to_resale_ratio": 123,
"universe_kind": "zip",
"universe_zips": [
"<string>"
],
"point_tolerance_miles": 123,
"n_parcels": 0,
"listings_data_end": "<string>",
"agents_data_end": "<string>",
"wholesale_as_of": "<string>",
"str_as_of": "<string>",
"str": {
"jurisdictions": [
{
"name": "<string>",
"regime": "REQUIRED",
"coverage_reason": "LOADED_SERVED",
"served": true,
"snapshot_only": true,
"licence_start": "<string>",
"snapshot_date": "<string>",
"feed_stale": true,
"sources": [
{
"source": "<string>",
"snapshot_date": "<string>",
"stale": true
}
],
"n_licensed": 0,
"n_pending": 0,
"n_expired": 0,
"n_advertised": 0,
"share_unmatched": 123,
"share_assumed": 123
}
]
},
"auction_counted": true,
"parcel_as_of": "<string>",
"address_as_of": "<string>",
"parcel": {
"parcel_as_of": "<string>",
"n_parcels": 0,
"sale_mortgage_measured": true,
"financing": {
"as_of": "<string>",
"dated": true,
"dated_reason": "<string>",
"n_parcels": 0,
"n_with_open_lien": 0,
"n_free_and_clear": 0,
"n_avm": 0,
"n_involuntary": 0,
"n_lenders": 0
},
"permits": {
"as_of": "<string>",
"n_permits": 0,
"n_parcels": 0,
"n_unmatched": 0,
"jurisdictions": [
{
"jurisdiction": "<string>",
"n_permits": 0,
"last_issue_date": "<string>",
"windows_measured": true
}
]
},
"owner_profile": {
"as_of": "<string>",
"n_parcels": 0,
"n_multi": 0,
"n_portfolio_5": 0
},
"history": {
"first_week": "<string>",
"last_week": "<string>",
"zips": [
"<string>"
],
"n_parcels": 0,
"n_events": 0,
"n_weeks": 0,
"domains": {}
}
},
"lenders": {
"as_of": "<string>",
"recordings_through": "<string>",
"counties": [
"<string>"
],
"history_capture_share": 123,
"n_lender_ids": 0,
"purchase_measured": true,
"investor_lending_measured": true,
"flips_measured": true,
"borrowers_measured": true,
"takebacks_measured": true,
"counties_measured": true,
"dated": true,
"n_parcels_uncovered": 0
}
}
],
"terms": "<string>",
"weights": {},
"reference_point": {
"lat": 0,
"lng": 0
},
"geometry": {
"kind": "radius",
"lat": 0,
"lng": 0,
"radius_miles": 123,
"bbox": {
"[0]": 0,
"[1]": 0,
"[2]": 0,
"[3]": 0
},
"property_id": "<string>",
"zip": [
"<string>"
],
"city": "<string>"
},
"resolved_from": [
"<string>"
],
"dated": [
{
"block": "valuation",
"as_of": "<string>",
"reason": "<string>"
}
]
}
}lender_id equal to the path id. With
Accept: text/csv, the API returns the whole filtered window as a file (below).
Use it when
The loans table of a lender card. Also the feed a lender customer pulls by window (recorded_from and recorded_to).
The customer pulls it to see what a competitor funded, where, and on what terms, as a page or as a spreadsheet. For the
liens of one parcel, use GET /v1/properties/{property_id}/financing.
Every lender name there now carries the lender_id that opens this route. For the lenders active in a place, use
GET /v1/lenders.
Read the response
- One row per instrument by default.
source=bothserves the open row where the instrument has one, else its recorded slot.source=openlists the open lien positions alone.source=recordedlists the history slots as the history holds them, duplicated slots included.loan_keyjoins the two views. - The rows are the lender of record’s. The open table can attribute an instrument to this lender while the history
names another lender. Examples: an insurer against its servicer, or a spelling not yet joined. Such an instrument is
on the other lender’s page. So the profile’s
n_open_lienscan exceed the open rows here byn_loans_lender_disagrees. - The filters read the row.
product,term_band,loan_typeandproperty_typefilter as the file writes them.amount_minandamount_maxfilter onloan_amount, and unpriced rows drop out.zipandcityfilter on the parcel’s ZIP and city. - Since 0.16.0 the filters also include
purpose(PURCHASE,NOT_PURCHASE,UNKNOWN),outcome,deal_kindandinvestor_id.deal_kindtakes the six deal kinds of the deal a loan is tied to.investor_idkeeps the loans whose main borrower resolves to that investor. - Since 0.19.0
foreclosed=truekeeps the rows a take-back deed followed, andfalsekeeps the rest.cellkeeps the rows in one H3 cell, the index as hex, at res 7 or 8. A geometry keeps the rows around a point:latandlngwithradius_miles, abbox, orproperty_id. The API resolves the geometry to the H3 res-8 cells whose centre lies inside it. Each cell is about a third of a square mile. So the edge of the geometry is a hex boundary, not the circle. - If you send a geometry beside
cell,ziporcity, the API answers400 validation_errorwith codegeography_conflict. With a geometry, azipor acity,meta.geometryechoes the shape you asked for, with defaults filled (the envelope). - Since 0.16.0 each row says if it financed a purchase:
purpose, with the deed andloan_to_priceon aPURCHASErow.dealnames the investor deal the loan is tied to. It says if the loan is the deal’s purchase loan and what the deeds show occurred.outcomesays what became of the loan. The row also says who borrowed, as keys and investor ids. See What the deeds say about the loan. - Since 0.19.0 each row also says if a take-back deed followed.
foreclosedcarries the instrument, the deed date, and if the grantee was this lender. The instrument is a trustee’s deed, a sheriff’s deed or a deed in lieu. On a loan tied to a deal,outcomereadsFORECLOSED(Foreclosed). borrowers[]lists the borrowers of aRECORDEDrow as the recorded history names them, and anOPENrow names none. These are the same names the parcel’s Financing object carries onmortgage_history[].borrowers[]. The field is a contact field, and this host does not serve it: the row carries no such key, as the parcel products do.sort=amount_descorders the lender’s whole book in memory and is slower on the largest lenders. The two date sorts walk an index.
CSV
Accept: text/csv streams the whole filtered set as lender-<id>-loans.csv in the requested sort. The API ignores
limit and cursor on a CSV request. The export is available from the Growth plan (Plans and limits).
Below Growth, the API answers 403 plan_limit and names the plans that export.
Send recorded_from on every CSV request, because the busiest lenders hold hundreds of thousands of rows. Without the
window, the API answers 400 validation_error naming recorded_from, code
window_required. recorded_to stays optional.
The API counts the set before the first row streams. The cap is 50,000 rows. Above the cap, the API answers
422 csv_cap_exceeded with the cap in the body and in the X-Row-Cap
header. When you get that answer, narrow the window.
The export costs 0 credits. It counts against the CSV budget of 12 a minute and one in flight, per developer
(Rate limits).
The columns are the row’s fields in the order of the CSV representation.
The Borrowers column is a contact column and is absent on this host.
The export needs the platform release that passes Accept: text/csv through to this route. Until that release is live,
the route answers the JSON page whatever Accept says. The changelog announces the release.
Gotchas
- The busiest lenders have hundreds of thousands of rows. Page with
cursor, or cut a window withrecorded_fromandrecorded_to. The CSV takes the whole window at once, up to the cap (Give me a spreadsheet). - Send
market=when the lender is in more than one loaded market. Without it, the API answers400 market_required. If the lender has no profile in themarket=you give, the API answers 404. - Lender names (
lender_name_as_recorded,assigned_lender_name) are business records of the loan. The API serves them in full, whatever thelender_class. The borrowers are the one contact field of the row, and this host leaves the key out. The borrower keys and the investor ids of 0.16.0 are hashes and ids, not names. The API serves them. purpose,outcome,deal_kindandinvestor_idread the deed link. On a registry built before the deed link, they answer422 lenders_unavailable, and every such field on the row is null.foreclosed,celland a geometry read the place rankings. On a registry built before the place rankings, they answer the same, andforeclosedon the row is null.- The CSV gained three cells in 0.19.0: Foreclosed on, Foreclosed instrument, Foreclosed by lender. The three cells come before As of. A file taken before that release has three fewer columns.
- Every row is dated (
meta.dated[]). Withrequire_current=true, the API answers422 dated_refused. - The API answers
400 invalid_idfor an id without thelen_prefix, and 404 for an unknown id. It answers422 lenders_unavailablein a market with no published lender registry. It answers400 invalid_cursorfor a cursor from another query or an older dataset. - The API follows old ids as on the profile route (since 0.17.0). A merged id answers 200 with
meta.resolved_fromand the current lender’s rows. A retired id answers410 gone. An id the registry never issued answers 404 (Retired ids).
Related
Who is this lender?.Authorizations
API key from the developer console (starts with zpka_). Create one at https://developers.investorlift.com/get-a-key.
Path Parameters
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.
Query Parameters
Market code, for example phx. The loaded markets are in meta.coverage[]. Send it only when the id exists in more than one loaded market. 400 market_required says so, and a lender has the same id in every market it lent in. Otherwise the API uses the id's own market.
1 - 16Which rows to list. With open, the API lists open lien positions only. With recorded, it lists recorded history slots only, with duplicates as the history holds them. With both, the default, it lists one row per instrument: the open row where the instrument has one, else its recorded row.
open, recorded, both Keep loans recorded on or after this date, YYYY-MM-DD. With Accept: text/csv on api.investorlift.com you must send it (400 without it). So an export is a window of the book, never the whole of it.
Keep loans recorded on or before this date, YYYY-MM-DD. With recorded_from, one year is recorded_from=2025-01-01&recorded_to=2025-12-31.
Keep only loans of these products (comma list or repeated key): CONSTRUCTION, HELOC, OTHER.
1What 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.
CONSTRUCTION, HELOC, OTHER Keep only loans in these term bands (comma list or repeated key): LE_24M, 25_TO_120M, 121_TO_359M, GE_360M, UNKNOWN.
1The 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.
LE_24M, 25_TO_120M, 121_TO_359M, GE_360M, UNKNOWN Keep only loans whose loan_type is one of these, as the file writes it (comma list or repeated key), for example "New Conventional" or "FHA".
11 - 80Keep only loans on parcels whose property_type_category is one of these, as the assessor feed writes it (comma list or repeated key), for example "Residential".
11 - 80Keep only loans with loan_amount at or above this, in whole dollars. The filter drops unpriced loans.
0 <= x <= 9007199254740991Keep only loans with loan_amount at or below this, in whole dollars. The filter drops unpriced loans.
0 <= x <= 9007199254740991Keep only loans on parcels in this 5-digit ZIP.
^\d{5}$Keep only loans on parcels in this city, as the parcel table writes it (case does not matter).
1 - 100Keep only loans of these purposes by the deed link (comma list or repeated key): PURCHASE, NOT_PURCHASE, UNKNOWN. While the market's registry predates the deed link, the API answers 422 lenders_unavailable.
1The 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.
PURCHASE, NOT_PURCHASE, UNKNOWN Keep only loans tied to a deal with these outcomes (comma list or repeated key): RESOLVED_BY_RESALE, REFINANCED, OPEN, FORECLOSED, UNKNOWN. A loan tied to no deal has no outcome, and the filter drops it. While the registry predates the deal link, the API answers 422 lenders_unavailable.
1What 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.
RESOLVED_BY_RESALE, REFINANCED, OPEN, FORECLOSED, UNKNOWN Keep only loans tied to a deal of these kinds (comma list or repeated key): flip, wholesale, hold, long_hold, other, build. While the registry predates the deal link, the API answers 422 lenders_unavailable.
1What 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.
flip, wholesale, hold, long_hold, other, build Keep only loans whose main borrower resolves to this registered investor: the investor's loans from this lender. The id is inv_ followed by 12 hex characters, the loan row's investor_id. While the registry predates the borrower match, the API answers 422 lenders_unavailable.
^inv_[0-9a-f]{12}$true keeps only loans followed by a take-back deed on the parcel (foreclosed set on the row). false keeps the rest. Default: every loan. A take-back deed is a trustee's deed, a sheriff's deed or a deed in lieu after the recording. While the registry predates the take-back join, the API answers 422 lenders_unavailable.
true, false Keep only loans on parcels in this H3 cell. Send the index as a hex string at res 7 or 8, for example 8848eba59dfffff, as GET /v1/lenders/{id}/cells and /v1/deals/cells serve them. The API reads the resolution off the index (400 validation_error, code invalid_cell, otherwise). Do not send it with zip, city or a geometry (400 geography_conflict). While the registry predates the place rankings, the API answers 422 lenders_unavailable.
^[0-9a-f]{15}$Point latitude (with lng). With radius_miles it is the geometry. The API resolves the circle to the H3 res-8 cells whose centre lies inside it, so its edge is a hex boundary. Do not send it with zip, city or county (400 geography_conflict). On a registry built before the place rankings, the API answers 422 lenders_unavailable.
-90 <= x <= 90Point longitude (with lat).
-180 <= x <= 180Search radius in miles around the point or around the centre of the property_id parcel, 0.25 to 20 (default 2). Not allowed with bbox.
0.25 <= x <= 20Viewport as west,south,east,north (WGS84 degrees). West must be less than east, south less than north, and the diagonal at most 40 mi. It must intersect a loaded market's coverage bbox (422 outside_coverage otherwise). It can carry lat + lng (without radius_miles) as the reference point for distances and sort=distance.
Parcel geometry: search around the centre of that parcel, with radius_miles. Not allowed with lat, lng or bbox.
^prop_[0-9a-f]{32}$Row order of a lender's loans: recorded_desc, the default, puts the newest recording first and undated rows last. With recorded_asc, the oldest recording comes first. With amount_desc, the largest loan amount comes first and unpriced rows last. This sort is slower on the largest lenders, which have no index in that order.
recorded_desc, recorded_asc, amount_desc Page size, 1-500 (default 100). Ignored by CSV.
1 <= x <= 500Opaque cursor from page.next_cursor of the previous page. A change of query, sort, weights or data version invalidates it (400 invalid_cursor). Then restart from page 1.
1 - 4096true 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.
true, false Response
The lender's loans in one market, one page in the requested sort. With Accept: text/csv every filtered row as a CSV file. On api.investorlift.com the CSV needs a recorded_from window.
The lender's loans in one market, one page in the requested sort.
The rows of this page.
Show child attributes
Show child attributes
Pagination: the page size, the rows returned and the cursor for the next page. Paged lists carry no total. The summary block does.
Show child attributes
Show child attributes
Response metadata: when the API produced it, which markets it covers, and how fresh they are.
Show child attributes
Show child attributes
Was this page helpful?