Properties
Get property by ID (with mm_property_id fallback)
Authorization
Path parameters
idstringrequiredProperty document ID
Responses
200objectProperty detailShow attributesHide attributes
alternatesstring[]Sibling document ids when ambiguousRef is true — pass one back as /{id} to fetch that exact unit. Absent on an unambiguous lookup.
ambiguousRefbooleantrue only when the id you passed resolved to more than one parcel (a non-unique mm_property_id colliding across units). data is a deterministic pick (the base parcel); use alternates to re-request a specific sibling by its exact id. Absent on an unambiguous lookup.
dataobjectrequiredShow child attributesHide child attributes
absenteeOwnerboolean | nulltrue when the owner's mailing address (street + 5-digit zip, case/punctuation-insensitive) differs from the property's site address — a non-owner-occupied/investor signal; false when the owner mails to the property; null when either address is missing. Filterable.
activeLoanCountnumber | nullMortgages believed to still be outstanding. IMPORTANT: 0 does not always mean the parcel is paid off — on a recently-sold parcel it usually means the buyer's new mortgage has not reached the public record yet, so the honest reading is UNKNOWN. Check activeLoanCountKnown before treating a 0 as fact, and do not infer 100% equity from it.
activeLoanCountKnownbooleanfalse when activeLoanCount reflects a gap in the record rather than a measurement — the parcel sold, its prior mortgage was excluded, and no replacement has been recorded yet. On those parcels activeLoanCount: 0, mortgageBalance: 0 and an equity of 100% are all consequences of the same missing document, not independent findings. To exclude them, filter preSaleLoanCount: {lte: 0} alongside activeLoanCount: {lte: 0}.
addressstring | nullapnstring | nullAssessor parcel number (cleaned)
avmobject | nullShow child attributesHide child attributes
confidencenumber | nullrequired0–100
highnumber | nullrequiredlownumber | nullrequiredmidnumber | nullrequiredbathsnumber | nullbedsnumber | nullborrowerStatusstring | nullborrowersobject[]Borrowers on the current mortgage (up to two); not the owner of record.
Show child attributesHide child attributes
firstNamestring | nullrequiredlastNamestring | nullrequiredcitystring | nullcoordinatesobject | nullShow child attributesHide child attributes
latnumberrequiredlonnumberrequiredcountyNamestring | nullCounty name, lowercase ("catawba county").
currentOwnerNamestring | nullThe assessor's owner-of-record line as recorded — every owner on title.
equityobject | nullShow child attributesHide child attributes
pctnumber | nullrequiredEquity as a FRACTION of the value estimate — 1 is the whole value, 0.5 is half. A 1 alongside activeLoanCountKnown: false is arithmetic on a missing mortgage, not a free-and-clear parcel.
valuenumber | nullrequiredEstimated equity in whole dollars — the value estimate minus the outstanding balance of the mortgages we know about. It inherits their completeness: when activeLoanCountKnown is false there is no known balance to subtract, so this equals the full value estimate and should NOT be read as equity.
equityPlausiblebooleanfalse when equity is outside the range our equity metrics treat as possible, so aggregate equity figures exclude this parcel while this row still shows it — both are correct, they are answering different questions. Applies to pct as well, since that is value divided by the value estimate. Read alongside activeLoanCountKnown, which is the opposite failure: that one flags equity computed against a MISSING mortgage (so equity looks too GOOD), where this one flags equity distorted by an oversized one (equity looks too BAD).
fipsstring | nullFIPS county code
foreclosureobjectShow child attributesHide child attributes
datestring | nullrequiredRecording date of the most recent foreclosure notice (ISO 8601) — the value the foreclosureDate filter matches. Null when the parcel has no notice.
matchedbooleanrequiredscheduledAuctionDatestring | nullrequiredstagestring | nullrequiredStage code of the most recent recorded foreclosure notice (e.g. "ND", "NS") — the value the foreclosureStage filter matches. Null when the parcel has no notice.
statusstring | nullrequirede.g. "in_foreclosure" or "unknown"
idstringrequiredDocument ID
loanCountnumber | nullEvery mortgage on record for this parcel, current or not. Splits into activeLoanCount + preSaleLoanCount + the paid-off and released counts on the detail position block.
loanTypestring | nullloansobject[]The parcel's cached top-5 loans (may be fewer than loanCount; full history is on the loans index).
Show child attributesHide child attributes
amountnumber | nullrequiredamountPlausiblebooleanfalse when amount is outside the range our mortgage metrics treat as possible, so aggregate totals exclude this loan while this row still shows it. Usually an institutional blanket loan — one note recorded against every parcel in a pool — which is a real record but not this property's debt. This judges SIZE only, so true means the amount is a believable one, not that it is the right one.
borrowerStatusstring | nullrequiredbrokerNmlsstring | nullrequiredcompanyNamestring | nullFunding-company name as recorded on the loan.
companyNmlsstring | nullrequiredcurrentBalancenumber | nullrequiredinterestRatenumber | nullrequiredlenderIdstring | nullrequiredLender id for this loan — pass it back as loanLender to select every parcel financed by the same lender, exactly as a chart bucket's id round-trips. null when this loan carries no lender id; use lenderName with loanLenderName in that case.
lenderNamestring | nullrequiredLender name as recorded on the loan document — the same value /v1/loans returns as lenderName for this loan. To filter parcels by it, pass it as loanLenderName; lenderId is the exact-id route.
lenderNmlsstring | nullrequiredloanTypestring | nullrequiredltvnumber | nullrequiredDEPRECATED — do not use; will be removed in a future major. This is not a reliable loan-to-value ratio. It is NOT per-loan: two thirds of parcels carrying several mortgages report an identical figure across loans of very different amounts, so per-loan equity computed from it is wrong. Nor does it consistently track the parcel's combined position, so it cannot be read as a whole-parcel ratio either. null when unknown — the stored value is clipped to a fixed range and both ends mean "clipped" rather than a real ratio, so they are returned as null rather than as a plausible-looking number. For a dependable measure of borrower position use equity on the parcel.
originatorNamestring | nullrequiredoriginatorNmlsstring | nullrequiredrecordedInterestRatenumber | nullrequiredrecordingDatestring | nullrequiredtransactionTypestring | nullrequiredlotSquareFeetnumber | nullmmPropertyIdstring | nullmortgageBalancenumber | nullmortgageBalancePlausiblebooleanfalse when mortgageBalance is outside the range our mortgage metrics treat as possible — typically a parcel carrying an institutional blanket loan, where one securitization note is recorded against every property in the pool. Sorting by mortgageBalance puts these first, so check this flag before reading the top of that list as the most heavily mortgaged homes.
ownerFirstNamestring | nullownerLastNamestring | nullownerMailingAddressobject | nullPrimary owner's mailing address, null when none is recorded.
Show child attributesHide child attributes
citystring | nullrequiredstatestring | nullrequiredstreetstring | nullrequiredzipstring | nullrequiredownerMiddleNamestring | nullownerNamestring | nullownerOccupancyenumAssessor owner-occupancy flag, bucketed: owner_occupied (owner-occupied, incl. the vendor's phased-out non-residential code), probable_owner_occupied, or not_flagged (the assessor did not flag the parcel — not proof of an investor, but where non-owner-occupied/investor parcels land; pair with absenteeOwner). Filterable.
owner_occupiedprobable_owner_occupiednot_flaggedownerOccupiedboolean | nulltrue only on the assessor's confident owner-occupied code ("Y"); null = not flagged / unknown, never false. Kept for compatibility — prefer ownerOccupancy.
partialBathsnumber | nullpreSaleLoanCountnumber | nullMortgages excluded from activeLoanCount because the parcel sold after they were recorded — the seller's loan, assumed paid off at closing. Read this NEXT TO activeLoanCount, never alone: a non-zero value on a parcel that still has an active loan is the normal post-sale state and means the replacement mortgage was recorded. It is only a warning when activeLoanCount is 0, which is what activeLoanCountKnown reports.
recordedInterestRatenumber | nullGenuine recorded note rate from the most-recent loan (sparse, ~7%). See loans[] for per-loan detail.
saleCountnumber | nullsalePropensityobject | nullShow child attributesHide child attributes
categorystring | nullrequiredLow/Medium/High
scorenumber | nullrequired0–100
salesobjectShow child attributesHide child attributes
countnumber | nullrequiredfirstDatestring | nullrequiredlastDatestring | nullrequiredlastPricenumber | nullrequiredscoredAtstring | nullsquareFeetnumber | nullstatestring | nullTwo-letter state abbreviation, uppercased (stored lowercase in OS)
storiesnumber | nullyearBuiltnumber | nullzipstring | nullcommunityLendingobject | nullCommunity Lending — the profile of the neighborhood (U.S. Census tract) this parcel sits in: program designations, income and affordability, the population profile, the local mortgage market, remoteness and proximity. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100. Two fields are deliberately NOT 0-100: tractIncomeVsMetroPct is a ratio where 100 means parity with the metro (it exceeds 100), and tractRuralGradient is an ordinal 1-10 code. null — not an all-null object — for the roughly 6% of parcels that resolve to no neighborhood. Every field here is also a filter key on POST /properties.
Show child attributesHide child attributes
affordableHousingTractboolean | nullrequiredA qualified neighborhood for affordable-housing programs. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
difficultDevelopmentAreaboolean | nullrequiredA HUD-designated difficult development area. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
distressedTractboolean | nullrequiredA distressed-or-underserved nonmetropolitan middle-income neighborhood. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
floodHazardTractboolean | nullrequiredIn a FEMA special flood hazard area. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
lowModIncomeTractboolean | nullrequiredA low- or moderate-income neighborhood under the Community Reinvestment Act. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
majorityMinorityTractboolean | nullrequiredA majority-minority neighborhood. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
milesToCollegenumber | nullrequiredDistance to the nearest college, in miles. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
milesToSchoolnumber | nullrequiredDistance to the nearest school, in miles. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
milesToWorshipnumber | nullrequiredDistance to the nearest place of worship, in miles. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
opportunityZoneboolean | nullrequiredIn a federally designated Opportunity Zone. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
ruralTractboolean | nullrequiredA rural neighborhood. Thinner coverage than the other designations, so null is common. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractApplicationsnumber | nullrequiredMortgage applications reported over the year. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractAsianPctnumber | nullrequiredAsian (non-Hispanic) share of the population. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractBlackPctnumber | nullrequiredBlack (non-Hispanic) share of the population. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractCountyCodestring | nullrequiredPublic three-digit county-within-state code (not the five-digit fips). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractDenialRatenumber | nullrequiredShare of mortgage applications that were denied. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractFamilyIncomenumber | nullrequiredMedian family income, in whole dollars. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractFloodZonestring | nullrequiredFEMA flood-zone code (e.g. AE). Null means no special flood hazard area on file. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractHispanicPctnumber | nullrequiredHispanic or Latino share of the population. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractHomeownershipRatenumber | nullrequiredOwner-occupied share of housing units. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractHouseholdIncomenumber | nullrequiredMedian household income, in whole dollars. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractIdstring | nullrequiredPublic six-digit neighborhood code. It repeats in every state and county, so it identifies a neighborhood only together with tractStateCode and tractCountyCode. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractIncomeLevelenum | nullrequiredRelative-income classification of the neighborhood: low, moderate, middle or upper. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
lowmoderatemiddleuppernulltractIncomeVsMetroPctnumber | nullrequiredNeighborhood income relative to its metro area, where 100 is parity. Legitimately exceeds 100 — this is a ratio, not a share. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractLoanVolumenumber | nullrequiredMortgage dollar volume reported over the year. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractMedianAgenumber | nullrequiredMedian age, in years. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractMedianHomeValuenumber | nullrequiredMedian home value across the neighborhood, in whole dollars — a neighborhood statistic, not this parcel's value estimate (see avm). Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractMinorityPctnumber | nullrequiredNon-white share of the population. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractOriginationsnumber | nullrequiredMortgage originations reported over the year. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractPopulationnumber | nullrequiredTotal population. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractPovertyRatenumber | nullrequiredShare of the population below the poverty line. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractRuralGradientnumber | nullrequiredRemoteness on an ordinal 1-10 scale (1 = metropolitan core, 10 = most remote). A code, not a percent. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractStateCodestring | nullrequiredPublic two-digit state code. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
tractWhiteNonHispanicPctnumber | nullrequiredWhite (non-Hispanic) share of the population. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
usdaEligibleTractboolean | nullrequiredEligible for USDA rural housing programs. Values describe the U.S. Census tract (neighborhood) as a whole — tract-level aggregate statistics, never an individual, household or applicant attribute. Percentages are 0-100.
enrichmentobject | nullOwner contact enrichment data (included if previously enriched by the authenticated user)
Show child attributesHide child attributes
enrichedAtstringrequiredISO 8601 timestamp
personsobject[]requiredsourcestringrequiredData source identifier
foreclosureDetailobject | nullShow child attributesHide child attributes
beneficiaryLenderstring | nullrequiredcountnumber | nullrequiredlatestCodestring | nullrequiredlatestDatestring | nullrequiredtrusteeSaleNumberstring | nullrequiredunpaidBalancenumber | nullrequiredownersobject[] | nullEvery owner of record — owners[0] is the same person the flat ownerName/ownerFirstName/ownerLastName fields describe, and the rest are co-owners/co-borrowers. Additive: those three fields are unchanged. null (never []) when the parcel has no readable owner.
Show child attributesHide child attributes
firstNamestring | nullrequiredfullNamestring | nullrequiredPer-owner composed display name; null when the record came from the assessment slots, which have no composed form.
lastNamestring | nullrequiredmiddleNamestring | nullrequiredpartiesobjectMortgage parties attributed to the parcel, split by scope: alltime (everyone on record, a strict superset of the rest), active (parties on loans still outstanding), matched (the subset whose loan resolved to a known NMLS entity) and last (the most recent loan). Real estate agents are not part of this block — reach parcels from an agent through POST /v1/agents/{id}/properties.
Show child attributesHide child attributes
activeobjectrequiredNMLS ids of the mortgage parties attributed to the parcel under one scope. Each id resolves through the originator, lender and company detail endpoints.
alltimeobjectrequiredNMLS ids of the mortgage parties attributed to the parcel under one scope. Each id resolves through the originator, lender and company detail endpoints.
lastobjectrequiredThe most recent loan's originator(s). Deliberately originator-only — see the parent description.
matchedobjectrequiredNMLS ids of the mortgage parties attributed to the parcel under one scope. Each id resolves through the originator, lender and company detail endpoints.
positionobjectShow child attributesHide child attributes
activeOverFiveboolean | nullrequiredloanCountActivenumber | nullrequiredloanCountAllnumber | nullrequiredloanCountPaidOffnumber | nullrequiredloanCountPreSalenumber | nullrequiredMortgages excluded because the parcel sold after they were recorded. Same value as the summary's preSaleLoanCount. These four counts partition loanCountAll.
loanCountReleasednumber | nullrequiredMortgages with a recorded release — documented evidence of a payoff, unlike loanCountPreSale.
sumOutstandingnumber | nullrequiredrelationshipsobjectShow child attributesHide child attributes
agentsstring[]requiredbrokersstring[]requiredcompaniesstring[]requiredlendersstring[]requiredoriginatorsstring[]required404objectProperty not found413objectResponse payload too large