@model-match/api 3.44.0 → 3.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { S as client, n as createClient } from "../src-DX-mM6Og.mjs";
1
+ import { S as client, n as createClient } from "../src-B0B4SZ9p.mjs";
2
2
  //#region src/slim/sdk.gen.ts
3
3
  /**
4
4
  * Search agents with filters
@@ -175,6 +175,22 @@ const countAgents = (options) => (options?.client ?? client).post({
175
175
  }
176
176
  });
177
177
  /**
178
+ * List agent office groups
179
+ *
180
+ * The brokerage brand groups this workspace may pass as `officeGroups` / `excludeOfficeGroups` on `listAgents`. Entitlement-gated: a workspace without the entitlement gets an empty list.
181
+ */
182
+ const listAgentOfficeGroups = (options) => (options?.client ?? client).get({
183
+ security: [{
184
+ name: "x-api-key",
185
+ type: "apiKey"
186
+ }, {
187
+ scheme: "bearer",
188
+ type: "http"
189
+ }],
190
+ url: "/v1/agents/office-groups",
191
+ ...options
192
+ });
193
+ /**
178
194
  * Get agent by ID
179
195
  */
180
196
  const getAgent = (options) => (options.client ?? client).get({
@@ -5065,7 +5081,7 @@ const getOriginator = (options) => (options.client ?? client).get({
5065
5081
  /**
5066
5082
  * Real-estate agents this LO co-closed with
5067
5083
  *
5068
- * Ranks the real-estate agents on this LO's loans, by volume — the buyer's agent by default, the listing and co-listing agents with `side: "listing"`. Each loan is credited to the agent its MLS agent keys resolve to (a key naming several different people credits only the confirmed one), so `units` counts distinct loans per agent. `id` is that agent's id (pass it to `GET /v1/agents/{id}`); absent when the loan's key matches no agent profile, in which case `label` is the name the MLS recorded. Names that are an MLS placeholder for "no agent recorded" (`non member`, `non listed agent`, and ~140 board-specific spellings) are excluded — they are not people. Percentages are shares of the LO's whole loan population, so they do not sum to 100 across the page.
5084
+ * Ranks the real-estate agents on this LO's loans, by volume — the buyer's agent by default, the listing and co-listing agents with `side: "listing"`. Each loan is credited to the agent its MLS agent keys resolve to (a key naming several different people credits only the confirmed one), so `units` counts distinct loans per agent. `id` is that agent's id (pass it to `GET /v1/agents/{id}`) and `office` / `contact` its brokerage and email / direct phone; absent when the loan's key matches no agent profile, in which case `label` is the name the MLS recorded. Names that are an MLS placeholder for "no agent recorded" (`non member`, `non listed agent`, and ~140 board-specific spellings) are excluded — they are not people. Percentages are shares of the LO's whole loan population, so they do not sum to 100 across the page.
5069
5085
  */
5070
5086
  const originatorAgents = (options) => (options.client ?? client).post({
5071
5087
  security: [{
@@ -5365,7 +5381,7 @@ const originatorRetention = (options) => (options.client ?? client).post({
5365
5381
  /**
5366
5382
  * Search properties with filters
5367
5383
  *
5368
- * Search and list individual properties/parcels with filters — one row per parcel. Filter by location (state, county, city, zip, address), owner name, property characteristics (beds, baths, square footage, year built, property type), value, and ownership or transaction history, with sorting and cursor pagination. This is the discrete per-property record search: use it to find specific properties or build a filtered property list. (For a single property by its ID use the property detail endpoint.) If you only need how many properties match and not the records themselves, send the same request body to `countProperties`.
5384
+ * Search and list individual properties/parcels with filters — one row per parcel. Filter by location (state, county, city, zip, address), owner name, property characteristics (beds, baths, square footage, year built, property type), value, ownership or transaction history, and occupancy (`ownerOccupancy: not_flagged` plus `absenteeOwner: true` targets likely investor / non-owner-occupied parcels — pair `absenteeOwner` with a geography filter), with sorting and cursor pagination. This is the discrete per-property record search: use it to find specific properties or build a filtered property list. (For a single property by its ID use the property detail endpoint.) If you only need how many properties match and not the records themselves, send the same request body to `countProperties`.
5369
5385
  */
5370
5386
  const listProperties = (options) => (options?.client ?? client).post({
5371
5387
  security: [{
@@ -5915,4 +5931,4 @@ const getSearchToken = (options) => (options?.client ?? client).get({
5915
5931
  ...options
5916
5932
  });
5917
5933
  //#endregion
5918
- export { client as _heyApiClient, actionCrmCallerId, addCrmContactMethod, addCrmListMember, addCrmListMembersBulk, addCrmNote, addCrmRecord, addCrmRecordsBulk, addWatchedAgent, addWatchedArea, addWatchedDocument, agentAnalyticsChart, agentAnalyticsSummary, agentAnalyticsTimeSeries, agentBuilders, agentCities, agentCompanies, agentCounties, agentLenders, agentLoanMix, agentMarkets, agentMortgagedTimeSeries, agentOffices, agentOriginators, agentProperties, agentRelated, agentSales, agentStates, agentTitleCompanies, agentTitleCompaniesTimeSeries, agentZipCodes, analyzeCrmCall, applyCrmEnrichment, applyCrmListMiUpdates, applyCrmListTemplate, applyCrmMiUpdates, branchAnalyticsChart, branchAnalyticsSummary, branchAnalyticsTimeSeries, branchCities, branchCounties, branchLenders, branchLoans, branchOriginators, branchRoster, branchStates, branchTitleCompanies, cancelAgentsBulkDeliveryJob, cancelBranchesBulkDeliveryJob, cancelCompaniesBulkDeliveryJob, cancelEnrichBulkJob, cancelLoansBulkDeliveryJob, cancelOriginatorsBulkDeliveryJob, cancelPropertiesBulkDeliveryJob, companyAgents, companyAnalyticsChart, companyAnalyticsSummary, companyAnalyticsTimeSeries, companyBranches, companyBrokers, companyCities, companyCounties, companyDepartureStatus, companyEarlyExits, companyEmployeeStats, companyEmployment, companyHeadcount, companyLenders, companyMarkets, companyMoverProduction, companyOffices, companyOriginators, companyRelated, companySponsoredIndividuals, companySponsorshipMovement, companyStates, companyTalentFlow, companyTitleCompanies, companyZipCodes, countAgents, countBranches, countCompanies, countLenders, countLoans, countOffices, countOriginators, countProperties, countSales, createAgentContactSubmission, createAlertSubscription, createClient, createCrmList, createCrmListField, createCrmManualRecord, createCrmMeeting, createCrmObjectField, createCrmRecord, createCrmTask, createCrmTemplate, createMyAlertRecipe, createOriginatorContactSubmission, createSavedFilter, crmLenderChannels, crmLoLoanMix, crmLoMomentum, crmLoSponsorLocation, crmSimilarOriginators, declineCrmMiUpdate, deleteAlertSubscription, deleteCrmCallerId, deleteCrmList, deleteCrmListField, deleteCrmMeeting, deleteCrmNote, deleteCrmObjectField, deleteCrmRecord, deleteCrmRecords, deleteCrmTask, deleteCrmTemplate, deleteMyAlertRecipe, deleteSavedFilter, describeCrmRecordsOnAdd, dismissCrmListMiUpdates, dismissCrmMiUpdates, editCrmLoggedActivity, editCrmNote, enrichPropertiesBatch, enrichPropertiesBulk, enrichProperty, filterCrmListMembers, findCrmRecordByNmls, generateCrmRecordDescription, getAgent, getAgentsBulkDeliveryJob, getAlertConditions, getAlertEmailTokens, getAlertUnreadCount, getBranch, getBranchesBulkDeliveryJob, getCompaniesBulkDeliveryJob, getCompany, getCrmActiveCall, getCrmActivityReport, getCrmCall, getCrmCallTranscript, getCrmCustomValues, getCrmImportJob, getCrmList, getCrmListMemberIds, getCrmListMiUpdates, getCrmListShares, getCrmMiUpdates, getCrmOutcomesReport, getCrmOverrides, getCrmProductionEnrichJob, getCrmRecordAccess, getCrmRecordAccessRequest, getCrmRecordConnections, getCrmRecordMemberIds, getCrmRecordProfile, getCrmTemplate, getCrmTemplateShares, getEnrichBulkJob, getHubspotPushStatus, getLender, getLoan, getLoansBulkDeliveryJob, getMe, getMeCredits, getMePlan, getOffice, getOriginator, getOriginatorsBulkDeliveryJob, getPropertiesBulkDeliveryJob, getProperty, getRealtimeConfig, getSale, getSavedFilter, getSearchToken, grantCrmListAccess, grantCrmRecordAccess, grantCrmRecordAccessRequest, hangupCrmCall, importCrmRecords, instantSearch, lenderCities, lenderCompanies, lenderCounties, lenderOriginators, lenderStates, linkCrmRecord, listAgents, listAlertDigests, listAlertLog, listAlertRecipes, listAlertSubscriptions, listBranches, listCompanies, listCrmActivity, listCrmCallerIds, listCrmCustomFields, listCrmListAssignees, listCrmListFields, listCrmListMemberships, listCrmListShareableMembers, listCrmLists, listCrmMeetings, listCrmMembers, listCrmOrgMembers, listCrmRecordShareableMembers, listCrmRecordShares, listCrmReferencedActivity, listCrmTasks, listCrmTemplates, listCrmWorkspaceMeetings, listCrmWorkspaceTasks, listEnrichments, listLenders, listLoans, listMarket, listMyAlertRecipes, listOffices, listOriginators, listProperties, listSales, listSavedFilters, listWatchedAgents, listWatchedAreas, listWatchedDocuments, loanRelated, loansAnalyticsChart, loansAnalyticsSummary, loansAnalyticsTimeSeries, logCrmActivity, lookupCompanies, markAlertDigestRead, markAlertRead, markAllAlertsRead, marketAnalyticsChart, marketAnalyticsSummary, marketAnalyticsTimeSeries, marketCommunityLending, marketMovementActivity, marketMovementByState, marketMovementCohortPayoff, marketMovementMostGained, marketMovementMostLost, marketMovementMovers, marketMovementRankings, marketMovementStats, marketMovementTransitions, officeAgents, officeBuilders, officeLenders, officeLoanTypes, officeOriginators, originatorAgents, originatorAnalyticsChart, originatorAnalyticsSummary, originatorAnalyticsTimeSeries, originatorBranches, originatorBrokers, originatorBuilders, originatorCitiesBreakdown, originatorCompanies, originatorCountiesBreakdown, originatorLenders, originatorLoans, originatorMarkets, originatorOffices, originatorProperties, originatorRelated, originatorRetention, originatorStatesBreakdown, originatorTitleCompanies, originatorZipCodes, placeCrmCall, previewAlertEmailTemplate, previewAlertRecipe, previewAlerts, previewMyAlertRecipe, propertiesAnalyticsChart, propertiesAnalyticsSummary, propertyRelated, pushToHubspot, reconcileCrmMeetings, refreshCrmRecordMirror, removeCrmContactMethod, removeCrmListMember, removeWatchedAgent, removeWatchedArea, removeWatchedDocument, requestCrmAccess, requestCrmRecordAccess, resolveProperties, retrieveLocation, revokeCrmListAccess, revokeCrmRecordAccess, saleRelated, salesAnalyticsChart, salesAnalyticsSummary, salesAnalyticsTimeSeries, searchCrmEmailRecipients, searchCrmMatchCandidates, searchCrmMentionRecords, searchCrmRecords, searchProperties, sendCrmEmail, setCrmCallAnalysis, setCrmCustomValue, setCrmOverride, setCrmRecordOwner, setDefaultCrmCallerId, shareCrmTemplate, submitAgentsBulkDelivery, submitBranchesBulkDelivery, submitCompaniesBulkDelivery, submitLoansBulkDelivery, submitOriginatorsBulkDelivery, submitPropertiesBulkDelivery, subscribeAlertRecipe, suggestLocations, suggestOfficeNames, transcribeCrmCall, transferCrmListOwnership, unshareCrmTemplate, unsubscribeAlertRecipe, updateAlertConditions, updateCrmContactMethod, updateCrmList, updateCrmListField, updateCrmMeeting, updateCrmObjectField, updateCrmTask, updateCrmTemplate, updateMe, updateMyAlertRecipe, updateSavedFilter };
5934
+ export { client as _heyApiClient, actionCrmCallerId, addCrmContactMethod, addCrmListMember, addCrmListMembersBulk, addCrmNote, addCrmRecord, addCrmRecordsBulk, addWatchedAgent, addWatchedArea, addWatchedDocument, agentAnalyticsChart, agentAnalyticsSummary, agentAnalyticsTimeSeries, agentBuilders, agentCities, agentCompanies, agentCounties, agentLenders, agentLoanMix, agentMarkets, agentMortgagedTimeSeries, agentOffices, agentOriginators, agentProperties, agentRelated, agentSales, agentStates, agentTitleCompanies, agentTitleCompaniesTimeSeries, agentZipCodes, analyzeCrmCall, applyCrmEnrichment, applyCrmListMiUpdates, applyCrmListTemplate, applyCrmMiUpdates, branchAnalyticsChart, branchAnalyticsSummary, branchAnalyticsTimeSeries, branchCities, branchCounties, branchLenders, branchLoans, branchOriginators, branchRoster, branchStates, branchTitleCompanies, cancelAgentsBulkDeliveryJob, cancelBranchesBulkDeliveryJob, cancelCompaniesBulkDeliveryJob, cancelEnrichBulkJob, cancelLoansBulkDeliveryJob, cancelOriginatorsBulkDeliveryJob, cancelPropertiesBulkDeliveryJob, companyAgents, companyAnalyticsChart, companyAnalyticsSummary, companyAnalyticsTimeSeries, companyBranches, companyBrokers, companyCities, companyCounties, companyDepartureStatus, companyEarlyExits, companyEmployeeStats, companyEmployment, companyHeadcount, companyLenders, companyMarkets, companyMoverProduction, companyOffices, companyOriginators, companyRelated, companySponsoredIndividuals, companySponsorshipMovement, companyStates, companyTalentFlow, companyTitleCompanies, companyZipCodes, countAgents, countBranches, countCompanies, countLenders, countLoans, countOffices, countOriginators, countProperties, countSales, createAgentContactSubmission, createAlertSubscription, createClient, createCrmList, createCrmListField, createCrmManualRecord, createCrmMeeting, createCrmObjectField, createCrmRecord, createCrmTask, createCrmTemplate, createMyAlertRecipe, createOriginatorContactSubmission, createSavedFilter, crmLenderChannels, crmLoLoanMix, crmLoMomentum, crmLoSponsorLocation, crmSimilarOriginators, declineCrmMiUpdate, deleteAlertSubscription, deleteCrmCallerId, deleteCrmList, deleteCrmListField, deleteCrmMeeting, deleteCrmNote, deleteCrmObjectField, deleteCrmRecord, deleteCrmRecords, deleteCrmTask, deleteCrmTemplate, deleteMyAlertRecipe, deleteSavedFilter, describeCrmRecordsOnAdd, dismissCrmListMiUpdates, dismissCrmMiUpdates, editCrmLoggedActivity, editCrmNote, enrichPropertiesBatch, enrichPropertiesBulk, enrichProperty, filterCrmListMembers, findCrmRecordByNmls, generateCrmRecordDescription, getAgent, getAgentsBulkDeliveryJob, getAlertConditions, getAlertEmailTokens, getAlertUnreadCount, getBranch, getBranchesBulkDeliveryJob, getCompaniesBulkDeliveryJob, getCompany, getCrmActiveCall, getCrmActivityReport, getCrmCall, getCrmCallTranscript, getCrmCustomValues, getCrmImportJob, getCrmList, getCrmListMemberIds, getCrmListMiUpdates, getCrmListShares, getCrmMiUpdates, getCrmOutcomesReport, getCrmOverrides, getCrmProductionEnrichJob, getCrmRecordAccess, getCrmRecordAccessRequest, getCrmRecordConnections, getCrmRecordMemberIds, getCrmRecordProfile, getCrmTemplate, getCrmTemplateShares, getEnrichBulkJob, getHubspotPushStatus, getLender, getLoan, getLoansBulkDeliveryJob, getMe, getMeCredits, getMePlan, getOffice, getOriginator, getOriginatorsBulkDeliveryJob, getPropertiesBulkDeliveryJob, getProperty, getRealtimeConfig, getSale, getSavedFilter, getSearchToken, grantCrmListAccess, grantCrmRecordAccess, grantCrmRecordAccessRequest, hangupCrmCall, importCrmRecords, instantSearch, lenderCities, lenderCompanies, lenderCounties, lenderOriginators, lenderStates, linkCrmRecord, listAgentOfficeGroups, listAgents, listAlertDigests, listAlertLog, listAlertRecipes, listAlertSubscriptions, listBranches, listCompanies, listCrmActivity, listCrmCallerIds, listCrmCustomFields, listCrmListAssignees, listCrmListFields, listCrmListMemberships, listCrmListShareableMembers, listCrmLists, listCrmMeetings, listCrmMembers, listCrmOrgMembers, listCrmRecordShareableMembers, listCrmRecordShares, listCrmReferencedActivity, listCrmTasks, listCrmTemplates, listCrmWorkspaceMeetings, listCrmWorkspaceTasks, listEnrichments, listLenders, listLoans, listMarket, listMyAlertRecipes, listOffices, listOriginators, listProperties, listSales, listSavedFilters, listWatchedAgents, listWatchedAreas, listWatchedDocuments, loanRelated, loansAnalyticsChart, loansAnalyticsSummary, loansAnalyticsTimeSeries, logCrmActivity, lookupCompanies, markAlertDigestRead, markAlertRead, markAllAlertsRead, marketAnalyticsChart, marketAnalyticsSummary, marketAnalyticsTimeSeries, marketCommunityLending, marketMovementActivity, marketMovementByState, marketMovementCohortPayoff, marketMovementMostGained, marketMovementMostLost, marketMovementMovers, marketMovementRankings, marketMovementStats, marketMovementTransitions, officeAgents, officeBuilders, officeLenders, officeLoanTypes, officeOriginators, originatorAgents, originatorAnalyticsChart, originatorAnalyticsSummary, originatorAnalyticsTimeSeries, originatorBranches, originatorBrokers, originatorBuilders, originatorCitiesBreakdown, originatorCompanies, originatorCountiesBreakdown, originatorLenders, originatorLoans, originatorMarkets, originatorOffices, originatorProperties, originatorRelated, originatorRetention, originatorStatesBreakdown, originatorTitleCompanies, originatorZipCodes, placeCrmCall, previewAlertEmailTemplate, previewAlertRecipe, previewAlerts, previewMyAlertRecipe, propertiesAnalyticsChart, propertiesAnalyticsSummary, propertyRelated, pushToHubspot, reconcileCrmMeetings, refreshCrmRecordMirror, removeCrmContactMethod, removeCrmListMember, removeWatchedAgent, removeWatchedArea, removeWatchedDocument, requestCrmAccess, requestCrmRecordAccess, resolveProperties, retrieveLocation, revokeCrmListAccess, revokeCrmRecordAccess, saleRelated, salesAnalyticsChart, salesAnalyticsSummary, salesAnalyticsTimeSeries, searchCrmEmailRecipients, searchCrmMatchCandidates, searchCrmMentionRecords, searchCrmRecords, searchProperties, sendCrmEmail, setCrmCallAnalysis, setCrmCustomValue, setCrmOverride, setCrmRecordOwner, setDefaultCrmCallerId, shareCrmTemplate, submitAgentsBulkDelivery, submitBranchesBulkDelivery, submitCompaniesBulkDelivery, submitLoansBulkDelivery, submitOriginatorsBulkDelivery, submitPropertiesBulkDelivery, subscribeAlertRecipe, suggestLocations, suggestOfficeNames, transcribeCrmCall, transferCrmListOwnership, unshareCrmTemplate, unsubscribeAlertRecipe, updateAlertConditions, updateCrmContactMethod, updateCrmList, updateCrmListField, updateCrmMeeting, updateCrmObjectField, updateCrmTask, updateCrmTemplate, updateMe, updateMyAlertRecipe, updateSavedFilter };
@@ -812,6 +812,24 @@ var Agents = class {
812
812
  });
813
813
  }
814
814
  /**
815
+ * List agent office groups
816
+ *
817
+ * The brokerage brand groups this workspace may pass as `officeGroups` / `excludeOfficeGroups` on `listAgents`. Entitlement-gated: a workspace without the entitlement gets an empty list.
818
+ */
819
+ static listAgentOfficeGroups(options) {
820
+ return (options?.client ?? client).get({
821
+ security: [{
822
+ name: "x-api-key",
823
+ type: "apiKey"
824
+ }, {
825
+ scheme: "bearer",
826
+ type: "http"
827
+ }],
828
+ url: "/v1/agents/office-groups",
829
+ ...options
830
+ });
831
+ }
832
+ /**
815
833
  * Get agent by ID
816
834
  */
817
835
  static get(options) {
@@ -6344,7 +6362,7 @@ var Originators = class {
6344
6362
  /**
6345
6363
  * Real-estate agents this LO co-closed with
6346
6364
  *
6347
- * Ranks the real-estate agents on this LO's loans, by volume — the buyer's agent by default, the listing and co-listing agents with `side: "listing"`. Each loan is credited to the agent its MLS agent keys resolve to (a key naming several different people credits only the confirmed one), so `units` counts distinct loans per agent. `id` is that agent's id (pass it to `GET /v1/agents/{id}`); absent when the loan's key matches no agent profile, in which case `label` is the name the MLS recorded. Names that are an MLS placeholder for "no agent recorded" (`non member`, `non listed agent`, and ~140 board-specific spellings) are excluded — they are not people. Percentages are shares of the LO's whole loan population, so they do not sum to 100 across the page.
6365
+ * Ranks the real-estate agents on this LO's loans, by volume — the buyer's agent by default, the listing and co-listing agents with `side: "listing"`. Each loan is credited to the agent its MLS agent keys resolve to (a key naming several different people credits only the confirmed one), so `units` counts distinct loans per agent. `id` is that agent's id (pass it to `GET /v1/agents/{id}`) and `office` / `contact` its brokerage and email / direct phone; absent when the loan's key matches no agent profile, in which case `label` is the name the MLS recorded. Names that are an MLS placeholder for "no agent recorded" (`non member`, `non listed agent`, and ~140 board-specific spellings) are excluded — they are not people. Percentages are shares of the LO's whole loan population, so they do not sum to 100 across the page.
6348
6366
  */
6349
6367
  static agents(options) {
6350
6368
  return (options.client ?? client).post({
@@ -6678,7 +6696,7 @@ var Properties = class {
6678
6696
  /**
6679
6697
  * Search properties with filters
6680
6698
  *
6681
- * Search and list individual properties/parcels with filters — one row per parcel. Filter by location (state, county, city, zip, address), owner name, property characteristics (beds, baths, square footage, year built, property type), value, and ownership or transaction history, with sorting and cursor pagination. This is the discrete per-property record search: use it to find specific properties or build a filtered property list. (For a single property by its ID use the property detail endpoint.) If you only need how many properties match and not the records themselves, send the same request body to `countProperties`.
6699
+ * Search and list individual properties/parcels with filters — one row per parcel. Filter by location (state, county, city, zip, address), owner name, property characteristics (beds, baths, square footage, year built, property type), value, ownership or transaction history, and occupancy (`ownerOccupancy: not_flagged` plus `absenteeOwner: true` targets likely investor / non-owner-occupied parcels — pair `absenteeOwner` with a geography filter), with sorting and cursor pagination. This is the discrete per-property record search: use it to find specific properties or build a filtered property list. (For a single property by its ID use the property detail endpoint.) If you only need how many properties match and not the records themselves, send the same request body to `countProperties`.
6682
6700
  */
6683
6701
  static list(options) {
6684
6702
  return (options?.client ?? client).post({
package/openapi.json CHANGED
@@ -585,6 +585,22 @@
585
585
  "crmList": {
586
586
  "$ref": "#/components/schemas/AgentCrmListFilter"
587
587
  },
588
+ "excludeOfficeGroups": {
589
+ "description": "Drop these brand groups (same gate).",
590
+ "items": {
591
+ "enum": [
592
+ "compass_legacy",
593
+ "anywhere",
594
+ "franchise",
595
+ "others"
596
+ ],
597
+ "type": "string"
598
+ },
599
+ "maxItems": 4,
600
+ "minItems": 1,
601
+ "type": "array",
602
+ "x-mm-entitlement": "rocket-filter"
603
+ },
588
604
  "filters": {
589
605
  "$ref": "#/components/schemas/FilterNode"
590
606
  },
@@ -1053,6 +1069,22 @@
1053
1069
  "near": {
1054
1070
  "$ref": "#/components/schemas/AgentNearFilter"
1055
1071
  },
1072
+ "officeGroups": {
1073
+ "description": "Current office in any of these brand groups. Needs the `rocket-filter` entitlement (else 403).",
1074
+ "items": {
1075
+ "enum": [
1076
+ "compass_legacy",
1077
+ "anywhere",
1078
+ "franchise",
1079
+ "others"
1080
+ ],
1081
+ "type": "string"
1082
+ },
1083
+ "maxItems": 4,
1084
+ "minItems": 1,
1085
+ "type": "array",
1086
+ "x-mm-entitlement": "rocket-filter"
1087
+ },
1056
1088
  "pagination": {
1057
1089
  "$ref": "#/components/schemas/Pagination"
1058
1090
  },
@@ -2633,6 +2665,52 @@
2633
2665
  "minItems": 1,
2634
2666
  "type": "array"
2635
2667
  },
2668
+ "AgentOfficeGroup": {
2669
+ "properties": {
2670
+ "entries": {
2671
+ "items": {
2672
+ "$ref": "#/components/schemas/AgentOfficeGroupEntry"
2673
+ },
2674
+ "type": "array"
2675
+ },
2676
+ "key": {
2677
+ "type": "string"
2678
+ },
2679
+ "label": {
2680
+ "type": "string"
2681
+ }
2682
+ },
2683
+ "required": [
2684
+ "key",
2685
+ "label",
2686
+ "entries"
2687
+ ],
2688
+ "type": "object"
2689
+ },
2690
+ "AgentOfficeGroupEntry": {
2691
+ "properties": {
2692
+ "displayName": {
2693
+ "type": "string"
2694
+ },
2695
+ "matchType": {
2696
+ "enum": [
2697
+ "contains",
2698
+ "prefix",
2699
+ "all_words"
2700
+ ],
2701
+ "type": "string"
2702
+ },
2703
+ "name": {
2704
+ "type": "string"
2705
+ }
2706
+ },
2707
+ "required": [
2708
+ "name",
2709
+ "displayName",
2710
+ "matchType"
2711
+ ],
2712
+ "type": "object"
2713
+ },
2636
2714
  "AgentProductMixEntry": {
2637
2715
  "additionalProperties": false,
2638
2716
  "properties": {
@@ -10171,6 +10249,25 @@
10171
10249
  ],
10172
10250
  "type": "object"
10173
10251
  },
10252
+ "contact": {
10253
+ "description": "`originatorAgents` only: the agent's email and direct phone — the same `email` / `phone` `GET /v1/agents/{id}` and the agents list report. Each leaf is `null` when the agent's record has none; `null` when the agent `id` matches no record. Absent on rows without an agent `id` and on every other breakdown.",
10254
+ "nullable": true,
10255
+ "properties": {
10256
+ "email": {
10257
+ "nullable": true,
10258
+ "type": "string"
10259
+ },
10260
+ "phone": {
10261
+ "nullable": true,
10262
+ "type": "string"
10263
+ }
10264
+ },
10265
+ "required": [
10266
+ "email",
10267
+ "phone"
10268
+ ],
10269
+ "type": "object"
10270
+ },
10174
10271
  "excluded": {
10175
10272
  "description": "How many of this bucket's documents the volume guard excluded — documents that carry the money field but whose value is an out-of-range fill. Compare against `units` to see what share of the bucket `volume` was actually computed over: a bucket can show many units and still sum a small fraction of them. Absent when the entity's money column is unguarded (the sales-backed agent breakdowns), where nothing can be excluded.",
10176
10273
  "type": "number"
@@ -26247,6 +26344,11 @@
26247
26344
  "nullable": true,
26248
26345
  "type": "string"
26249
26346
  },
26347
+ "coListAgentEmail": {
26348
+ "description": "Co-listing agent email, same rule.",
26349
+ "nullable": true,
26350
+ "type": "string"
26351
+ },
26250
26352
  "coListAgentId": {
26251
26353
  "description": "Co-listing agent id, same rule.",
26252
26354
  "nullable": true,
@@ -26257,6 +26359,11 @@
26257
26359
  "nullable": true,
26258
26360
  "type": "string"
26259
26361
  },
26362
+ "coListAgentPhone": {
26363
+ "description": "Co-listing agent direct phone, same rule.",
26364
+ "nullable": true,
26365
+ "type": "string"
26366
+ },
26260
26367
  "companyName": {
26261
26368
  "nullable": true,
26262
26369
  "type": "string"
@@ -26315,6 +26422,11 @@
26315
26422
  "nullable": true,
26316
26423
  "type": "string"
26317
26424
  },
26425
+ "listAgentEmail": {
26426
+ "description": "Listing agent email, same rule.",
26427
+ "nullable": true,
26428
+ "type": "string"
26429
+ },
26318
26430
  "listAgentId": {
26319
26431
  "description": "Listing agent id, same rule.",
26320
26432
  "nullable": true,
@@ -26325,6 +26437,11 @@
26325
26437
  "nullable": true,
26326
26438
  "type": "string"
26327
26439
  },
26440
+ "listAgentPhone": {
26441
+ "description": "Listing agent direct phone, same rule.",
26442
+ "nullable": true,
26443
+ "type": "string"
26444
+ },
26328
26445
  "listPrice": {
26329
26446
  "nullable": true,
26330
26447
  "type": "number"
@@ -26391,6 +26508,11 @@
26391
26508
  "nullable": true,
26392
26509
  "type": "string"
26393
26510
  },
26511
+ "soldAgentEmail": {
26512
+ "description": "Buyer's agent email — the agent record's `email` (`GET /v1/agents/{id}`); null when `soldAgentId` is.",
26513
+ "nullable": true,
26514
+ "type": "string"
26515
+ },
26394
26516
  "soldAgentId": {
26395
26517
  "description": "Buyer's agent id (`GET /v1/agents/{id}`) when the MLS keys resolve to one agent.",
26396
26518
  "nullable": true,
@@ -26401,6 +26523,11 @@
26401
26523
  "nullable": true,
26402
26524
  "type": "string"
26403
26525
  },
26526
+ "soldAgentPhone": {
26527
+ "description": "Buyer's agent direct phone — the agent record's `phone`; null when `soldAgentId` is.",
26528
+ "nullable": true,
26529
+ "type": "string"
26530
+ },
26404
26531
  "state": {
26405
26532
  "nullable": true,
26406
26533
  "type": "string"
@@ -36519,6 +36646,16 @@
36519
36646
  "PropertyAnalyticsFlatFilters": {
36520
36647
  "additionalProperties": false,
36521
36648
  "properties": {
36649
+ "absenteeOwner": {
36650
+ "allOf": [
36651
+ {
36652
+ "$ref": "#/components/schemas/BooleanFilterValue"
36653
+ },
36654
+ {
36655
+ "description": "Owner's mailing address (street + 5-digit zip, case/punctuation-insensitive) differs from the property's site address — an investor / non-owner-occupied signal. `true` = absentee, `false` = owner mails to the property; parcels with no mailing or site address match neither. Evaluated per candidate document (no stored flag yet), so always pair it with a geography filter (`state`, `county`, `zipCode`, `fips`, a radius) — an unscoped `absenteeOwner` over all parcels may time out."
36656
+ }
36657
+ ]
36658
+ },
36522
36659
  "activeLoanCount": {
36523
36660
  "allOf": [
36524
36661
  {
@@ -36767,6 +36904,9 @@
36767
36904
  "ownerName": {
36768
36905
  "$ref": "#/components/schemas/TextFilterValue"
36769
36906
  },
36907
+ "ownerOccupancy": {
36908
+ "$ref": "#/components/schemas/PropertyOwnerOccupancyFilterValue"
36909
+ },
36770
36910
  "preSaleLoanCount": {
36771
36911
  "allOf": [
36772
36912
  {
@@ -37523,34 +37663,6 @@
37523
37663
  ],
37524
37664
  "type": "object"
37525
37665
  },
37526
- "ownerMailingAddress": {
37527
- "nullable": true,
37528
- "properties": {
37529
- "city": {
37530
- "nullable": true,
37531
- "type": "string"
37532
- },
37533
- "state": {
37534
- "nullable": true,
37535
- "type": "string"
37536
- },
37537
- "street": {
37538
- "nullable": true,
37539
- "type": "string"
37540
- },
37541
- "zip": {
37542
- "nullable": true,
37543
- "type": "string"
37544
- }
37545
- },
37546
- "required": [
37547
- "street",
37548
- "city",
37549
- "state",
37550
- "zip"
37551
- ],
37552
- "type": "object"
37553
- },
37554
37666
  "owners": {
37555
37667
  "description": "Every owner of record — `owners[0]` is the same person the flat `ownerName`/`ownerFirstName`/`ownerLastName` fields describe, and the rest are co-owners/co-borrowers. Additive: those three fields are unchanged. `null` (never `[]`) when the parcel has no readable owner.",
37556
37668
  "items": {
@@ -37728,6 +37840,16 @@
37728
37840
  "PropertyFlatFilters": {
37729
37841
  "additionalProperties": false,
37730
37842
  "properties": {
37843
+ "absenteeOwner": {
37844
+ "allOf": [
37845
+ {
37846
+ "$ref": "#/components/schemas/BooleanFilterValue"
37847
+ },
37848
+ {
37849
+ "description": "Owner's mailing address (street + 5-digit zip, case/punctuation-insensitive) differs from the property's site address — an investor / non-owner-occupied signal. `true` = absentee, `false` = owner mails to the property; parcels with no mailing or site address match neither. Evaluated per candidate document (no stored flag yet), so always pair it with a geography filter (`state`, `county`, `zipCode`, `fips`, a radius) — an unscoped `absenteeOwner` over all parcels may time out."
37850
+ }
37851
+ ]
37852
+ },
37731
37853
  "activeLoanCount": {
37732
37854
  "allOf": [
37733
37855
  {
@@ -38184,6 +38306,9 @@
38184
38306
  "ownerName": {
38185
38307
  "$ref": "#/components/schemas/TextFilterValue"
38186
38308
  },
38309
+ "ownerOccupancy": {
38310
+ "$ref": "#/components/schemas/PropertyOwnerOccupancyFilterValue"
38311
+ },
38187
38312
  "ownerType": {
38188
38313
  "anyOf": [
38189
38314
  {
@@ -39014,6 +39139,48 @@
39014
39139
  ],
39015
39140
  "type": "object"
39016
39141
  },
39142
+ "PropertyOwnerOccupancyFilterValue": {
39143
+ "anyOf": [
39144
+ {
39145
+ "description": "One of (case-insensitive): owner_occupied, probable_owner_occupied, not_flagged",
39146
+ "enum": [
39147
+ "owner_occupied",
39148
+ "probable_owner_occupied",
39149
+ "not_flagged"
39150
+ ],
39151
+ "type": "string"
39152
+ },
39153
+ {
39154
+ "description": "Match any of these values",
39155
+ "items": {
39156
+ "description": "One of (case-insensitive): owner_occupied, probable_owner_occupied, not_flagged",
39157
+ "enum": [
39158
+ "owner_occupied",
39159
+ "probable_owner_occupied",
39160
+ "not_flagged"
39161
+ ],
39162
+ "type": "string"
39163
+ },
39164
+ "type": "array"
39165
+ },
39166
+ {
39167
+ "description": "Fuzzy text match",
39168
+ "properties": {
39169
+ "match": {
39170
+ "type": "string"
39171
+ }
39172
+ },
39173
+ "required": [
39174
+ "match"
39175
+ ],
39176
+ "type": "object"
39177
+ },
39178
+ {
39179
+ "nullable": true
39180
+ }
39181
+ ],
39182
+ "description": "Assessor owner-occupancy flag, bucketed: `\"owner_occupied\"`, `\"probable_owner_occupied\"`, or `\"not_flagged\"` (the assessor did not flag the parcel — where non-owner-occupied/investor parcels land). Accepts one value or an array (any-of). For investor targeting use `{ownerOccupancy: \"not_flagged\", absenteeOwner: true}`, optionally with `ownerType: \"entity\"`."
39183
+ },
39017
39184
  "PropertyParties": {
39018
39185
  "description": "Mortgage parties attributed to the parcel, split by scope: `alltime` (everyone on record, a strict superset of the rest), `active` (parties on loans still outstanding), `matched` (the subset whose loan resolved to a known NMLS entity) and `last` (the most recent loan). Real estate agents are not part of this block — reach parcels from an agent through `POST /v1/agents/{id}/properties`.",
39019
39186
  "properties": {
@@ -39387,6 +39554,11 @@
39387
39554
  },
39388
39555
  "PropertySummary": {
39389
39556
  "properties": {
39557
+ "absenteeOwner": {
39558
+ "description": "`true` when the owner's mailing address (street + 5-digit zip, case/punctuation-insensitive) differs from the property's site address — a non-owner-occupied/investor signal; `false` when the owner mails to the property; `null` when either address is missing. Filterable.",
39559
+ "nullable": true,
39560
+ "type": "boolean"
39561
+ },
39390
39562
  "activeLoanCount": {
39391
39563
  "description": "Mortgages believed to still be outstanding. IMPORTANT: `0` does not always mean the parcel is paid off — on a recently-sold parcel it usually means the buyer's new mortgage has not reached the public record yet, so the honest reading is UNKNOWN. Check `activeLoanCountKnown` before treating a `0` as fact, and do not infer 100% `equity` from it.",
39392
39564
  "nullable": true,
@@ -39516,6 +39688,35 @@
39516
39688
  "nullable": true,
39517
39689
  "type": "string"
39518
39690
  },
39691
+ "ownerMailingAddress": {
39692
+ "description": "Primary owner's mailing address, `null` when none is recorded.",
39693
+ "nullable": true,
39694
+ "properties": {
39695
+ "city": {
39696
+ "nullable": true,
39697
+ "type": "string"
39698
+ },
39699
+ "state": {
39700
+ "nullable": true,
39701
+ "type": "string"
39702
+ },
39703
+ "street": {
39704
+ "nullable": true,
39705
+ "type": "string"
39706
+ },
39707
+ "zip": {
39708
+ "nullable": true,
39709
+ "type": "string"
39710
+ }
39711
+ },
39712
+ "required": [
39713
+ "street",
39714
+ "city",
39715
+ "state",
39716
+ "zip"
39717
+ ],
39718
+ "type": "object"
39719
+ },
39519
39720
  "ownerMiddleName": {
39520
39721
  "nullable": true,
39521
39722
  "type": "string"
@@ -39524,8 +39725,17 @@
39524
39725
  "nullable": true,
39525
39726
  "type": "string"
39526
39727
  },
39728
+ "ownerOccupancy": {
39729
+ "description": "Assessor owner-occupancy flag, bucketed: `owner_occupied` (owner-occupied, incl. the vendor's phased-out non-residential code), `probable_owner_occupied`, or `not_flagged` (the assessor did not flag the parcel — not proof of an investor, but where non-owner-occupied/investor parcels land; pair with `absenteeOwner`). Filterable.",
39730
+ "enum": [
39731
+ "owner_occupied",
39732
+ "probable_owner_occupied",
39733
+ "not_flagged"
39734
+ ],
39735
+ "type": "string"
39736
+ },
39527
39737
  "ownerOccupied": {
39528
- "description": "`true` if recorded owner-occupied; `null` = unknown.",
39738
+ "description": "`true` only on the assessor's confident owner-occupied code (`\"Y\"`); `null` = not flagged / unknown, never `false`. Kept for compatibility — prefer `ownerOccupancy`.",
39529
39739
  "nullable": true,
39530
39740
  "type": "boolean"
39531
39741
  },
@@ -42114,7 +42324,7 @@
42114
42324
  "info": {
42115
42325
  "description": "ModelMatch API — mortgage and real-estate market data.\n\n## Bulk delivery limits\n\nThe `POST /{entity}/bulk-delivery` endpoints export a full result set to\nS3 as NDJSON, JSON, CSV, or Parquet.\n\n- **Up to 5,000 rows per delivery: no entitlement required.** Available to\n every authenticated caller.\n- **Above 5,000 rows: requires the entity's `bulk-delivery.{entity}`\n entitlement** (e.g. `bulk-delivery.loans`). The grant's scope sets your\n row ceiling and may also restrict which rows and fields you receive.\n\nA delivery that would exceed the limit available to you is rejected with\n`403 entitlement_missing`, reporting the matched row count and the ceiling\nthat applied. To stay under the limit, pass `limit` — the job then delivers\n(and bills for) only the first `limit` rows of a broader query.\n\n**Need a higher limit?** Email support@modelmatch.com to request the\nentitlement. Limits are raised per organization and per entity.\n\nBulk delivery is billed at 1 credit per delivered row whether or not\nan entitlement is held.\n\nInstead of a download, a delivery can be sent to a push target configured\non your workspace: pass `destination: { type: \"push-target\", targetId }`.\nThe same limits and billing apply.",
42116
42326
  "title": "ModelMatch API",
42117
- "version": "3.103.1"
42327
+ "version": "3.107.0"
42118
42328
  },
42119
42329
  "openapi": "3.1.0",
42120
42330
  "paths": {
@@ -42988,6 +43198,110 @@
42988
43198
  "x-mm-records-via": "listAgents"
42989
43199
  }
42990
43200
  },
43201
+ "/v1/agents/office-groups": {
43202
+ "get": {
43203
+ "description": "The brokerage brand groups this workspace may pass as `officeGroups` / `excludeOfficeGroups` on `listAgents`. Entitlement-gated: a workspace without the entitlement gets an empty list.",
43204
+ "operationId": "listAgentOfficeGroups",
43205
+ "responses": {
43206
+ "200": {
43207
+ "content": {
43208
+ "application/json": {
43209
+ "schema": {
43210
+ "properties": {
43211
+ "data": {
43212
+ "items": {
43213
+ "$ref": "#/components/schemas/AgentOfficeGroup"
43214
+ },
43215
+ "type": "array"
43216
+ }
43217
+ },
43218
+ "required": [
43219
+ "data"
43220
+ ],
43221
+ "type": "object"
43222
+ }
43223
+ }
43224
+ },
43225
+ "description": "Office groups the workspace is entitled to"
43226
+ },
43227
+ "400": {
43228
+ "content": {
43229
+ "application/json": {
43230
+ "schema": {
43231
+ "$ref": "#/components/schemas/ErrorResponse"
43232
+ }
43233
+ }
43234
+ },
43235
+ "description": "Validation error"
43236
+ },
43237
+ "401": {
43238
+ "content": {
43239
+ "application/json": {
43240
+ "schema": {
43241
+ "$ref": "#/components/schemas/ErrorResponse"
43242
+ }
43243
+ }
43244
+ },
43245
+ "description": "Unauthorized"
43246
+ },
43247
+ "403": {
43248
+ "content": {
43249
+ "application/json": {
43250
+ "schema": {
43251
+ "$ref": "#/components/schemas/ErrorResponse"
43252
+ }
43253
+ }
43254
+ },
43255
+ "description": "Forbidden (authenticated, but missing required context — e.g. no active organization)"
43256
+ },
43257
+ "404": {
43258
+ "content": {
43259
+ "application/json": {
43260
+ "schema": {
43261
+ "$ref": "#/components/schemas/ErrorResponse"
43262
+ }
43263
+ }
43264
+ },
43265
+ "description": "Not found"
43266
+ },
43267
+ "413": {
43268
+ "content": {
43269
+ "application/json": {
43270
+ "schema": {
43271
+ "$ref": "#/components/schemas/PayloadTooLarge"
43272
+ }
43273
+ }
43274
+ },
43275
+ "description": "Response payload too large — detail endpoint capped to fit Lambda response limits"
43276
+ },
43277
+ "502": {
43278
+ "content": {
43279
+ "application/json": {
43280
+ "schema": {
43281
+ "$ref": "#/components/schemas/ErrorResponse"
43282
+ }
43283
+ }
43284
+ },
43285
+ "description": "Entitlements could not be resolved"
43286
+ },
43287
+ "503": {
43288
+ "content": {
43289
+ "application/json": {
43290
+ "schema": {
43291
+ "$ref": "#/components/schemas/SearchUnavailable"
43292
+ }
43293
+ }
43294
+ },
43295
+ "description": "Search timed out or the cluster is overloaded — retry after `Retry-After` seconds."
43296
+ }
43297
+ },
43298
+ "summary": "List agent office groups",
43299
+ "tags": [
43300
+ "Agents"
43301
+ ],
43302
+ "x-mm-entitlement": "rocket-filter"
43303
+ }
43304
+ },
42991
43305
  "/v1/agents/{id}": {
42992
43306
  "get": {
42993
43307
  "operationId": "getAgent",
@@ -73154,7 +73468,7 @@
73154
73468
  },
73155
73469
  "/v1/originators/{nmlsId}/breakdowns/agents": {
73156
73470
  "post": {
73157
- "description": "Ranks the real-estate agents on this LO's loans, by volume — the buyer's agent by default, the listing and co-listing agents with `side: \"listing\"`. Each loan is credited to the agent its MLS agent keys resolve to (a key naming several different people credits only the confirmed one), so `units` counts distinct loans per agent. `id` is that agent's id (pass it to `GET /v1/agents/{id}`); absent when the loan's key matches no agent profile, in which case `label` is the name the MLS recorded. Names that are an MLS placeholder for \"no agent recorded\" (`non member`, `non listed agent`, and ~140 board-specific spellings) are excluded — they are not people. Percentages are shares of the LO's whole loan population, so they do not sum to 100 across the page.",
73471
+ "description": "Ranks the real-estate agents on this LO's loans, by volume — the buyer's agent by default, the listing and co-listing agents with `side: \"listing\"`. Each loan is credited to the agent its MLS agent keys resolve to (a key naming several different people credits only the confirmed one), so `units` counts distinct loans per agent. `id` is that agent's id (pass it to `GET /v1/agents/{id}`) and `office` / `contact` its brokerage and email / direct phone; absent when the loan's key matches no agent profile, in which case `label` is the name the MLS recorded. Names that are an MLS placeholder for \"no agent recorded\" (`non member`, `non listed agent`, and ~140 board-specific spellings) are excluded — they are not people. Percentages are shares of the LO's whole loan population, so they do not sum to 100 across the page.",
73158
73472
  "operationId": "originatorAgents",
73159
73473
  "parameters": [
73160
73474
  {
@@ -74792,7 +75106,7 @@
74792
75106
  },
74793
75107
  "/v1/properties": {
74794
75108
  "post": {
74795
- "description": "Search and list individual properties/parcels with filters — one row per parcel. Filter by location (state, county, city, zip, address), owner name, property characteristics (beds, baths, square footage, year built, property type), value, and ownership or transaction history, with sorting and cursor pagination. This is the discrete per-property record search: use it to find specific properties or build a filtered property list. (For a single property by its ID use the property detail endpoint.) If you only need how many properties match and not the records themselves, send the same request body to `countProperties`.",
75109
+ "description": "Search and list individual properties/parcels with filters — one row per parcel. Filter by location (state, county, city, zip, address), owner name, property characteristics (beds, baths, square footage, year built, property type), value, ownership or transaction history, and occupancy (`ownerOccupancy: not_flagged` plus `absenteeOwner: true` targets likely investor / non-owner-occupied parcels — pair `absenteeOwner` with a geography filter), with sorting and cursor pagination. This is the discrete per-property record search: use it to find specific properties or build a filtered property list. (For a single property by its ID use the property detail endpoint.) If you only need how many properties match and not the records themselves, send the same request body to `countProperties`.",
74796
75110
  "operationId": "listProperties",
74797
75111
  "requestBody": {
74798
75112
  "content": {