Market
Market summary (volume, units, rate, loan amount, credit score, LTV, DTI, income, etc.) with previous-period comparison
Authorization
Body application/json
advancedFiltersone ofShow child attributesHide child attributes
Option 1objectShow child attributesHide child attributes
childrenone of[]requiredArray of filter expressions (AND)
Same shape as its parent.
typeenumrequiredandOption 2objectShow child attributesHide child attributes
childrenone of[]requiredArray of filter expressions (OR)
Same shape as its parent.
typeenumrequiredorOption 3objectShow child attributesHide child attributes
childone ofrequiredSame shape as its parent.
typeenumrequirednotOption 4objectShow child attributesHide child attributes
fieldstringrequiredopenumrequiredComparison operator. exists means the field has a REAL value: on fields whose source records an unknown as an in-domain value (e.g. beds, squareFeet, lotSquareFeet, where an unrecorded measurement is stored as 0), those docs count as NOT existing. neq keeps docs with no value — it removes only what is known to equal the value, matching the reading of an exclusion.
eqneqgtgteltltebetweeninmatchgeoDistanceexiststypeenumrequiredfiltervaluenullComparison value
filtersone ofShow child attributesHide child attributes
Option 1objectShow child attributesHide child attributes
childrenone of[]requiredArray of filter expressions (AND)
Same shape as its parent.
typeenumrequiredandOption 2objectShow child attributesHide child attributes
childrenone of[]requiredArray of filter expressions (OR)
Same shape as its parent.
typeenumrequiredorOption 3objectShow child attributesHide child attributes
childone ofrequiredSame shape as its parent.
typeenumrequirednotOption 4objectShow child attributesHide child attributes
fieldstringrequiredopenumrequiredComparison operator. exists means the field has a REAL value: on fields whose source records an unknown as an in-domain value (e.g. beds, squareFeet, lotSquareFeet, where an unrecorded measurement is stored as 0), those docs count as NOT existing. neq keeps docs with no value — it removes only what is known to equal the value, matching the reading of an exclusion.
eqneqgtgteltltebetweeninmatchgeoDistanceexiststypeenumrequiredfiltervaluenullComparison value
flatFiltersobjectShow child attributesHide child attributes
amortizationTypeone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredappraisedValueone of | nullShow child attributesHide child attributes
Option 1numberOption 2number[]Match any value
Option 3objectNumeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.
Show child attributesHide child attributes
gtnumbergtenumberincludeNullsbooleanAlso keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.
ltnumberltenumberborrowerGenerationone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredchannelone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredclosingDateone of | nullShow child attributesHide child attributes
Option 1stringExact date, or a whole period: YYYY-MM-DD (that day), YYYY-MM (the whole month — "2025-06" = 2025-06-01 through 2025-06-30) or YYYY (the whole year). YYYYMMDD, MM/DD/YYYY, an ISO-8601 datetime and epoch milliseconds are also accepted. An unparseable value is a 400.
Option 2objectDate range. Excludes null/missing-field docs by default; add includeNulls: true to keep them. Bounds accept YYYY, YYYY-MM, YYYY-MM-DD, YYYYMMDD, MM/DD/YYYY, a full ISO datetime or epoch milliseconds; an unparseable bound is a 400. A partial bound denotes the whole period and expands to the edge that preserves the operator: gte/lt take the period START, gt/lte take the period END — so {gte: "2024"} means on/after 2024-01-01 and {lte: "2024"} means through 2024-12-31.
Show child attributesHide child attributes
gtstringgtestringincludeNullsbooleanAlso keep docs where the field is null/missing (a range filter drops them by default). Requires a bound.
ltstringltestringcombinedLtvone of | nullShow child attributesHide child attributes
Option 1numberOption 2number[]Match any value
Option 3objectNumeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.
Show child attributesHide child attributes
gtnumbergtenumberincludeNullsbooleanAlso keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.
ltnumberltenumbercommunityIncomeLevelone of | nullFFIEC income classification of the neighborhood the property sits in. A tract-level aggregate statistic describing the neighborhood, never an individual, household or applicant attribute. Carried on roughly a fifth of originations, so this filter narrows sharply.
Show child attributesHide child attributes
Option 1enumOne of (case-insensitive): low, moderate, middle, upper
lowmoderatemiddleupperOption 2enum[]Match any of these values
lowmoderatemiddleupperOption 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredcountyone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredcountyCodeone of | null3-digit county code (the county segment of a FIPS, e.g. Philadelphia = "101"). Pair it with state — the code is not unique across states. county accepts a county NAME or 5-digit FIPS and resolves to this code for you.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredcraEligiblebooleanOnly CRA-eligible originations (a low- or moderate-income neighborhood OR a low- or moderate-income borrower). Determined on every origination.
creditScoreone of | nullShow child attributesHide child attributes
Option 1numberOption 2number[]Match any value
Option 3objectNumeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.
Show child attributesHide child attributes
gtnumbergtenumberincludeNullsbooleanAlso keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.
ltnumberltenumbercurrentHomeOwnerboolean | nulldtione of | nullShow child attributesHide child attributes
Option 1numberOption 2number[]Match any value
Option 3objectNumeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.
Show child attributesHide child attributes
gtnumbergtenumberincludeNullsbooleanAlso keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.
ltnumberltenumberdtifrontone of | nullShow child attributesHide child attributes
Option 1numberOption 2number[]Match any value
Option 3objectNumeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.
Show child attributesHide child attributes
gtnumbergtenumberincludeNullsbooleanAlso keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.
ltnumberltenumberfirstTimeHomebuyerboolean | nullhmdaActionTakenone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredincomeone of | nullShow child attributesHide child attributes
Option 1numberOption 2number[]Match any value
Option 3objectNumeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.
Show child attributesHide child attributes
gtnumbergtenumberincludeNullsbooleanAlso keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.
ltnumberltenumberloanAmountone of | nullShow child attributesHide child attributes
Option 1numberOption 2number[]Match any value
Option 3objectNumeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.
Show child attributesHide child attributes
gtnumbergtenumberincludeNullsbooleanAlso keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.
ltnumberltenumberloanApplicationDateone of | nullShow child attributesHide child attributes
Option 1stringExact date, or a whole period: YYYY-MM-DD (that day), YYYY-MM (the whole month — "2025-06" = 2025-06-01 through 2025-06-30) or YYYY (the whole year). YYYYMMDD, MM/DD/YYYY, an ISO-8601 datetime and epoch milliseconds are also accepted. An unparseable value is a 400.
Option 2objectDate range. Excludes null/missing-field docs by default; add includeNulls: true to keep them. Bounds accept YYYY, YYYY-MM, YYYY-MM-DD, YYYYMMDD, MM/DD/YYYY, a full ISO datetime or epoch milliseconds; an unparseable bound is a 400. A partial bound denotes the whole period and expands to the edge that preserves the operator: gte/lt take the period START, gt/lte take the period END — so {gte: "2024"} means on/after 2024-01-01 and {lte: "2024"} means through 2024-12-31.
Show child attributesHide child attributes
gtstringgtestringincludeNullsbooleanAlso keep docs where the field is null/missing (a range filter drops them by default). Requires a bound.
ltstringltestringloanPurposeone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredloanStatusone of | nullHMDA action, else funding/denial/lock date evidence.
Show child attributesHide child attributes
Option 1enumOne of (case-insensitive): funded, purchased, not_funded, pending
fundedpurchasednot_fundedpendingOption 2enum[]Match any of these values
fundedpurchasednot_fundedpendingOption 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredloanTermone of | nullShow child attributesHide child attributes
Option 1numberOption 2number[]Match any value
Option 3objectNumeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.
Show child attributesHide child attributes
gtnumbergtenumberincludeNullsbooleanAlso keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.
ltnumberltenumberloanTypeone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredlowModIncomeTractbooleanOnly originations in a low- or moderate-income neighborhood. This describes the U.S. Census tract (neighborhood) as a whole — a tract-level aggregate statistic, never an individual, household or applicant attribute. false also matches originations whose neighborhood carries no income classification; pair with communityIncomeLevel when you need the classified population only.
ltvone of | nullShow child attributesHide child attributes
Option 1numberOption 2number[]Match any value
Option 3objectNumeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.
Show child attributesHide child attributes
gtnumbergtenumberincludeNullsbooleanAlso keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.
ltnumberltenumbermajorityMinorityTractbooleanOnly originations in a majority-minority neighborhood. This describes the U.S. Census tract (neighborhood) as a whole — a tract-level aggregate statistic, never an individual, household or applicant attribute. Carried on about half of originations.
metroone of | nullMetro area code (5-digit federal CBSA code, e.g. Los Angeles = "31084"). Roughly half of originations sit outside any metro area and carry no code, so a metro filter is a narrowing one.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredmiddleIncomeTractbooleanOnly originations in a middle-income neighborhood. Tract-level aggregate, never an individual attribute. Same caveat on false as lowModIncomeTract.
minorityTractPctone of | nullNon-white share (0-100) of the neighborhood's population. Tract-level aggregate, never an individual attribute.
Show child attributesHide child attributes
Option 1numberOption 2number[]Match any value
Option 3objectNumeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.
Show child attributesHide child attributes
gtnumbergtenumberincludeNullsbooleanAlso keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.
ltnumberltenumbermodeenumandornoteRateone of | nullShow child attributesHide child attributes
Option 1numberOption 2number[]Match any value
Option 3objectNumeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.
Show child attributesHide child attributes
gtnumbergtenumberincludeNullsbooleanAlso keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.
ltnumberltenumberoccupancyTypeone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredpropertyTypeone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredpurchasePriceone of | nullShow child attributesHide child attributes
Option 1numberOption 2number[]Match any value
Option 3objectNumeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.
Show child attributesHide child attributes
gtnumbergtenumberincludeNullsbooleanAlso keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.
ltnumberltenumberselfEmployedboolean | nullstateone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredtractIncomeVsMetroPctone of | nullNeighborhood median family income as a percent of its metro area's — 100 is parity, and it legitimately exceeds 100. Tract-level aggregate, never an individual attribute.
Show child attributesHide child attributes
Option 1numberOption 2number[]Match any value
Option 3objectNumeric range. Excludes null/missing-field docs by default; add includeNulls: true to keep them.
Show child attributesHide child attributes
gtnumbergtenumberincludeNullsbooleanAlso keep docs where the field is null/missing (a range filter drops them by default). Requires at least one of gte/lte/gt/lt.
ltnumberltenumberveteranIndicatorboolean | nullzipone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredperiodenumDate window for loans / sales / market endpoints. Accepts every Period value plus rolling windows: last30Days / last60Days / last90Days (today minus 30 / 60 / 90 days through today), previousMonth (the last complete calendar month) and currentMonth (the 1st of this month through today). All windows are resolved in UTC with inclusive calendar-date bounds. Rolling windows are only accepted by the loans, sales and market endpoints (list, count, breakdowns, analytics summary / time-series / chart); originators / companies / branches / agents / offices endpoints return 400 for them.
2017201820192020202120222023202420252026last3Monthslast6Monthslast12Monthslast14Monthslast16Monthslast18Monthslast24MonthsyearToDateallTimelast30Dayslast60Dayslast90DayspreviousMonthcurrentMonthResponses
200object16 market metrics + previous-period comparisonShow attributesHide attributes
completenessobjectData-completeness watermark for this response. Present only when it could be measured; absence means it was not measured, NOT that the data is complete.
Show child attributesHide child attributes
throughdaterequiredThe last calendar date (YYYY-MM-DD) this query's matching records actually reach. Records arrive after the events they describe, so a period ending today is normally backed by data ending days or weeks earlier, and any bucket extending past this date is built from a partial period. Measured from THIS query's own matched set, not a global figure: the delay varies by geography and moves over time, so two requests with different filters can legitimately report different dates.
currentobjectrequiredShow child attributesHide child attributes
avgAppraisedValuenumber | nullrequiredAverage appraised property value. Excludes values outside 0–100,000,000 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgCombinedLtvnumber | nullrequiredAverage combined LTV (including subordinate liens). Excludes values outside 0–999 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgCreditScorenumberrequiredAverage credit score. Excludes values outside 300–850 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgDTInumberrequiredAverage back-end DTI ratio across loan APPLICATIONS matching the filters — every outcome, on the same population as units. A denied application carries a much higher ratio than a funded loan, often above 100, so this figure sits several points above what closed borrowers actually carry. For originations use originatedAvgDti. Excludes values outside 0–999 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgDtiFrontnumber | nullrequiredAverage front-end DTI ratio. Excludes values outside 0–999 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgIncomenumberrequiredAverage household annual income. Excludes values outside 0–100,000,000 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgLTVnumberrequiredAverage LTV ratio. Excludes values outside 0–999 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgLoanAmountnumberrequiredAverage loan amount. Excludes values outside 0–100,000,000 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgLoanTermnumber | nullrequiredAverage loan term in months. Excludes values outside 0–1,200 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgPurchasePricenumber | nullrequiredAverage purchase price. Excludes values outside 0–100,000,000 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgRatenumberrequiredAverage note rate. Excludes values outside 0–25 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
excludedobjectPer-measure count of documents this query's sentinel guard excluded — documents that carry the measure's field but whose value is an out-of-range fill. Compare against units to see what share of the matched population each average was actually computed over. Absent for units (a document count, not a guarded metric).
Show child attributesHide child attributes
avgAppraisedValuenumberavgCombinedLtvnumberavgCreditScorenumberavgDTInumberavgDtiFrontnumberavgIncomenumberavgLTVnumberavgLoanAmountnumberavgLoanTermnumberavgPurchasePricenumberavgRatenumberoriginatedAvgDtinumberoriginatedVolumenumbervolumenumberoriginatedAvgDtinumber | nullrequiredAverage back-end DTI ratio across ORIGINATED loans only — the subset of applications whose hmdaActionTaken is "loan originated". Prefer this over avgDTI for any question about what borrowers who actually got a loan are carrying. avgDTI averages applications of EVERY outcome, and a denied application legitimately carries a far higher ratio — often above 100 — because that is frequently why it was denied, so the two figures differ by several points on the same filters and neither is a correction of the other. null when the matched set contains no originations. Excludes values outside 0–100 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
originatedUnitsnumberrequiredLoans ORIGINATED — the subset of units whose hmdaActionTaken is "loan originated". This is the count most callers mean by "number of loans"
originatedVolumenumberrequiredTotal dollar volume of ORIGINATED loans — the subset of volume whose hmdaActionTaken is "loan originated". Pair with originatedUnits for an originated average loan size. Excludes values outside 0–100,000,000 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
outcomesobject[]How the matched applications split by outcome — a complete PARTITION of units and volume, so the two headline numbers can be reconciled against their parts without a second query. Roughly half of all rows are not originated loans and the share varies widely by geography, so no fixed correction ratio exists. Summary only: on the chart use slice: "hmdaActionTaken", on the time-series segment: "hmdaActionTaken".
Show child attributesHide child attributes
outcomestringrequiredThe application outcome, exactly as stored — the same vocabulary the hmdaActionTaken filter accepts, so any bucket here can be reproduced as a filter. The empty-string bucket carries rows with no outcome recorded. One value is a leaked source header row and is not a real outcome.
unitsnumberrequiredApplications with this outcome. These sum to units.
volumenumberrequiredDollar volume for this outcome. These sum to volume.
unitsnumberrequiredLoan APPLICATIONS matching the filters — every outcome, not just originations. Withdrawn, denied, closed-for-incompleteness and secondary-market purchases are all counted here; roughly half of all rows are not originated loans, and the originated share varies enough by geography that no fixed correction ratio exists. For originations use originatedUnits; outcomes reports the full breakdown, and hmdaActionTaken filters on it
volumenumberrequiredTotal dollar volume of loan APPLICATIONS matching the filters — every outcome, on the same population as units, not just originations. For originated dollars use originatedVolume. volume ÷ units is an application average, not an originated average. Excludes values outside 0–100,000,000 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
previousobjectrequiredShow child attributesHide child attributes
avgAppraisedValuenumber | nullrequiredAverage appraised property value. Excludes values outside 0–100,000,000 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgCombinedLtvnumber | nullrequiredAverage combined LTV (including subordinate liens). Excludes values outside 0–999 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgCreditScorenumberrequiredAverage credit score. Excludes values outside 300–850 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgDTInumberrequiredAverage back-end DTI ratio across loan APPLICATIONS matching the filters — every outcome, on the same population as units. A denied application carries a much higher ratio than a funded loan, often above 100, so this figure sits several points above what closed borrowers actually carry. For originations use originatedAvgDti. Excludes values outside 0–999 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgDtiFrontnumber | nullrequiredAverage front-end DTI ratio. Excludes values outside 0–999 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgIncomenumberrequiredAverage household annual income. Excludes values outside 0–100,000,000 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgLTVnumberrequiredAverage LTV ratio. Excludes values outside 0–999 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgLoanAmountnumberrequiredAverage loan amount. Excludes values outside 0–100,000,000 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgLoanTermnumber | nullrequiredAverage loan term in months. Excludes values outside 0–1,200 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgPurchasePricenumber | nullrequiredAverage purchase price. Excludes values outside 0–100,000,000 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
avgRatenumberrequiredAverage note rate. Excludes values outside 0–25 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
excludedobjectPer-measure count of documents this query's sentinel guard excluded — documents that carry the measure's field but whose value is an out-of-range fill. Compare against units to see what share of the matched population each average was actually computed over. Absent for units (a document count, not a guarded metric).
Show child attributesHide child attributes
avgAppraisedValuenumberavgCombinedLtvnumberavgCreditScorenumberavgDTInumberavgDtiFrontnumberavgIncomenumberavgLTVnumberavgLoanAmountnumberavgLoanTermnumberavgPurchasePricenumberavgRatenumberoriginatedAvgDtinumberoriginatedVolumenumbervolumenumberoriginatedAvgDtinumber | nullrequiredAverage back-end DTI ratio across ORIGINATED loans only — the subset of applications whose hmdaActionTaken is "loan originated". Prefer this over avgDTI for any question about what borrowers who actually got a loan are carrying. avgDTI averages applications of EVERY outcome, and a denied application legitimately carries a far higher ratio — often above 100 — because that is frequently why it was denied, so the two figures differ by several points on the same filters and neither is a correction of the other. null when the matched set contains no originations. Excludes values outside 0–100 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
originatedUnitsnumberrequiredLoans ORIGINATED — the subset of units whose hmdaActionTaken is "loan originated". This is the count most callers mean by "number of loans"
originatedVolumenumberrequiredTotal dollar volume of ORIGINATED loans — the subset of volume whose hmdaActionTaken is "loan originated". Pair with originatedUnits for an originated average loan size. Excludes values outside 0–100,000,000 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
outcomesobject[]How the matched applications split by outcome — a complete PARTITION of units and volume, so the two headline numbers can be reconciled against their parts without a second query. Roughly half of all rows are not originated loans and the share varies widely by geography, so no fixed correction ratio exists. Summary only: on the chart use slice: "hmdaActionTaken", on the time-series segment: "hmdaActionTaken".
Show child attributesHide child attributes
outcomestringrequiredThe application outcome, exactly as stored — the same vocabulary the hmdaActionTaken filter accepts, so any bucket here can be reproduced as a filter. The empty-string bucket carries rows with no outcome recorded. One value is a leaked source header row and is not a real outcome.
unitsnumberrequiredApplications with this outcome. These sum to units.
volumenumberrequiredDollar volume for this outcome. These sum to volume.
unitsnumberrequiredLoan APPLICATIONS matching the filters — every outcome, not just originations. Withdrawn, denied, closed-for-incompleteness and secondary-market purchases are all counted here; roughly half of all rows are not originated loans, and the originated share varies enough by geography that no fixed correction ratio exists. For originations use originatedUnits; outcomes reports the full breakdown, and hmdaActionTaken filters on it
volumenumberrequiredTotal dollar volume of loan APPLICATIONS matching the filters — every outcome, on the same population as units, not just originations. For originated dollars use originatedVolume. volume ÷ units is an application average, not an originated average. Excludes values outside 0–100,000,000 — the source encodes unknown values as an out-of-range fill, and averaging them raw is wrong by orders of magnitude. The bound is applied before the metric and is not part of the public filter surface, so an equivalent range filter will not reproduce this figure exactly.
400objectValidation error401objectUnauthorized403objectForbidden (authenticated, but missing required context — e.g. no active organization)404objectNot found413objectResponse payload too large — detail endpoint capped to fit Lambda response limits503objectSearch timed out or the cluster is overloaded — retry after `Retry-After` seconds.