Loans
Configurable chart data (measure × slice)
Buckets the filtered loans by slice and ranks them by measure, descending. Party slices (originator, broker, loanCompany) are pageable: send size (1–1000) and follow nextCursor via after to walk the whole ranking, with total giving the (approximate) number of distinct parties. Other slices return their fixed top-N. period accepts rolling windows (last30Days, last60Days, last90Days, previousMonth, currentMonth) resolved in UTC; /loans/analytics/summary with the same filters and period returns the matching population totals.
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
afterstringPARTY slices only. Opaque cursor from a previous page's nextCursor; send the same body otherwise. A cursor is bound to the slice and measure it was issued for (400 if they change). It is an offset into the ranking, so a rolling period re-resolved on a later UTC day ranks a shifted window.
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
borrowerStatusone of | nullModelMatch-derived loan position: whether the borrower on THIS loan is still the property's current owner. Codes read as [purpose_](C|P)W(N|C)LO — CW = current owner, PW = previous owner; NLO = a different originator than the prior loan, CLO = the same one (the retention signal).
CURRENT OWNER — Current (no newer loan), R_CWCLO/R_CWNLO (refinanced), E_CWCLO/E_CWNLO (took equity). For "past clients still in the home" pass ALL FIVE: "Current" on its own silently drops ~5M loans whose borrower is still there but has since refinanced or tapped equity.
PREVIOUS OWNER — PSALE (home sold), PWCLO/PWNLO (purchase loan), C_PWCLO/C_PWNLO (construction loan).
UNKNOWN — UNK_NOORIG (the property's most recent loan had no originator; ~64% of all populated values), UNK_PWCLO/UNK_PWNLO (most recent loan was not a purchase). REO_CWNLO/REO_CWCLO exist but are vanishingly rare (<300 loans total) and are not classified in the source glossary.
Only ~69% of loans carry any status, so an absent value means unknown — not "not current".
Show child attributesHide child attributes
Option 1enumOne of (case-insensitive): Current, PSALE, PWNLO, PWCLO, C_PWNLO, C_PWCLO, R_CWNLO, R_CWCLO, E_CWNLO, E_CWCLO, REO_CWNLO, REO_CWCLO, UNK_NOORIG, UNK_PWNLO, UNK_PWCLO
CurrentPSALEPWNLOPWCLOC_PWNLOC_PWCLOR_CWNLOR_CWCLOE_CWNLOE_CWCLOREO_CWNLOREO_CWCLOUNK_NOORIGUNK_PWNLOUNK_PWCLOOption 2enum[]Match any of these values
CurrentPSALEPWNLOPWCLOC_PWNLOC_PWCLOR_CWNLOR_CWCLOE_CWNLOE_CWCLOREO_CWNLOREO_CWCLOUNK_NOORIGUNK_PWNLOUNK_PWCLOOption 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredbrokerone of | nullBroker shop NMLS id (digits only). A broker is a company — resolve a broker name to its NMLS id via instantSearch (or listCompanies).
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredbuyerEntityTypeboolean | nullcityone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredconformingboolean | nullcountyone of | nullCounty name (e.g. "Broward") or 5-digit FIPS code. Names resolve to FIPS server-side; include a state filter to disambiguate.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredcurrentBalanceone of | nullEstimated remaining principal balance (~19% populated). Approximate current equity as homeValue (AVM) minus this.
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.
ltnumberltenumberemployerone of | nullEmployer/company NMLS id (digits only). Resolve a company name to its NMLS id via instantSearch.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredequityone of | nullPoint-in-time equity recorded on the loan (sparse, ~10%). NOT a live current-equity figure. For HELOC/cash-out targeting on up-to-date equity, use properties search (listProperties) instead — its equity is far better populated and current.
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.
ltnumberltenumberexcludeBrokerone of | nullExclude loans brokered by this broker-shop NMLS id (digits only) — the inverse of broker.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredexcludeCityone of | nullExclude loans in this city — the inverse of city.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredexcludeLenderone of | nullExclude loans from this lender ID ("everyone but X") — the inverse of lender, same id contract (resolve via instantSearch/listLenders). Loans with no lender stay in the results.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredexcludeLoanCompanyone of | nullExclude loans funded by this company NMLS id (digits only) — the inverse of loanCompany.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredexcludeLoanTypeone of | nullExclude loans of this loan type — the inverse of loanType, same values (one type or a list; a list drops loans matching ANY of them). E.g. ["he", "heloc"] keeps everything but home-equity loans and HELOCs. Loans with no loan type recorded stay in the results.
Show child attributesHide child attributes
Option 1enumOne of (case-insensitive): conventional, fha, va, usda, he, heloc, building, balloon, commercial, reverse, sba, assumption, stand_alone_refi, stand_alone_second, aggregate, closed_end, negative_amortization, land_contract, modification, trade, other, unknown
conventionalfhavausdahehelocbuildingballooncommercialreversesbaassumptionstand_alone_refistand_alone_secondaggregateclosed_endnegative_amortizationland_contractmodificationtradeotherunknownOption 2enum[]Match any of these values
conventionalfhavausdahehelocbuildingballooncommercialreversesbaassumptionstand_alone_refistand_alone_secondaggregateclosed_endnegative_amortizationland_contractmodificationtradeotherunknownOption 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredexcludeOriginatorone of | nullExclude loans with this originator NMLS id (digits only) — the inverse of originator. Common for 'everyone but my own shop' lists.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredexcludeStateone of | nullExclude loans in this state (2-letter code, e.g. "CA") — the inverse of state. For "everywhere but this state" lists.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredexcludeTransactionTypeone of | nullExclude loans of this transaction type — the inverse of transactionType, same values (one type or a list; a list drops loans matching ANY of them). E.g. ["equity"] keeps purchase, refinance, construction and REO. Loans with no transaction type recorded stay in the results.
Show child attributesHide child attributes
Option 1enumOne of (case-insensitive): purchase, refinance, construction, equity, reo
purchaserefinanceconstructionequityreoOption 2enum[]Match any of these values
purchaserefinanceconstructionequityreoOption 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredexcludeZipCodeone of | nullExclude loans in this ZIP code — the inverse of zipCode.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredfipsone of | nullExact 5-digit county FIPS code (no name resolution) — the code-only escape hatch alongside county.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredgeoPointobject | nullRadius search — { lat, lon, radius } (e.g. radius "15mi" or "24km") — around any office on the agent's record; with locationSource office the CURRENT office, production their transactions.
Show child attributesHide child attributes
latnumberrequiredlonnumberrequiredradiusstringrequiredhomeValueone of | nullAVM (automated valuation) at the linked property (~26%, -linked). Pair with currentBalance to approximate current equity.
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.
ltnumberltenumberincludeUnknownOriginatorbooleanInclude loans that have no originator NMLS id. Omitted/false (default): such loans are excluded — the vast majority are pre-2016 public records with no linkable originator. true: include them. Note that the default scopes results to loans with a known originator (~2016+ recordings).
interestRateone 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.
ltnumberltenumberlenderone of | nullLender ID — the normalized lender-dictionary key, NOT a fuzzy name match. Resolve a lender via instantSearch (or listLenders) and pass the id it returns (e.g. "mortgage_rocket" or "mortgage rocket"). Underscores and letter case are normalized, so either id surface works. A stored normalized lender name (what the slice: "lender" chart buckets emit) is also accepted, so a chart bucket key filters directly. A value that is neither returns 400 rather than silently matching nothing — to search by lender NAME, use lenderName.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredlenderNameone of | nullLender name as recorded on the loan document — fuzzy, all-terms match (e.g. "Fifth Third"). The name counterpart to the exact-id lender filter; use lender when you have a resolved id, and this when you only have a name.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredloanCompanyone of | nullFunding/loan company NMLS id (digits only). Resolve a company name to its NMLS id via instantSearch.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredloanTypeone of | nullShow child attributesHide child attributes
Option 1enumOne of (case-insensitive): conventional, fha, va, usda, he, heloc, building, balloon, commercial, reverse, sba, assumption, stand_alone_refi, stand_alone_second, aggregate, closed_end, negative_amortization, land_contract, modification, trade, other, unknown
conventionalfhavausdahehelocbuildingballooncommercialreversesbaassumptionstand_alone_refistand_alone_secondaggregateclosed_endnegative_amortizationland_contractmodificationtradeotherunknownOption 2enum[]Match any of these values
conventionalfhavausdahehelocbuildingballooncommercialreversesbaassumptionstand_alone_refistand_alone_secondaggregateclosed_endnegative_amortizationland_contractmodificationtradeotherunknownOption 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredltvAtOriginationone of | nullLoan-to-value at ORIGINATION (sparse), as a PERCENT on a 0-100 scale (80 = 80% LTV; values above 100 are real underwater loans). This is not a current LTV — there is no stored current-LTV field on loans.
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.
ltnumberltenumbermodeenumandormortgageAmountone 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.
ltnumberltenumbermortgageDateone 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.
ltstringltestringoriginatorone of | nullLoan originator NMLS id (digits only). To search by name use originatorName, or resolve a name to its id via instantSearch.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredoriginatorNameone of | nullDEPRECATED — fuzzy name matching is unreliable (same originator can return wildly different counts by name string). Resolve the loan officer via instantSearch and filter by originator (exact NMLS id) instead. Still functional for now.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredpropertyIdone of | nullParcel id — returns every loan recorded against one property. Pass the same string this endpoint returns as mmPropertyId on a loan row, or the mmPropertyId of a property record.
This is the parcel's FULL recorded loan history, which is deliberately wider than the loans embedded on a property record: that embed is a snapshot of what is still owed (up to five currently-active loans), so paid-off mortgages are absent from it and present here.
Multi-unit caveat: loans carry a unit-blind parcel id, so for one unit of a multi-unit building this selects every unit in the building, not that unit alone.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredreverseRefinancebooleanHECM-to-HECM. true: keep only reverse loans recorded AFTER an earlier reverse loan (≥ $1,000) on the same property — a refinance of an existing reverse mortgage, resolved from the property's loan history because the transaction type does not record it. Pair with loanType: "reverse". Resolves up to 50,000 distinct properties per request (else 400). Chart only.
saleDateone 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.
ltstringltestringsalePriceone 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.
ltnumberltenumberstateone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredtransactionTypeone of | nullShow child attributesHide child attributes
Option 1enumOne of (case-insensitive): purchase, refinance, construction, equity, reo
purchaserefinanceconstructionequityreoOption 2enum[]Match any of these values
purchaserefinanceconstructionequityreoOption 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredzipone of | nullAlias of zipCode — same ZIP filter, accepted for cross-entity key parity.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredzipCodeone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredmeasureenumdefault: "units"Which metric each bar reports, AND what the bars are ranked by — the list is ordered by the measure you ask for, descending. Defaults to units, so an unqualified "top originators" means the busiest; pass volume for the biggest by dollars, or an average to rank by that average. Two things to know about the averages specifically. Buckets built from fewer than 5 documents are dropped from an average chart entirely, because a mean says nothing about how many transactions produced it and a single-transaction bucket would otherwise outrank real ones; no floor is applied to units or volume, where a lone large transaction is a legitimate top bar. And ranking a bucket list by a sub-aggregated average is approximate in the search engine — each shard contributes its own local top-N before they are merged — so treat the ordering of an average chart as indicative near the boundary rather than exact. Every bucket publishes its own count, so the sample size behind a value is never implicit.
volumeunitsavgSalePriceavgListPriceperiodenumDate 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.
2017201820192020202120222023202420252026last3Monthslast6Monthslast12Monthslast14Monthslast16Monthslast18Monthslast24MonthsyearToDateallTimelast30Dayslast60Dayslast90DayspreviousMonthcurrentMonthsegmentenumDimension to group by. Most are the loan's own field (loanType, transactionType, state, …). lender groups on the normalized lender (label = display name, id = filter key). propertyType is the recorder's land-use code of the collateral (SFR single-family, PUD planned unit development, CND condo, RES residential-other, MFD multi-family dwelling, 2ND second home, MFG manufactured, TWN townhouse, LAN land, COM commercial, …); loans with no code are not grouped (≈20% of recent loans). conforming splits on the conforming-loan-limit flag: conforming vs nonConforming (above the county conforming limit — i.e. jumbo, not Non-QM), raw true/false on id.
transactionTypeloanTypecitycountystateziplenderpropertyTypeconformingbrokerloanCompanyoriginatorsizeintegerPARTY slices only (originator, broker, loanCompany; 400 on any other slice). Page size for the ranking, 1–1000. Passing size (or after) turns on paging: the response gains total / totalApproximate and, when more buckets remain, nextCursor, and drops omittedCount. Buckets stay ranked by measure descending (ties broken by key), and bucket labels stay NMLS ids. Default when only after is sent: 200, the fixed chart's bucket count. Paging reaches the top 10,000 ranked buckets.
sliceenumrequiredDimension to group by. Most are the loan's own field (loanType, transactionType, state, …). lender groups on the normalized lender (label = display name, id = filter key). propertyType is the recorder's land-use code of the collateral (SFR single-family, PUD planned unit development, CND condo, RES residential-other, MFD multi-family dwelling, 2ND second home, MFG manufactured, TWN townhouse, LAN land, COM commercial, …); loans with no code are not grouped (≈20% of recent loans). conforming splits on the conforming-loan-limit flag: conforming vs nonConforming (above the county conforming limit — i.e. jumbo, not Non-QM), raw true/false on id.
transactionTypeloanTypecitycountystateziplenderpropertyTypeconformingbrokerloanCompanyoriginatorResponses
200objectChart data. Money measures (`volume`, `avgSalePrice`, `avgListPrice`) are sentinel-guarded. 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.Show 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.
dataobject[]requiredShow child attributesHide child attributes
countnumberrequiredHow many documents this bucket was built from — the denominator behind value, published whatever the measure. It is the sample size of an average, the transaction count behind a volume sum, and (for measure: "units") value itself. Present on every bucket. Distinct from excluded, which reports how many of these documents a guarded measure's sentinel filter then dropped: a bucket can look well-populated here and still average over far fewer.
excludednumberHow many of this bucket's documents the measure's sentinel guard excluded — documents that carry the field but whose value is an out-of-range fill. Additive and optional: absent when the measure is unguarded (a document count, or a field with no fill values). Present per BUCKET because exclusion is not uniform — one period or slice can be almost entirely fill values while its neighbors are clean, and a single response-level total would hide exactly that.
idstringMachine value behind label when the bucket key is not itself the label. lender: label is the dictionary display name and id the normalized lender key — pass id, not label, back as a lender filter value. conforming: label is conforming / nonConforming and id the raw true / false flag. titleCompany (time-series segment): label is the most-used spelling and id the normalized name every spelling was merged under — match segments across buckets on id. Absent on slices whose label is already the machine value.
labelstringrequiredsegmentsobject[]Present only when the request named a segment: this bucket broken down by that second dimension, ranked by the same measure and capped at 25 per bucket (the rest is counted in segmentsOmittedCount). Documents with no value for the segment are not grouped and appear nowhere here, so segment counts sum to at most the bucket's count.
Show child attributesHide child attributes
countnumberrequiredDocuments in this segment of the parent bucket — the denominator behind value, whatever the measure.
idstringMachine value behind label when the bucket key is not itself the label. lender: label is the dictionary display name and id the normalized lender key — pass id, not label, back as a lender filter value. conforming: label is conforming / nonConforming and id the raw true / false flag. titleCompany (time-series segment): label is the most-used spelling and id the normalized name every spelling was merged under — match segments across buckets on id. Absent on slices whose label is already the machine value.
labelstringrequiredvaluenumberrequiredThe requested measure over the documents in BOTH this segment and its parent bucket.
segmentsOmittedCountnumberPresent only with segments: documents in this bucket whose segment value fell past the 25-per-bucket cap. A document COUNT, never a dollar figure. 0 means segments is the complete breakdown of every document that carries a segment value.
unattributedenumPresent and true on at most one bucket, which is NOT a real category: it collects the documents this breakdown could not attribute to any value of the slice, and its label ("(unknown)") is prose, not an identifier. Filter on THIS field, never on the label — a consumer plotting a map or joining the label to a real code must drop this row. It is always the LAST element of data, appended after ranking rather than placed by value, so it is the one bucket that does not obey the ordering measure describes. It exists so the bars account for the same population the summary reports: a document whose slice field holds no indexed term is absent from a terms breakdown entirely rather than forming a small bucket, so without it a chart silently omits part of its own corpus. That reconciliation is exact for units; on an average it is not, because buckets under the five-document floor are dropped and a slice with more than 200 distinct values still truncates — neither loss is collected in this row (the truncated tail is reported response-wide as omittedCount; the floor is reported nowhere). Absent when there is nothing unattributed, never false and never a zero-valued row.
truevaluenumberrequiredmeasurestringrequirednextCursorstringPaged party slices only (a chart request that passed size or after with slice originator / broker / loanCompany). Opaque cursor for the next page of the ranking — send it back as after with the same body. Absent on the last page.
omittedCountnumberHow many documents fell outside the bars — the size of the dropped tail, not its value. A chart groups by a capped number of distinct values, so a slice with more of them than the cap returns its largest groups and drops the rest; zip, city, lender and originator are the ones that reach it. It is the documents in the groups past the size cap, and only those: documents excluded from the slice by its empty-value filter, or carrying no value for it at all, are never grouped and are not counted here either. Where the response carries an unattributed row that row collects them; elsewhere a small residual against /analytics/summary can remain on city, lender, originator and similar, so bars plus this count reconcile with the summary's population exactly only on a slice with no such documents. 0 means the bars ARE the complete set, and the field is absent only where the grouping cannot truncate at all — so 0 and missing are different claims. Unlike a breakdown there is no next page to fetch: narrow the filters or pick a coarser slice. It is a DOCUMENT count and never a dollar or an average — the aggregation reports how many rows it left out, not what they were worth, so a truncated volume chart cannot be completed from this figure. One exception it does not cover: the average measures drop buckets thinner than a minimum sample size, and those are not counted here — compare against the summary when a mean matters.
segmentstring | nullrequiredThe second dimension echoed from the request, or null for a one-dimensional chart (then no bucket carries segments).
slicestringrequiredtotalintegerPaged party slices only. Distinct bucket keys (e.g. originators) in the filtered population — what a consumer paginates against. A cardinality ESTIMATE (see totalApproximate): near-exact below 40,000, approximate above. On an average measure it can exceed the ranked buckets, which drop keys under the 5-document floor. Use nextCursor, not total, to decide whether another page exists.
totalApproximatebooleanPresent (always true) alongside total: the total is a cardinality estimate, not an exact count.
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.