Agents
Sales transactions where this agent was listing or selling side
The agent's deals, newest first: every sale on which the agent is the buyer's agent or the listing / co-listing agent. side narrows to one half (buyer includes deals where the agent was on both sides; listing excludes them). Each row says which side the agent was on and carries the sale's recorded purchase loan — lender, loan officer, loan type, amount, title company — or null for a cash deal or a loan not yet on file. Pass flatFilters.mlsStatus: "SLD" for closed deals only. dealFilters adds an address search, the co-listing agent, builder / status-date filters and loan-side filters (financed, loan.* on the purchase loan). Sorts: the /v1/sales names plus listDate, builder, coListAgent, and the loan / party columns loanAmount, loanType, loanTransactionType, interestRate, lenderName, originatorName, companyName, brokerName, titleCompany, buyerName, sellerName, downPayment (one at a time; blanks last). listingAgent / soldAgent / coListAgent order by the name the row shows.
Authorization
Path parameters
idstringrequiredAgent document ID
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
dealFiltersobjectDeal filters beyond the sale flatFilters. Loan-side keys (financed, loan) and the loan / party sorts consider the newest 10,000 matching sales; truncated says when more matched.
Show child attributesHide child attributes
coListAgentNamestringCo-listing agent name: every word must start a word of the name the recorded.
financedbooleantrue: deals with a purchase loan on file; false: none on file (cash, or not yet recorded).
hasBuilderbooleantrue: new construction — the sale or its purchase loan names a builder (or a builder seller).
loanobjectFilters on the sale's purchase loan (the row's loan), with the /v1/loans filter semantics. Any key here keeps only financed deals whose purchase loan matches.
Show child attributesHide child attributes
brokerone 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
conformingboolean | nullemployerone 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
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.
lenderone 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
lenderNameone 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
loanCompanyone 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
loanTypeone 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
mortgageAmountone 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.
originatorone 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
transactionTypeone 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
searchstringAddress search: every word must start a word of the street line, city or ZIP ("12 oak" → 1200 Oakmont Dr).
statusDateone of | nullstatus-change date range. With mlsStatus: "ACT", {gte} keeps listings still active recently.
Show 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.
ltstringltestringfiltersone 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
bathsone 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.
ltnumberltenumberbedsone 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.
ltnumberltenumbercatsAllowedbooleanLease listings. true: a cats-OK token. false: No, or dogs-only.
cityone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 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
matchstringrequireddogsAllowedbooleanLease listings. true: a dogs-OK token. false: No, or cats-only.
elementarySchoolone of | nullElementary school name as listed, one or an array (any-of). Matched case-insensitively with the generic words (School, Elementary, Middle, High) removed, so Lago Vista Elementary School and Lago Vista Elementary select the same listings. All remaining words must appear in the stored name. The assigned school is as named on the listing record, not a boundary lookup. List the available values for an area with POST /v1/sales/analytics/chart and slice: "elementarySchool".
Show child attributesHide child attributes
Option 1stringOption 2string[]fipsone of | null5-digit county FIPS code — the exact-code escape hatch for county (which also accepts a county name).
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredfireplacebooleantrue: the listing has a fireplace. false: it says it does not. Rows with no answer match neither value.
garageSpacesone of | nullGarage spaces (e.g. {gte: 2}). Rows with no garage count are excluded unless includeNulls: true.
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.
ltnumberltenumbergeoBoundsobject | nullMap viewport {north, south, east, west} in degrees: only listings inside the box. west greater than east crosses the antimeridian. Unlike geoPoint (a radius) this is the shape a map reports. Applies to list, count and analytics alike.
Show child attributesHide child attributes
eastnumberrequirednorthnumberrequiredsouthnumberrequiredwestnumberrequiredgeoPointobject | 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
latnumberrequiredlonnumberrequiredradiusstringrequiredhasHoabooleantrue: the listing says it has an association, or carries a positive HOA fee. false: positive evidence of none (association flag N, or an explicit $0 fee) and no contradicting signal. A row with neither signal matches neither value.
highSchoolone of | nullHigh school name as listed, one or an array (any-of). Matched case-insensitively with the generic words (School, Elementary, Middle, High) removed, so Lago Vista Elementary School and Lago Vista Elementary select the same listings. All remaining words must appear in the stored name. The assigned school is as named on the listing record, not a boundary lookup. List the available values for an area with POST /v1/sales/analytics/chart and slice: "highSchool".
Show child attributesHide child attributes
Option 1stringOption 2string[]hoaFeeobject | nullMonthly-equivalent HOA fee in dollars: a quarterly fee is divided by 3, an annual fee by 12, and so on, so {lte: 300} means "at most $300 a month" whatever the listing's payment frequency. Only rows with a recognized recurring frequency (monthly, quarterly, semi-annual, annual, semi-monthly, weekly) are comparable; one-time, unknown and missing frequencies are excluded. Rows with no fee are excluded unless includeNulls: true (use that to also keep homes with no HOA fee on record, or hasHoa: false). Reads the primary association only.
Show child attributesHide child attributes
gtnumbergtenumberincludeNullsbooleanAlso keep rows where the field is missing (a range drops them by default). Requires a bound.
ltnumberltenumberkeywordstring | nullWords that must ALL appear in the listing description (public remarks), in any order, case-insensitive. Plain text: operators and punctuation (* ? " ( ) AND OR - :) are not interpreted. At most 200 characters and 12 words; empty or punctuation-only is a 400. Stemmed (granite matches granites), not fuzzy. Listing text is -supplied; see the display rules that apply to it.
listPriceone 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.
ltnumberltenumberlistingAgentone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredlotSizeSqftone of | nullLot size in square feet (1 acre = 43,560). Rows with no lot size are excluded unless includeNulls: true.
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.
ltnumberltenumbermiddleSchoolone of | nullMiddle school name as listed, one or an array (any-of). Matched case-insensitively with the generic words (School, Elementary, Middle, High) removed, so Lago Vista Elementary School and Lago Vista Elementary select the same listings. All remaining words must appear in the stored name. The assigned school is as named on the listing record, not a boundary lookup. List the available values for an area with POST /v1/sales/analytics/chart and slice: "middleSchool".
Show child attributesHide child attributes
Option 1stringOption 2string[]mlsStatusone of | nullShow child attributesHide child attributes
Option 1enumSLDACTPNDCancelledWDNEXPCNTOFFUNKRNTDRNTLSERNT-SLDRNT-ACTRNT-PNDRNT-WDNRNT-EXPRNT-LSERNT-RNTDOption 2enum[]Match any status
SLDACTPNDCancelledWDNEXPCNTOFFUNKRNTDRNTLSERNT-SLDRNT-ACTRNT-PNDRNT-WDNRNT-EXPRNT-LSERNT-RNTDOption 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredmodeenumandornewConstructionbooleantrue: the listing is flagged new construction, or its condition says new / under construction / to be built / pre-construction. false: flagged not-new and no such condition. A row with neither signal matches neither value.
petsAllowedbooleanLease listings (combine with propertyType: "Residential Lease"). true: cats OK, dogs OK or a plain Yes. false: No, with nothing permitting. Negotiable and detail-only values (size limit, deposit) with no OK token match neither value.
poolPrivatebooleantrue: the listing has a private pool. false: it says it does not. Community pools are not distinguished (feeds record them inconsistently). Rows with no answer match neither value.
priceReducedbooleantrue: the current list price is below the ORIGINAL list price. false: at or above it. Rows missing either price match neither value. (Not based on previousListPrice, which is unreliable.)
priceReductionPercentobject | nullHow far the current list price is below the ORIGINAL list price, in percent of the original: {gte: 5} = cut by at least 5%. Negative means the price was raised. Rows missing either price are excluded unless includeNulls: true. Pair with priceReduced: true to exclude unchanged listings from a lte range.
Show child attributesHide child attributes
gtnumbergtenumberincludeNullsbooleanAlso keep rows where the field is missing (a range drops them by default). Requires a bound.
ltnumberltenumberpropertyIdone of | nullParcel id — every sale record of one property (the mmPropertyId on a loan or property record). Loans' propertyId selects the same parcel.
Show 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
matchstringrequiredsaleDateone 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.
ltnumberltenumberschoolDistrictone of | nullSchool district name, one or an array (any-of). Matched case-insensitively with the generic words removed, so Austin Independent School District, Austin ISD and AUSTIN select the same listings. Matches the district assigned at any level (elementary, middle or high). It is a name match, not a boundary lookup: Austin would also match a district named Austin Achieve, so pair it with a location filter. List the available values for an area with POST /v1/sales/analytics/chart and slice: "schoolDistrict".
Show child attributesHide child attributes
Option 1stringOption 2string[]soldAgentone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredsoldPriceone 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.
ltnumberltenumbersqftone 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
matchstringrequiredstoriesone of | nullNumber of stories: 3, [1, 2] or {lte: 1} for single level. Where the listing has no stories value the building's story count is used instead, which for a condo is the whole building. Rows with neither are excluded unless includeNulls: true.
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.
ltnumberltenumberwaterfrontbooleantrue: waterfront property. false: it says it is not. Rows with no answer match neither value.
yearBuiltone 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.
ltnumberltenumberzipone of | nullShow child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredzipCodeone of | nullZIP code. Canonical key on sales (matches loans zipCode and the response DTO); zip is an alias kept for cross-entity parity.
Show child attributesHide child attributes
Option 1stringOption 2string[]Match any value
Option 3objectFuzzy text match
Show child attributesHide child attributes
matchstringrequiredpaginationobjectShow child attributesHide child attributes
cursorstringOpaque cursor from previous response for next page
sizeintegerPage size (1-100, default 25)
periodenumPre-aggregated period block. Rolling windows (last30Days, last60Days, last90Days, previousMonth, currentMonth) are NOT accepted here and return 400; they are supported on the loans, sales and market endpoints (list, count, breakdowns, analytics summary / time-series / chart) (see DatedPeriod).
2017201820192020202120222023202420252026last3Monthslast6Monthslast12Monthslast14Monthslast16Monthslast18Monthslast24MonthsyearToDateallTimesideenumWhich side of the deal the agent was on. buyer: the agent represented the buyer — deals where the agent was on BOTH sides (dual) count here. listing: the agent represented the seller only (duals are already in buyer). any (default): either side, each deal once. buyer + listing = any.
anybuyerlistingsortobject[]Show child attributesHide child attributes
fieldstringrequiredorderenumascdescResponses
200objectPaginated list of sales for this agentShow attributesHide attributes
cursorstringdataobject[]requiredShow child attributesHide child attributes
addressstring | nullFull street line — number, directionals, street name, suffix and unit (123 w 4th st), lowercase
builderNamestring | nullBuilder, on a new-construction sale
buyer1FirstMiddlestring | nullFirst buyer's first + middle name (an entity's whole name, with no last).
buyer1Laststring | nullFirst buyer's last name.
buyer2FirstMiddlestring | nullSecond buyer's first + middle name.
buyer2Laststring | nullSecond buyer's last name.
buyerNamestring | nullFirst buyer named on the sale — from the purchase loan's document when the record names none; null on most cash deals
citystring | nullcoListAgentIdstring | nullCo-listing agent's id (GET /v1/agents/{id}), when the sale's agent key resolves to one agent
coListAgentNamestring | nullCo-listing agent's name — the agent record's (lowercase) when coListAgentId resolved from the keys, else as the recorded it; lowercase
datestring | nullidstringrequiredlistAgentIdstring | nullListing agent's id (GET /v1/agents/{id}), when the sale's agent key resolves to one agent
listAgentNamestring | nulllistDatestring | nulllisting date (YYYY-MM-DD); days on market = date − listDate
listOfficeNamestring | nullListing agent's brokerage (office), as the recorded it; null when not on file
listPricenumber | nullLast List price
loanobject | nullThe purchase loan recorded against this sale (matched on the sale id), or null when none is recorded — a cash deal, or a loan not yet on file.
Show child attributesHide child attributes
amountnumber | nullrequiredbrokerNamestring | nullMortgage broker as written on the loan document, when the loan was third-party originated
brokerNmlsIdstring | nullrequiredMortgage broker NMLS id when the loan was third-party originated
companyNamestring | nullrequiredMortgage company the loan was written under
companyNmlsIdstring | nullrequiredemployerNamestring | nullEmployer at the time of the loan (the LO's company then), as recorded. Not companyName, the funding company on the document.
employerNmlsIdstring | nullNMLS id of employerName.
idstringrequiredLoan id (GET /v1/loans/{id})
interestRatenumber | nullNote rate in percent (e.g. 6.25), recorded or modeled; null when not on file
lenderIdstring | nullrequiredNormalized lender key — the value the lender filter accepts
lenderNamestring | nullrequiredLender as written on the loan document
loanTypestring | nullrequirede.g. conventional, fha, va
originatorNamestring | nullrequiredoriginatorNmlsIdstring | nullrequiredtitleCompanystring | nullrequiredtransactionTypestring | nullrequirede.g. purchase, refinance
mmPropertyIdstring | nullThe property's id (GET /v1/properties/{id})
pricenumber | nullseller1FirstMiddlestring | nullFirst seller's first + middle name.
seller1Laststring | nullFirst seller's last name.
seller2FirstMiddlestring | nullSecond seller's first + middle name.
seller2Laststring | nullSecond seller's last name.
sellerNamestring | nullFirst seller named on the sale — from the purchase loan's document when the record names none
sideenum | nullWhich side of this deal the agent was on: buyer, listing, or dual (both). null when the sale names the agent under an id this API cannot place on a side.
buyerlistingdualnullsoldAgentIdstring | nullBuyer's (selling) agent's id (GET /v1/agents/{id}), when the sale's agent key resolves to one agent
soldAgentNamestring | nullstatestring | nulltxTypestring | nullProperty type for the transacted property (e.g. Residential, Condominium) — the same value /v1/sales returns as propertyType. Named txType for backwards compatibility. Present on roughly 19% of sales; the rest carry no listing type and read null.
zipstring | nulltotalnumberrequiredtruncatedbooleantrue when more than 10,000 sales matched and a loan-side filter or a loan / party sort considered only the newest 10,000
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.