Skip to main content
The body of GET /v1/properties/{property_id}/financing. Its summary is also the financing block on a parcel search row. Its valuation is the valuation block there. So the search and this route agree by construction.

The four parts

The fields a reader misreads

  • dated is true, and as_of is the slice date in meta.coverage[].parcel.financing.as_of. Every number here is what was true on that date, not today. A response that carries any of it also carries meta.dated[]. See dated data.
  • Null against 0. open_lien_count: 0 with free_and_clear: true means “checked, nothing owed”. A null open_lien_balance means the slice does not carry a balance. A null valuation means no automated valuation for this parcel, not a value of zero.
  • Balances, rates and payments are estimates. current_balance, interest_rate and estimated_payment are the file’s amortised estimates from the recorded terms, not a servicer’s statement. loan_amount and the recording date are what the document says.
  • lender_class comes from the name alone, so it classifies and does not verify. private-lender-financed and the financing.lender_class filter read it. The five values are:
    • BANK for a bank, credit union or thrift.
    • NONBANK for a mortgage company or other lending business.
    • PRIVATE for a trust, a seller carry-back or another private party.
    • INDIVIDUAL for a person’s name.
    • GOVERNMENT for an agency.
  • Since 0.17.0 the API classifies the folded name. The fold puts the name in upper case, removes punctuation, spells out abbreviations and joins initials. So a spelling cannot defeat a rule. Examples:
    • KS STATEBANK and MANUFACTURERS & TRADERS TR CO read BANK. A person whose surname is Banks does not.
    • A securitisation trust, or a trust with lender words in its name, reads NONBANK, not PRIVATE.
    • A housing authority, a city or a county reads GOVERNMENT, unless it is a credit union.
    • A name with a digit in it is never a person.
  • PRIVATE is not the hard-money sense of “private lender”. The Lender object carries is_hard_money for that. GET /v1/lenders/search finds a lender’s stable id from any spelling of the name here.
  • A placeholder lender is null. Sometimes the recorder typed NOT AVAILABLE, NOT PROVIDED, CORELOGIC SOLEX, UNKNOWN or another placeholder in the lender field. Since 0.17.0 the lien or history row then keeps its amounts and dates and carries lender_name: null with lender_class: null. Before that version the API served the placeholder as a name. The loan is real, but the lender is not measured. summary.first_lien_lender and summary.last_mortgage_lender follow the same rule, and the market’s meta.coverage[].parcel.financing.n_lenders never counts a placeholder.
  • Every lender name carries its registry id beside it. summary.first_lien_lender_id, summary.last_mortgage_lender_id, open_liens[].lender_id and mortgage_history[].lender_id are the ids of the lenders named beside them. An id is the key to GET /v1/lenders/{id} and to its loans. The financing.lender_id filter of the property search reads summary.last_mortgage_lender_id. An id is null where the name stays: a person-named lender below the person gate, or a market with no lender registry. The person gate is fewer than 10 loans on 5 parcels.
  • A registry rebuild moves no name. The API joins the ids from the registry when it reads the record. An id the registry later retired into another lender still opens the current profile (Retired ids).
  • cash_purchase is the file’s own flag on a lien, and it is blank in most rows. To ask if a sale was cash, use cash_sale_proxy on the sale block instead. The API derives that flag and names it for what it is. It is null on every parcel of a market whose delivery records a purchase mortgage on fewer than one priced last sale in five. meta.coverage[].parcel.sale_mortgage_measured is false there. The 2026 deliveries are below that bar.
  • An involuntary lien is not a foreclosure notice. No delivery carries a notice of default, of sale or of lis pendens. A tax lien or a judgement is the nearest signal this data holds.
  • mortgage_history[].position is a slot, not a lien position. Slot 1 is the oldest kept slot, and the highest filled slot is the newest. So a parcel with slot 5 filled lost older mortgages. sale_date on the same record is the loan’s own date as the file writes it. In open_liens[], position: 1 is the senior lien.

Contact data

borrowers[] on a mortgage and parties[] on an involuntary lien are the people named on the document. This host does not serve them: the records carry no such keys. Lender names are business names, and the host serves them. Every lender of record has a profile under a stable id (the Lender object).

GET /v1/properties/{id}/financing: the parcel's valuation, open liens, mortgage history and involuntary liens at the slice date.

property_id
string
required

The parcel.

Pattern: ^prop_[0-9a-f]{32}$
as_of
string
required

The delivery the slice comes from.

dated
boolean
required

True while the datasets are not in the current delivery.

valuation
object | null
required

The AVM block. Null when the slice carries no valuation for the parcel.

summary
object
required

The one-block summary, with the registry ids of its two lenders.

open_liens
object[]
required

Every open lien at as_of, senior first.

mortgage_history
object[]
required

The recorded mortgages, newest first.

involuntary_liens
object[]
required

The involuntary liens on record, newest first.