{
"property_id": "<string>",
"as_of": "<string>",
"dated": true,
"valuation": {
"as_of": "<string>",
"estimated_value": 0,
"range_low": 0,
"range_high": 0,
"confidence": 123,
"avm_date": "<string>",
"equity_balance": 0,
"equity_percent": 123,
"ltv": 123
},
"summary": {
"as_of": "<string>",
"open_lien_count": 0,
"open_lien_balance": 0,
"first_lien_lender": "<string>",
"first_lien_rate": 123,
"first_lien_balance": 0,
"has_heloc": true,
"cash_purchase": true,
"free_and_clear": true,
"involuntary_lien_count": 0,
"last_mortgage_recording_date": "<string>",
"last_mortgage_lender": "<string>",
"last_mortgage_amount": 0,
"last_mortgage_rate": 123,
"first_lien_lender_id": "<string>",
"last_mortgage_lender_id": "<string>"
},
"open_liens": [
{
"position": 0,
"lender_name": "<string>",
"lender_id": "<string>",
"assigned_lender_name": "<string>",
"loan_amount": 0,
"current_balance": 0,
"interest_rate": 123,
"estimated_payment": 0,
"term_months": 0,
"due_date": "<string>",
"loan_type": "<string>",
"ltv": 123,
"heloc": true,
"cash_purchase": true,
"construction_loan": true,
"standalone_refi": true,
"transaction_type": "<string>",
"recording_date": "<string>"
}
],
"mortgage_history": [
{
"position": 0,
"recording_date": "<string>",
"sale_date": "<string>",
"due_date": "<string>",
"lender_name": "<string>",
"lender_id": "<string>",
"loan_amount": 0,
"interest_rate": 123,
"term_months": 0,
"loan_type": "<string>",
"transaction_type": "<string>"
}
],
"involuntary_liens": [
{
"position": 0,
"lien_type": "<string>",
"document_type": "<string>",
"document_number": "<string>",
"recording_date": "<string>",
"filing_date": "<string>",
"lien_amount": 0,
"judgement_amount": 0,
"tax_period_end_date": "<string>"
}
]
}Objects
The Financing object
What the owner owes on a parcel at the slice date: the valuation, the open liens, the mortgage history and the involuntary liens.
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
| Part | What it is |
|---|---|
valuation | The automated valuation with its range and confidence, and the equity, equity percent and loan-to-value derived from it. |
summary | The whole picture in one block: open lien count and balance, the senior lien’s lender, rate and balance. It also says if a HELOC is open and if the parcel is free and clear, and it names the last recorded mortgage. |
open_liens[] | The liens the owner still owes at the slice date, senior first (position: 1). |
mortgage_history[] | Every mortgage the recorder shows on the parcel, most recent first, paid off ones included. |
involuntary_liens[] | UCC filings, judgements and tax liens on record. |
The fields a reader misreads
datedis true, andas_ofis the slice date inmeta.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 carriesmeta.dated[]. See dated data.- Null against 0.
open_lien_count: 0withfree_and_clear: truemeans “checked, nothing owed”. A nullopen_lien_balancemeans the slice does not carry a balance. A nullvaluationmeans no automated valuation for this parcel, not a value of zero. - Balances, rates and payments are estimates.
current_balance,interest_rateandestimated_paymentare the file’s amortised estimates from the recorded terms, not a servicer’s statement.loan_amountand the recording date are what the document says. lender_classcomes from the name alone, so it classifies and does not verify.private-lender-financedand thefinancing.lender_classfilter read it. The five values are:BANKfor a bank, credit union or thrift.NONBANKfor a mortgage company or other lending business.PRIVATEfor a trust, a seller carry-back or another private party.INDIVIDUALfor a person’s name.GOVERNMENTfor 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, notPRIVATE. - 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.
- KS STATEBANK and MANUFACTURERS & TRADERS TR CO read
PRIVATEis not the hard-money sense of “private lender”. The Lender object carriesis_hard_moneyfor that.GET /v1/lenders/searchfinds 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: nullwithlender_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_lenderandsummary.last_mortgage_lenderfollow the same rule, and the market’smeta.coverage[].parcel.financing.n_lendersnever 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_idandmortgage_history[].lender_idare the ids of the lenders named beside them. An id is the key toGET /v1/lenders/{id}and to its loans. Thefinancing.lender_idfilter of the property search readssummary.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_purchaseis the file’s own flag on a lien, and it is blank in most rows. To ask if a sale was cash, usecash_sale_proxyon 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_measuredis 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[].positionis 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_dateon the same record is the loan’s own date as the file writes it. Inopen_liens[],position: 1is 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.
The parcel.
Pattern:
^prop_[0-9a-f]{32}$The delivery the slice comes from.
True while the datasets are not in the current delivery.
The AVM block. Null when the slice carries no valuation for the parcel.
Show child attributes
Show child attributes
The one-block summary, with the registry ids of its two lenders.
Show child attributes
Show child attributes
Every open lien at as_of, senior first.
Show child attributes
Show child attributes
The recorded mortgages, newest first.
Show child attributes
Show child attributes
The involuntary liens on record, newest first.
Show child attributes
Show child attributes
Was this page helpful?