@model-match/api 3.26.0 → 3.28.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.
package/openapi.json CHANGED
@@ -5562,7 +5562,7 @@
5562
5562
  "type": "object"
5563
5563
  },
5564
5564
  "AgentLocationSource": {
5565
- "description": "Which location signal `city`/`state`/`zip`/`county` match. `any` (default) = an office OR a market they transacted in; `office` = their CURRENT office only (a `county` filter is a 400 — offices carry no county); `production` = transaction markets only.",
5565
+ "description": "Which location signal `city`/`state`/`zip`/`county` match. `any` (default) = an office OR a market they transacted in; `office` = their CURRENT office (a bare `state` also matches the state on their member record; a `county` filter is a 400 — offices carry no county); `production` = transaction markets only.",
5566
5566
  "enum": [
5567
5567
  "any",
5568
5568
  "office",
@@ -5994,6 +5994,313 @@
5994
5994
  ],
5995
5995
  "type": "object"
5996
5996
  },
5997
+ "AgentMortgagedTimeSeriesRequest": {
5998
+ "additionalProperties": false,
5999
+ "properties": {
6000
+ "advancedFilters": {
6001
+ "$ref": "#/components/schemas/FilterNode"
6002
+ },
6003
+ "filters": {
6004
+ "$ref": "#/components/schemas/FilterNode"
6005
+ },
6006
+ "flatFilters": {
6007
+ "additionalProperties": false,
6008
+ "properties": {
6009
+ "borrowerStatus": {
6010
+ "$ref": "#/components/schemas/LoanBorrowerStatusFilterValue"
6011
+ },
6012
+ "broker": {
6013
+ "allOf": [
6014
+ {
6015
+ "$ref": "#/components/schemas/TextFilterValue"
6016
+ },
6017
+ {
6018
+ "description": "Broker shop NMLS id (digits only). A broker is a company — resolve a broker name to its NMLS id via instantSearch (or listCompanies)."
6019
+ }
6020
+ ]
6021
+ },
6022
+ "buyerEntityType": {
6023
+ "$ref": "#/components/schemas/BooleanFilterValue"
6024
+ },
6025
+ "city": {
6026
+ "$ref": "#/components/schemas/TextFilterValue"
6027
+ },
6028
+ "conforming": {
6029
+ "$ref": "#/components/schemas/BooleanFilterValue"
6030
+ },
6031
+ "county": {
6032
+ "allOf": [
6033
+ {
6034
+ "$ref": "#/components/schemas/TextFilterValue"
6035
+ },
6036
+ {
6037
+ "description": "County name (e.g. \"Broward\") or 5-digit FIPS code. Names resolve to FIPS server-side; include a `state` filter to disambiguate."
6038
+ }
6039
+ ]
6040
+ },
6041
+ "currentBalance": {
6042
+ "allOf": [
6043
+ {
6044
+ "$ref": "#/components/schemas/NumericFilterValue"
6045
+ },
6046
+ {
6047
+ "description": "Estimated remaining principal balance (~19% populated). Approximate current equity as `homeValue` (AVM) minus this."
6048
+ }
6049
+ ]
6050
+ },
6051
+ "employer": {
6052
+ "allOf": [
6053
+ {
6054
+ "$ref": "#/components/schemas/TextFilterValue"
6055
+ },
6056
+ {
6057
+ "description": "Employer/company NMLS id (digits only). Resolve a company name to its NMLS id via instantSearch."
6058
+ }
6059
+ ]
6060
+ },
6061
+ "equity": {
6062
+ "allOf": [
6063
+ {
6064
+ "$ref": "#/components/schemas/NumericFilterValue"
6065
+ },
6066
+ {
6067
+ "description": "Point-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."
6068
+ }
6069
+ ]
6070
+ },
6071
+ "excludeBroker": {
6072
+ "allOf": [
6073
+ {
6074
+ "$ref": "#/components/schemas/TextFilterValue"
6075
+ },
6076
+ {
6077
+ "description": "Exclude loans brokered by this broker-shop NMLS id (digits only) — the inverse of `broker`."
6078
+ }
6079
+ ]
6080
+ },
6081
+ "excludeCity": {
6082
+ "allOf": [
6083
+ {
6084
+ "$ref": "#/components/schemas/TextFilterValue"
6085
+ },
6086
+ {
6087
+ "description": "Exclude loans in this city — the inverse of `city`."
6088
+ }
6089
+ ]
6090
+ },
6091
+ "excludeLender": {
6092
+ "allOf": [
6093
+ {
6094
+ "$ref": "#/components/schemas/TextFilterValue"
6095
+ },
6096
+ {
6097
+ "description": "Exclude 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."
6098
+ }
6099
+ ]
6100
+ },
6101
+ "excludeLoanCompany": {
6102
+ "allOf": [
6103
+ {
6104
+ "$ref": "#/components/schemas/TextFilterValue"
6105
+ },
6106
+ {
6107
+ "description": "Exclude loans funded by this company NMLS id (digits only) — the inverse of `loanCompany`."
6108
+ }
6109
+ ]
6110
+ },
6111
+ "excludeOriginator": {
6112
+ "allOf": [
6113
+ {
6114
+ "$ref": "#/components/schemas/TextFilterValue"
6115
+ },
6116
+ {
6117
+ "description": "Exclude loans with this originator NMLS id (digits only) — the inverse of `originator`. Common for 'everyone but my own shop' lists."
6118
+ }
6119
+ ]
6120
+ },
6121
+ "excludeState": {
6122
+ "allOf": [
6123
+ {
6124
+ "$ref": "#/components/schemas/TextFilterValue"
6125
+ },
6126
+ {
6127
+ "description": "Exclude loans in this state (2-letter code, e.g. \"CA\") — the inverse of `state`. For \"everywhere but this state\" lists."
6128
+ }
6129
+ ]
6130
+ },
6131
+ "excludeZipCode": {
6132
+ "allOf": [
6133
+ {
6134
+ "$ref": "#/components/schemas/TextFilterValue"
6135
+ },
6136
+ {
6137
+ "description": "Exclude loans in this ZIP code — the inverse of `zipCode`."
6138
+ }
6139
+ ]
6140
+ },
6141
+ "fips": {
6142
+ "allOf": [
6143
+ {
6144
+ "$ref": "#/components/schemas/TextFilterValue"
6145
+ },
6146
+ {
6147
+ "description": "Exact 5-digit county FIPS code (no name resolution) — the code-only escape hatch alongside `county`."
6148
+ }
6149
+ ]
6150
+ },
6151
+ "geoPoint": {
6152
+ "$ref": "#/components/schemas/GeoFilterValue"
6153
+ },
6154
+ "homeValue": {
6155
+ "allOf": [
6156
+ {
6157
+ "$ref": "#/components/schemas/NumericFilterValue"
6158
+ },
6159
+ {
6160
+ "description": "AVM (automated valuation) at the linked property (~26%, MLS-linked). Pair with `currentBalance` to approximate current equity."
6161
+ }
6162
+ ]
6163
+ },
6164
+ "includeUnknownOriginator": {
6165
+ "allOf": [
6166
+ {
6167
+ "$ref": "#/components/schemas/BooleanFilterValue"
6168
+ },
6169
+ {
6170
+ "description": "Include 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)."
6171
+ }
6172
+ ]
6173
+ },
6174
+ "interestRate": {
6175
+ "$ref": "#/components/schemas/NumericFilterValue"
6176
+ },
6177
+ "lender": {
6178
+ "allOf": [
6179
+ {
6180
+ "$ref": "#/components/schemas/TextFilterValue"
6181
+ },
6182
+ {
6183
+ "description": "Lender 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`."
6184
+ }
6185
+ ]
6186
+ },
6187
+ "lenderName": {
6188
+ "allOf": [
6189
+ {
6190
+ "$ref": "#/components/schemas/TextFilterValue"
6191
+ },
6192
+ {
6193
+ "description": "Lender 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."
6194
+ }
6195
+ ]
6196
+ },
6197
+ "loanCompany": {
6198
+ "allOf": [
6199
+ {
6200
+ "$ref": "#/components/schemas/TextFilterValue"
6201
+ },
6202
+ {
6203
+ "description": "Funding/loan company NMLS id (digits only). Resolve a company name to its NMLS id via instantSearch."
6204
+ }
6205
+ ]
6206
+ },
6207
+ "loanType": {
6208
+ "$ref": "#/components/schemas/LoanTypeFilterValue"
6209
+ },
6210
+ "ltvAtOrigination": {
6211
+ "allOf": [
6212
+ {
6213
+ "$ref": "#/components/schemas/NumericFilterValue"
6214
+ },
6215
+ {
6216
+ "description": "Loan-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."
6217
+ }
6218
+ ]
6219
+ },
6220
+ "mode": {
6221
+ "enum": [
6222
+ "and",
6223
+ "or"
6224
+ ],
6225
+ "type": "string"
6226
+ },
6227
+ "mortgageAmount": {
6228
+ "$ref": "#/components/schemas/NumericFilterValue"
6229
+ },
6230
+ "mortgageDate": {
6231
+ "$ref": "#/components/schemas/DateFilterValue"
6232
+ },
6233
+ "originator": {
6234
+ "allOf": [
6235
+ {
6236
+ "$ref": "#/components/schemas/TextFilterValue"
6237
+ },
6238
+ {
6239
+ "description": "Loan originator NMLS id (digits only). To search by name use `originatorName`, or resolve a name to its id via instantSearch."
6240
+ }
6241
+ ]
6242
+ },
6243
+ "originatorName": {
6244
+ "allOf": [
6245
+ {
6246
+ "$ref": "#/components/schemas/TextFilterValue"
6247
+ },
6248
+ {
6249
+ "deprecated": true,
6250
+ "description": "DEPRECATED — 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."
6251
+ }
6252
+ ]
6253
+ },
6254
+ "propertyId": {
6255
+ "allOf": [
6256
+ {
6257
+ "$ref": "#/components/schemas/TextFilterValue"
6258
+ },
6259
+ {
6260
+ "description": "Parcel 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.\n\nThis 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.\n\nMulti-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."
6261
+ }
6262
+ ]
6263
+ },
6264
+ "saleDate": {
6265
+ "$ref": "#/components/schemas/DateFilterValue"
6266
+ },
6267
+ "salePrice": {
6268
+ "$ref": "#/components/schemas/NumericFilterValue"
6269
+ },
6270
+ "state": {
6271
+ "$ref": "#/components/schemas/TextFilterValue"
6272
+ },
6273
+ "transactionType": {
6274
+ "$ref": "#/components/schemas/LoanTransactionTypeFilterValue"
6275
+ },
6276
+ "zip": {
6277
+ "allOf": [
6278
+ {
6279
+ "$ref": "#/components/schemas/TextFilterValue"
6280
+ },
6281
+ {
6282
+ "description": "Alias of `zipCode` — same ZIP filter, accepted for cross-entity key parity."
6283
+ }
6284
+ ]
6285
+ },
6286
+ "zipCode": {
6287
+ "$ref": "#/components/schemas/TextFilterValue"
6288
+ }
6289
+ },
6290
+ "type": "object"
6291
+ },
6292
+ "interval": {
6293
+ "$ref": "#/components/schemas/Interval"
6294
+ },
6295
+ "period": {
6296
+ "$ref": "#/components/schemas/DatedPeriod"
6297
+ },
6298
+ "side": {
6299
+ "$ref": "#/components/schemas/AgentSide"
6300
+ }
6301
+ },
6302
+ "type": "object"
6303
+ },
5997
6304
  "AgentProductMixEntry": {
5998
6305
  "additionalProperties": false,
5999
6306
  "properties": {
@@ -6141,6 +6448,17 @@
6141
6448
  "AgentSaleSummary": {
6142
6449
  "properties": {
6143
6450
  "address": {
6451
+ "description": "Full street line — number, directionals, street name, suffix and unit (`123 w 4th st`), lowercase",
6452
+ "nullable": true,
6453
+ "type": "string"
6454
+ },
6455
+ "builderName": {
6456
+ "description": "Builder, on a new-construction sale",
6457
+ "nullable": true,
6458
+ "type": "string"
6459
+ },
6460
+ "buyerName": {
6461
+ "description": "First buyer named on the sale — from the purchase loan's document when the MLS record names none; `null` on most cash deals",
6144
6462
  "nullable": true,
6145
6463
  "type": "string"
6146
6464
  },
@@ -6148,6 +6466,16 @@
6148
6466
  "nullable": true,
6149
6467
  "type": "string"
6150
6468
  },
6469
+ "coListAgentId": {
6470
+ "description": "Co-listing agent's id (`GET /v1/agents/{id}`), when the sale's agent key resolves to one agent",
6471
+ "nullable": true,
6472
+ "type": "string"
6473
+ },
6474
+ "coListAgentName": {
6475
+ "description": "Co-listing agent, as the MLS recorded the name",
6476
+ "nullable": true,
6477
+ "type": "string"
6478
+ },
6151
6479
  "date": {
6152
6480
  "nullable": true,
6153
6481
  "type": "string"
@@ -6155,10 +6483,25 @@
6155
6483
  "id": {
6156
6484
  "type": "string"
6157
6485
  },
6486
+ "listAgentId": {
6487
+ "description": "Listing agent's id (`GET /v1/agents/{id}`), when the sale's agent key resolves to one agent",
6488
+ "nullable": true,
6489
+ "type": "string"
6490
+ },
6158
6491
  "listAgentName": {
6159
6492
  "nullable": true,
6160
6493
  "type": "string"
6161
6494
  },
6495
+ "listDate": {
6496
+ "description": "MLS listing date (`YYYY-MM-DD`); days on market = `date` − `listDate`",
6497
+ "nullable": true,
6498
+ "type": "string"
6499
+ },
6500
+ "listPrice": {
6501
+ "description": "Last MLS list price",
6502
+ "nullable": true,
6503
+ "type": "number"
6504
+ },
6162
6505
  "loan": {
6163
6506
  "description": "The 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.",
6164
6507
  "nullable": true,
@@ -6167,6 +6510,11 @@
6167
6510
  "nullable": true,
6168
6511
  "type": "number"
6169
6512
  },
6513
+ "brokerName": {
6514
+ "description": "Mortgage broker as written on the loan document, when the loan was third-party originated",
6515
+ "nullable": true,
6516
+ "type": "string"
6517
+ },
6170
6518
  "brokerNmlsId": {
6171
6519
  "description": "Mortgage broker NMLS id when the loan was third-party originated",
6172
6520
  "nullable": true,
@@ -6185,6 +6533,11 @@
6185
6533
  "description": "Loan id (`GET /v1/loans/{id}`)",
6186
6534
  "type": "string"
6187
6535
  },
6536
+ "interestRate": {
6537
+ "description": "Note rate in percent (e.g. `6.25`), recorded or modeled; `null` when not on file",
6538
+ "nullable": true,
6539
+ "type": "number"
6540
+ },
6188
6541
  "lenderId": {
6189
6542
  "description": "Normalized lender key — the value the `lender` filter accepts",
6190
6543
  "nullable": true,
@@ -6234,10 +6587,20 @@
6234
6587
  ],
6235
6588
  "type": "object"
6236
6589
  },
6590
+ "mmPropertyId": {
6591
+ "description": "The property's id (`GET /v1/properties/{id}`)",
6592
+ "nullable": true,
6593
+ "type": "string"
6594
+ },
6237
6595
  "price": {
6238
6596
  "nullable": true,
6239
6597
  "type": "number"
6240
6598
  },
6599
+ "sellerName": {
6600
+ "description": "First seller named on the sale — from the purchase loan's document when the MLS record names none",
6601
+ "nullable": true,
6602
+ "type": "string"
6603
+ },
6241
6604
  "side": {
6242
6605
  "description": "Which 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.",
6243
6606
  "enum": [
@@ -6249,6 +6612,11 @@
6249
6612
  "nullable": true,
6250
6613
  "type": "string"
6251
6614
  },
6615
+ "soldAgentId": {
6616
+ "description": "Buyer's (selling) agent's id (`GET /v1/agents/{id}`), when the sale's agent key resolves to one agent",
6617
+ "nullable": true,
6618
+ "type": "string"
6619
+ },
6252
6620
  "soldAgentName": {
6253
6621
  "nullable": true,
6254
6622
  "type": "string"
@@ -6272,6 +6640,316 @@
6272
6640
  ],
6273
6641
  "type": "object"
6274
6642
  },
6643
+ "AgentSalesBreakdownRequest": {
6644
+ "additionalProperties": false,
6645
+ "properties": {
6646
+ "advancedFilters": {
6647
+ "$ref": "#/components/schemas/FilterNode"
6648
+ },
6649
+ "filters": {
6650
+ "$ref": "#/components/schemas/FilterNode"
6651
+ },
6652
+ "flatFilters": {
6653
+ "additionalProperties": false,
6654
+ "properties": {
6655
+ "borrowerStatus": {
6656
+ "$ref": "#/components/schemas/LoanBorrowerStatusFilterValue"
6657
+ },
6658
+ "broker": {
6659
+ "allOf": [
6660
+ {
6661
+ "$ref": "#/components/schemas/TextFilterValue"
6662
+ },
6663
+ {
6664
+ "description": "Broker shop NMLS id (digits only). A broker is a company — resolve a broker name to its NMLS id via instantSearch (or listCompanies)."
6665
+ }
6666
+ ]
6667
+ },
6668
+ "buyerEntityType": {
6669
+ "$ref": "#/components/schemas/BooleanFilterValue"
6670
+ },
6671
+ "city": {
6672
+ "$ref": "#/components/schemas/TextFilterValue"
6673
+ },
6674
+ "conforming": {
6675
+ "$ref": "#/components/schemas/BooleanFilterValue"
6676
+ },
6677
+ "county": {
6678
+ "allOf": [
6679
+ {
6680
+ "$ref": "#/components/schemas/TextFilterValue"
6681
+ },
6682
+ {
6683
+ "description": "County name (e.g. \"Broward\") or 5-digit FIPS code. Names resolve to FIPS server-side; include a `state` filter to disambiguate."
6684
+ }
6685
+ ]
6686
+ },
6687
+ "currentBalance": {
6688
+ "allOf": [
6689
+ {
6690
+ "$ref": "#/components/schemas/NumericFilterValue"
6691
+ },
6692
+ {
6693
+ "description": "Estimated remaining principal balance (~19% populated). Approximate current equity as `homeValue` (AVM) minus this."
6694
+ }
6695
+ ]
6696
+ },
6697
+ "employer": {
6698
+ "allOf": [
6699
+ {
6700
+ "$ref": "#/components/schemas/TextFilterValue"
6701
+ },
6702
+ {
6703
+ "description": "Employer/company NMLS id (digits only). Resolve a company name to its NMLS id via instantSearch."
6704
+ }
6705
+ ]
6706
+ },
6707
+ "equity": {
6708
+ "allOf": [
6709
+ {
6710
+ "$ref": "#/components/schemas/NumericFilterValue"
6711
+ },
6712
+ {
6713
+ "description": "Point-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."
6714
+ }
6715
+ ]
6716
+ },
6717
+ "excludeBroker": {
6718
+ "allOf": [
6719
+ {
6720
+ "$ref": "#/components/schemas/TextFilterValue"
6721
+ },
6722
+ {
6723
+ "description": "Exclude loans brokered by this broker-shop NMLS id (digits only) — the inverse of `broker`."
6724
+ }
6725
+ ]
6726
+ },
6727
+ "excludeCity": {
6728
+ "allOf": [
6729
+ {
6730
+ "$ref": "#/components/schemas/TextFilterValue"
6731
+ },
6732
+ {
6733
+ "description": "Exclude loans in this city — the inverse of `city`."
6734
+ }
6735
+ ]
6736
+ },
6737
+ "excludeLender": {
6738
+ "allOf": [
6739
+ {
6740
+ "$ref": "#/components/schemas/TextFilterValue"
6741
+ },
6742
+ {
6743
+ "description": "Exclude 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."
6744
+ }
6745
+ ]
6746
+ },
6747
+ "excludeLoanCompany": {
6748
+ "allOf": [
6749
+ {
6750
+ "$ref": "#/components/schemas/TextFilterValue"
6751
+ },
6752
+ {
6753
+ "description": "Exclude loans funded by this company NMLS id (digits only) — the inverse of `loanCompany`."
6754
+ }
6755
+ ]
6756
+ },
6757
+ "excludeOriginator": {
6758
+ "allOf": [
6759
+ {
6760
+ "$ref": "#/components/schemas/TextFilterValue"
6761
+ },
6762
+ {
6763
+ "description": "Exclude loans with this originator NMLS id (digits only) — the inverse of `originator`. Common for 'everyone but my own shop' lists."
6764
+ }
6765
+ ]
6766
+ },
6767
+ "excludeState": {
6768
+ "allOf": [
6769
+ {
6770
+ "$ref": "#/components/schemas/TextFilterValue"
6771
+ },
6772
+ {
6773
+ "description": "Exclude loans in this state (2-letter code, e.g. \"CA\") — the inverse of `state`. For \"everywhere but this state\" lists."
6774
+ }
6775
+ ]
6776
+ },
6777
+ "excludeZipCode": {
6778
+ "allOf": [
6779
+ {
6780
+ "$ref": "#/components/schemas/TextFilterValue"
6781
+ },
6782
+ {
6783
+ "description": "Exclude loans in this ZIP code — the inverse of `zipCode`."
6784
+ }
6785
+ ]
6786
+ },
6787
+ "fips": {
6788
+ "allOf": [
6789
+ {
6790
+ "$ref": "#/components/schemas/TextFilterValue"
6791
+ },
6792
+ {
6793
+ "description": "Exact 5-digit county FIPS code (no name resolution) — the code-only escape hatch alongside `county`."
6794
+ }
6795
+ ]
6796
+ },
6797
+ "geoPoint": {
6798
+ "$ref": "#/components/schemas/GeoFilterValue"
6799
+ },
6800
+ "homeValue": {
6801
+ "allOf": [
6802
+ {
6803
+ "$ref": "#/components/schemas/NumericFilterValue"
6804
+ },
6805
+ {
6806
+ "description": "AVM (automated valuation) at the linked property (~26%, MLS-linked). Pair with `currentBalance` to approximate current equity."
6807
+ }
6808
+ ]
6809
+ },
6810
+ "includeUnknownOriginator": {
6811
+ "allOf": [
6812
+ {
6813
+ "$ref": "#/components/schemas/BooleanFilterValue"
6814
+ },
6815
+ {
6816
+ "description": "Include 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)."
6817
+ }
6818
+ ]
6819
+ },
6820
+ "interestRate": {
6821
+ "$ref": "#/components/schemas/NumericFilterValue"
6822
+ },
6823
+ "lender": {
6824
+ "allOf": [
6825
+ {
6826
+ "$ref": "#/components/schemas/TextFilterValue"
6827
+ },
6828
+ {
6829
+ "description": "Lender 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`."
6830
+ }
6831
+ ]
6832
+ },
6833
+ "lenderName": {
6834
+ "allOf": [
6835
+ {
6836
+ "$ref": "#/components/schemas/TextFilterValue"
6837
+ },
6838
+ {
6839
+ "description": "Lender 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."
6840
+ }
6841
+ ]
6842
+ },
6843
+ "loanCompany": {
6844
+ "allOf": [
6845
+ {
6846
+ "$ref": "#/components/schemas/TextFilterValue"
6847
+ },
6848
+ {
6849
+ "description": "Funding/loan company NMLS id (digits only). Resolve a company name to its NMLS id via instantSearch."
6850
+ }
6851
+ ]
6852
+ },
6853
+ "loanType": {
6854
+ "$ref": "#/components/schemas/LoanTypeFilterValue"
6855
+ },
6856
+ "ltvAtOrigination": {
6857
+ "allOf": [
6858
+ {
6859
+ "$ref": "#/components/schemas/NumericFilterValue"
6860
+ },
6861
+ {
6862
+ "description": "Loan-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."
6863
+ }
6864
+ ]
6865
+ },
6866
+ "mode": {
6867
+ "enum": [
6868
+ "and",
6869
+ "or"
6870
+ ],
6871
+ "type": "string"
6872
+ },
6873
+ "mortgageAmount": {
6874
+ "$ref": "#/components/schemas/NumericFilterValue"
6875
+ },
6876
+ "mortgageDate": {
6877
+ "$ref": "#/components/schemas/DateFilterValue"
6878
+ },
6879
+ "originator": {
6880
+ "allOf": [
6881
+ {
6882
+ "$ref": "#/components/schemas/TextFilterValue"
6883
+ },
6884
+ {
6885
+ "description": "Loan originator NMLS id (digits only). To search by name use `originatorName`, or resolve a name to its id via instantSearch."
6886
+ }
6887
+ ]
6888
+ },
6889
+ "originatorName": {
6890
+ "allOf": [
6891
+ {
6892
+ "$ref": "#/components/schemas/TextFilterValue"
6893
+ },
6894
+ {
6895
+ "deprecated": true,
6896
+ "description": "DEPRECATED — 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."
6897
+ }
6898
+ ]
6899
+ },
6900
+ "propertyId": {
6901
+ "allOf": [
6902
+ {
6903
+ "$ref": "#/components/schemas/TextFilterValue"
6904
+ },
6905
+ {
6906
+ "description": "Parcel 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.\n\nThis 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.\n\nMulti-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."
6907
+ }
6908
+ ]
6909
+ },
6910
+ "saleDate": {
6911
+ "$ref": "#/components/schemas/DateFilterValue"
6912
+ },
6913
+ "salePrice": {
6914
+ "$ref": "#/components/schemas/NumericFilterValue"
6915
+ },
6916
+ "state": {
6917
+ "$ref": "#/components/schemas/TextFilterValue"
6918
+ },
6919
+ "transactionType": {
6920
+ "$ref": "#/components/schemas/LoanTransactionTypeFilterValue"
6921
+ },
6922
+ "zip": {
6923
+ "allOf": [
6924
+ {
6925
+ "$ref": "#/components/schemas/TextFilterValue"
6926
+ },
6927
+ {
6928
+ "description": "Alias of `zipCode` — same ZIP filter, accepted for cross-entity key parity."
6929
+ }
6930
+ ]
6931
+ },
6932
+ "zipCode": {
6933
+ "$ref": "#/components/schemas/TextFilterValue"
6934
+ }
6935
+ },
6936
+ "type": "object"
6937
+ },
6938
+ "pagination": {
6939
+ "$ref": "#/components/schemas/Pagination"
6940
+ },
6941
+ "period": {
6942
+ "$ref": "#/components/schemas/DatedPeriod"
6943
+ },
6944
+ "side": {
6945
+ "$ref": "#/components/schemas/AgentSide"
6946
+ },
6947
+ "sort": {
6948
+ "$ref": "#/components/schemas/BreakdownSort"
6949
+ }
6950
+ },
6951
+ "type": "object"
6952
+ },
6275
6953
  "AgentSalesResponse": {
6276
6954
  "properties": {
6277
6955
  "cursor": {
@@ -13111,12 +13789,15 @@
13111
13789
  "example": "volume"
13112
13790
  },
13113
13791
  "format": {
13114
- "description": "`currency`, `number` and `percentWhole` round the value to a whole number (in both `csv` and `xlsx`) and, in `xlsx`, display it as `$1,234,567`, `1,234` or `62%`. `percentWhole` expects a value that is already 0–100 (it is written as `62` in `csv`; in `xlsx` the cell holds `0.62` under the standard percent format, so it displays `62%` in every spreadsheet app and calculates as a percent). `text` writes an `xlsx` text cell. Omit for the value as-is.",
13792
+ "description": "`currency`, `number` and `percentWhole` round the value to a whole number (in both `csv` and `xlsx`) and, in `xlsx`, display it as `$1,234,567`, `1,234` or `62%`. `percentWhole` expects a value that is already 0–100 (it is written as `62` in `csv`; in `xlsx` the cell holds `0.62` under the standard percent format, so it displays `62%` in every spreadsheet app and calculates as a percent). `text` writes an `xlsx` text cell. `titleCase` (`dina verteramo` → `Dina Verteramo`), `lowercase`, and `phone` (US 10-digit numbers as `(469) 907-7475`; anything else as stored) reshape the text and write a text cell. Omit for the value as-is.",
13115
13793
  "enum": [
13116
13794
  "currency",
13117
13795
  "number",
13118
13796
  "percentWhole",
13119
- "text"
13797
+ "text",
13798
+ "titleCase",
13799
+ "lowercase",
13800
+ "phone"
13120
13801
  ],
13121
13802
  "type": "string"
13122
13803
  },
@@ -32189,7 +32870,7 @@
32189
32870
  "type": "object"
32190
32871
  },
32191
32872
  "OriginatorAgentSide": {
32192
- "description": "Which agent on the LO's loans to rank. `buyer` (default): the buyer's (selling) agent — the agent who brought the borrower. `listing`: the seller's listing agent.",
32873
+ "description": "Which agent on the LO's loans to rank. `buyer` (default): the buyer's (selling) agent — the agent who brought the borrower. `listing`: the seller's listing and co-listing agents.",
32193
32874
  "enum": [
32194
32875
  "buyer",
32195
32876
  "listing"
@@ -41783,7 +42464,7 @@
41783
42464
  "info": {
41784
42465
  "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.",
41785
42466
  "title": "ModelMatch API",
41786
- "version": "3.78.0"
42467
+ "version": "3.80.0"
41787
42468
  },
41788
42469
  "openapi": "3.1.0",
41789
42470
  "paths": {
@@ -42415,7 +43096,7 @@
42415
43096
  "$ref": "#/components/schemas/BulkDeliveryDestination"
42416
43097
  },
42417
43098
  "fields": {
42418
- "description": "Optional output column projection, named by the response DTO fields (the same camelCase fields the list endpoint returns, e.g. `city`, `interestRate`). Intersected with the entitlement scope's allowedFields and the entity's full column set. If empty after intersection, falls back to all columns. It also SELECTS the opt-in columns, which are not part of the list DTO and are never delivered unless named here: `communityLending` (properties, originators, companies, branches) — the Community Lending neighborhood profile, identical to the block on the entity's detail endpoint; `parties` (properties) — the mortgage parties attributed to the parcel, by attribution scope; `marketCount` / `countyCount` / `stateCount` / `zipCount` / `lenderCount` (originators) — the market-breadth rollups you can already filter on; and the computed `governmentPct` (originators: FHA + VA percent of loans, 0–100), `branchCount` (companies: NMLS branch count) and `managerName` / `managerNmlsId` (branches: the first branch manager). Agents also offer `email2` / `phone2` (the best-ranked email / phone distinct from `email` / `phone`, admitted by the `email` / `phone` entitlement field), `officePhone` (admitted by `phone`), `activeListings` (current active listings; null when unknown), and the profile-link columns `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok`, `zillow`, `otherLinks` (a `; `-joined list of profile URLs on no known platform) — all admitted by the `links` entitlement field. In `csv` and `parquet` the two block columns are JSON-encoded cells; in `json` and `ndjson` they are nested objects. Windowed production (originators, agents, companies, branches): name `<field>_<n>mo` for n in 3, 6, 12, 14, 18, 24 to get a production field for that trailing window regardless of `period` — e.g. `volume_3mo`, `units_6mo`, `purchaseVolume_24mo`. Available for originators `volume`, `units`, `avgLoanAmount`, `purchaseVolume`, `purchaseUnits`, `refinanceVolume`, `refinanceUnits`, `conventionalPct`, `fhaPct`, `vaPct`; agents `volume`, `units`, `avgSoldPrice`, `buyerVolume`, `buyerUnits`, `sellerVolume`, `sellerUnits`, `totalOriginatorsWorkedWith`, `totalCompaniesWorkedWith`, `totalLendersWorkedWith`; companies `volume`, `units`, `avgLoanAmount`, `loCount`; branches `volume`, `units`, `avgLoanAmount`, `purchasePct`, `refinancePct`, `loCount`. Numbers (null when the window has no data); an entitlement that allows a field allows every window of it.",
43099
+ "description": "Optional output column projection, named by the response DTO fields (the same camelCase fields the list endpoint returns, e.g. `city`, `interestRate`). Intersected with the entitlement scope's allowedFields and the entity's full column set. If empty after intersection, falls back to all columns. It also SELECTS the opt-in columns, which are not part of the list DTO and are never delivered unless named here: `communityLending` (properties, originators, companies, branches) — the Community Lending neighborhood profile, identical to the block on the entity's detail endpoint; `parties` (properties) — the mortgage parties attributed to the parcel, by attribution scope; `marketCount` / `countyCount` / `stateCount` / `zipCount` / `lenderCount` (originators) — the market-breadth rollups you can already filter on; and the computed `governmentPct` (originators: FHA + VA percent of loans, 0–100), `branchCount` (companies: NMLS branch count) and `managerName` / `managerNmlsId` (branches: the first branch manager). Agents also offer `email2` / `phone2` (the best-ranked email / phone distinct from `email` / `phone`, admitted by the `email` / `phone` entitlement field), `bestEmail` / `bestEmail2` and `bestPhone` / `bestPhone2` (the best and runner-up contact over every email / phone on the record, `email` / `phone` included — the pair the ModelMatch web app's agent export shows; same entitlement fields), `officePhone` (admitted by `phone`), `activeListings` (current active listings; null when unknown), and the profile-link columns `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok`, `zillow`, `otherLinks` (a `; `-joined list of profile URLs on no known platform) — all admitted by the `links` entitlement field. In `csv` and `parquet` the two block columns are JSON-encoded cells; in `json` and `ndjson` they are nested objects. Windowed production (originators, agents, companies, branches): name `<field>_<n>mo` for n in 3, 6, 12, 14, 18, 24 to get a production field for that trailing window regardless of `period` — e.g. `volume_3mo`, `units_6mo`, `purchaseVolume_24mo`. Available for originators `volume`, `units`, `avgLoanAmount`, `purchaseVolume`, `purchaseUnits`, `refinanceVolume`, `refinanceUnits`, `conventionalPct`, `fhaPct`, `vaPct`; agents `volume`, `units`, `avgSoldPrice`, `buyerVolume`, `buyerUnits`, `sellerVolume`, `sellerUnits`, `totalOriginatorsWorkedWith`, `totalCompaniesWorkedWith`, `totalLendersWorkedWith`; companies `volume`, `units`, `avgLoanAmount`, `loCount`; branches `volume`, `units`, `avgLoanAmount`, `purchasePct`, `refinancePct`, `loCount`. Numbers (null when the window has no data); an entitlement that allows a field allows every window of it.",
42419
43100
  "items": {
42420
43101
  "minLength": 1,
42421
43102
  "type": "string"
@@ -42947,6 +43628,99 @@
42947
43628
  ]
42948
43629
  }
42949
43630
  },
43631
+ "/v1/agents/{id}/analytics/mortgaged-time-series": {
43632
+ "post": {
43633
+ "description": "Scoped to the agent's FINANCED deals: recorded loans on which the agent is the buyer's agent or the listing / co-listing agent, matched through the agent's MLS ids. Cash deals carry no loan and are not counted. The date window is the loan's recording date. One bucket per `interval` (default monthly): `units` = financed deals recorded in the bucket, `volume` = their total loan amount (out-of-range fill amounts excluded and counted in `excluded`). `previous` is the same series for the prior window. `side` defaults to `any`; `buyer` + `listing` = `any` per bucket. Pair with `agentAnalyticsTimeSeries` (closed sales by sale date) for a mortgaged-vs-total chart — the two use different date axes (loan recording vs sale close), so a deal can land a month apart.",
43634
+ "operationId": "agentMortgagedTimeSeries",
43635
+ "parameters": [
43636
+ {
43637
+ "description": "Agent document ID",
43638
+ "in": "path",
43639
+ "name": "id",
43640
+ "required": true,
43641
+ "schema": {
43642
+ "description": "Agent document ID",
43643
+ "type": "string"
43644
+ }
43645
+ }
43646
+ ],
43647
+ "requestBody": {
43648
+ "content": {
43649
+ "application/json": {
43650
+ "schema": {
43651
+ "$ref": "#/components/schemas/AgentMortgagedTimeSeriesRequest"
43652
+ }
43653
+ }
43654
+ }
43655
+ },
43656
+ "responses": {
43657
+ "200": {
43658
+ "content": {
43659
+ "application/json": {
43660
+ "schema": {
43661
+ "$ref": "#/components/schemas/SimpleTimeSeriesResponse"
43662
+ }
43663
+ }
43664
+ },
43665
+ "description": "Financed deals and loan volume per bucket"
43666
+ },
43667
+ "400": {
43668
+ "content": {
43669
+ "application/json": {
43670
+ "schema": {
43671
+ "$ref": "#/components/schemas/ErrorResponse"
43672
+ }
43673
+ }
43674
+ },
43675
+ "description": "Validation error"
43676
+ },
43677
+ "401": {
43678
+ "content": {
43679
+ "application/json": {
43680
+ "schema": {
43681
+ "$ref": "#/components/schemas/ErrorResponse"
43682
+ }
43683
+ }
43684
+ },
43685
+ "description": "Unauthorized"
43686
+ },
43687
+ "403": {
43688
+ "content": {
43689
+ "application/json": {
43690
+ "schema": {
43691
+ "$ref": "#/components/schemas/ErrorResponse"
43692
+ }
43693
+ }
43694
+ },
43695
+ "description": "Forbidden (authenticated, but missing required context — e.g. no active organization)"
43696
+ },
43697
+ "404": {
43698
+ "content": {
43699
+ "application/json": {
43700
+ "schema": {
43701
+ "$ref": "#/components/schemas/ErrorResponse"
43702
+ }
43703
+ }
43704
+ },
43705
+ "description": "Not found"
43706
+ },
43707
+ "413": {
43708
+ "content": {
43709
+ "application/json": {
43710
+ "schema": {
43711
+ "$ref": "#/components/schemas/PayloadTooLarge"
43712
+ }
43713
+ }
43714
+ },
43715
+ "description": "Response payload too large — detail endpoint capped to fit Lambda response limits"
43716
+ }
43717
+ },
43718
+ "summary": "The agent's financed deals and loan volume, over time",
43719
+ "tags": [
43720
+ "Agents"
43721
+ ]
43722
+ }
43723
+ },
42950
43724
  "/v1/agents/{id}/breakdowns/builders": {
42951
43725
  "post": {
42952
43726
  "description": "New-construction builders named on the agent's deals in the period, ranked by units. The pre-aggregated builder list carries a deal COUNT only, so every row's `volume` and `pctVolume` are 0 — rank and share by `units` / `pctUnits` (a share of ALL the agent's deals in the period, so the rows sum to the builder-sold share, not to 1). It carries no buyer/listing split either: `side` must be `any` (or omitted); `buyer`/`listing` return 400.",
@@ -43042,6 +43816,7 @@
43042
43816
  },
43043
43817
  "/v1/agents/{id}/breakdowns/cities": {
43044
43818
  "post": {
43819
+ "description": "Ranks the agent's CLOSED sales (MLS status sold, a real sale price — rentals and lease listings excluded, duplicate MLS records of one sale counted once) by this dimension. The same population `POST /v1/agents/{id}/sales` returns with `flatFilters.mlsStatus: \"SLD\"` and the agent analytics routes count. `side` narrows to the deals the agent was on that side of (`buyer` includes deals on both sides; `buyer` + `listing` = `any`).",
43045
43820
  "operationId": "agentCities",
43046
43821
  "parameters": [
43047
43822
  {
@@ -43059,7 +43834,7 @@
43059
43834
  "content": {
43060
43835
  "application/json": {
43061
43836
  "schema": {
43062
- "$ref": "#/components/schemas/BreakdownRequest"
43837
+ "$ref": "#/components/schemas/AgentSalesBreakdownRequest"
43063
43838
  }
43064
43839
  }
43065
43840
  }
@@ -43226,6 +44001,7 @@
43226
44001
  },
43227
44002
  "/v1/agents/{id}/breakdowns/counties": {
43228
44003
  "post": {
44004
+ "description": "Ranks the agent's CLOSED sales (MLS status sold, a real sale price — rentals and lease listings excluded, duplicate MLS records of one sale counted once) by this dimension. The same population `POST /v1/agents/{id}/sales` returns with `flatFilters.mlsStatus: \"SLD\"` and the agent analytics routes count. `side` narrows to the deals the agent was on that side of (`buyer` includes deals on both sides; `buyer` + `listing` = `any`).",
43229
44005
  "operationId": "agentCounties",
43230
44006
  "parameters": [
43231
44007
  {
@@ -43243,7 +44019,7 @@
43243
44019
  "content": {
43244
44020
  "application/json": {
43245
44021
  "schema": {
43246
- "$ref": "#/components/schemas/BreakdownRequest"
44022
+ "$ref": "#/components/schemas/AgentSalesBreakdownRequest"
43247
44023
  }
43248
44024
  }
43249
44025
  }
@@ -43410,6 +44186,7 @@
43410
44186
  },
43411
44187
  "/v1/agents/{id}/breakdowns/offices": {
43412
44188
  "post": {
44189
+ "description": "Ranks the agent's CLOSED sales (MLS status sold, a real sale price — rentals and lease listings excluded, duplicate MLS records of one sale counted once) by this dimension. The same population `POST /v1/agents/{id}/sales` returns with `flatFilters.mlsStatus: \"SLD\"` and the agent analytics routes count. `side` narrows to the deals the agent was on that side of (`buyer` includes deals on both sides; `buyer` + `listing` = `any`).",
43413
44190
  "operationId": "agentOffices",
43414
44191
  "parameters": [
43415
44192
  {
@@ -43427,7 +44204,7 @@
43427
44204
  "content": {
43428
44205
  "application/json": {
43429
44206
  "schema": {
43430
- "$ref": "#/components/schemas/BreakdownRequest"
44207
+ "$ref": "#/components/schemas/AgentSalesBreakdownRequest"
43431
44208
  }
43432
44209
  }
43433
44210
  }
@@ -43594,6 +44371,7 @@
43594
44371
  },
43595
44372
  "/v1/agents/{id}/breakdowns/states": {
43596
44373
  "post": {
44374
+ "description": "Ranks the agent's CLOSED sales (MLS status sold, a real sale price — rentals and lease listings excluded, duplicate MLS records of one sale counted once) by this dimension. The same population `POST /v1/agents/{id}/sales` returns with `flatFilters.mlsStatus: \"SLD\"` and the agent analytics routes count. `side` narrows to the deals the agent was on that side of (`buyer` includes deals on both sides; `buyer` + `listing` = `any`).",
43597
44375
  "operationId": "agentStates",
43598
44376
  "parameters": [
43599
44377
  {
@@ -43611,7 +44389,7 @@
43611
44389
  "content": {
43612
44390
  "application/json": {
43613
44391
  "schema": {
43614
- "$ref": "#/components/schemas/BreakdownRequest"
44392
+ "$ref": "#/components/schemas/AgentSalesBreakdownRequest"
43615
44393
  }
43616
44394
  }
43617
44395
  }
@@ -43872,6 +44650,7 @@
43872
44650
  },
43873
44651
  "/v1/agents/{id}/breakdowns/zip-codes": {
43874
44652
  "post": {
44653
+ "description": "Ranks the agent's CLOSED sales (MLS status sold, a real sale price — rentals and lease listings excluded, duplicate MLS records of one sale counted once) by this dimension. The same population `POST /v1/agents/{id}/sales` returns with `flatFilters.mlsStatus: \"SLD\"` and the agent analytics routes count. `side` narrows to the deals the agent was on that side of (`buyer` includes deals on both sides; `buyer` + `listing` = `any`).",
43875
44654
  "operationId": "agentZipCodes",
43876
44655
  "parameters": [
43877
44656
  {
@@ -43889,7 +44668,7 @@
43889
44668
  "content": {
43890
44669
  "application/json": {
43891
44670
  "schema": {
43892
- "$ref": "#/components/schemas/BreakdownRequest"
44671
+ "$ref": "#/components/schemas/AgentSalesBreakdownRequest"
43893
44672
  }
43894
44673
  }
43895
44674
  }
@@ -47371,7 +48150,7 @@
47371
48150
  "$ref": "#/components/schemas/BulkDeliveryDestination"
47372
48151
  },
47373
48152
  "fields": {
47374
- "description": "Optional output column projection, named by the response DTO fields (the same camelCase fields the list endpoint returns, e.g. `city`, `interestRate`). Intersected with the entitlement scope's allowedFields and the entity's full column set. If empty after intersection, falls back to all columns. It also SELECTS the opt-in columns, which are not part of the list DTO and are never delivered unless named here: `communityLending` (properties, originators, companies, branches) — the Community Lending neighborhood profile, identical to the block on the entity's detail endpoint; `parties` (properties) — the mortgage parties attributed to the parcel, by attribution scope; `marketCount` / `countyCount` / `stateCount` / `zipCount` / `lenderCount` (originators) — the market-breadth rollups you can already filter on; and the computed `governmentPct` (originators: FHA + VA percent of loans, 0–100), `branchCount` (companies: NMLS branch count) and `managerName` / `managerNmlsId` (branches: the first branch manager). Agents also offer `email2` / `phone2` (the best-ranked email / phone distinct from `email` / `phone`, admitted by the `email` / `phone` entitlement field), `officePhone` (admitted by `phone`), `activeListings` (current active listings; null when unknown), and the profile-link columns `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok`, `zillow`, `otherLinks` (a `; `-joined list of profile URLs on no known platform) — all admitted by the `links` entitlement field. In `csv` and `parquet` the two block columns are JSON-encoded cells; in `json` and `ndjson` they are nested objects. Windowed production (originators, agents, companies, branches): name `<field>_<n>mo` for n in 3, 6, 12, 14, 18, 24 to get a production field for that trailing window regardless of `period` — e.g. `volume_3mo`, `units_6mo`, `purchaseVolume_24mo`. Available for originators `volume`, `units`, `avgLoanAmount`, `purchaseVolume`, `purchaseUnits`, `refinanceVolume`, `refinanceUnits`, `conventionalPct`, `fhaPct`, `vaPct`; agents `volume`, `units`, `avgSoldPrice`, `buyerVolume`, `buyerUnits`, `sellerVolume`, `sellerUnits`, `totalOriginatorsWorkedWith`, `totalCompaniesWorkedWith`, `totalLendersWorkedWith`; companies `volume`, `units`, `avgLoanAmount`, `loCount`; branches `volume`, `units`, `avgLoanAmount`, `purchasePct`, `refinancePct`, `loCount`. Numbers (null when the window has no data); an entitlement that allows a field allows every window of it.",
48153
+ "description": "Optional output column projection, named by the response DTO fields (the same camelCase fields the list endpoint returns, e.g. `city`, `interestRate`). Intersected with the entitlement scope's allowedFields and the entity's full column set. If empty after intersection, falls back to all columns. It also SELECTS the opt-in columns, which are not part of the list DTO and are never delivered unless named here: `communityLending` (properties, originators, companies, branches) — the Community Lending neighborhood profile, identical to the block on the entity's detail endpoint; `parties` (properties) — the mortgage parties attributed to the parcel, by attribution scope; `marketCount` / `countyCount` / `stateCount` / `zipCount` / `lenderCount` (originators) — the market-breadth rollups you can already filter on; and the computed `governmentPct` (originators: FHA + VA percent of loans, 0–100), `branchCount` (companies: NMLS branch count) and `managerName` / `managerNmlsId` (branches: the first branch manager). Agents also offer `email2` / `phone2` (the best-ranked email / phone distinct from `email` / `phone`, admitted by the `email` / `phone` entitlement field), `bestEmail` / `bestEmail2` and `bestPhone` / `bestPhone2` (the best and runner-up contact over every email / phone on the record, `email` / `phone` included — the pair the ModelMatch web app's agent export shows; same entitlement fields), `officePhone` (admitted by `phone`), `activeListings` (current active listings; null when unknown), and the profile-link columns `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok`, `zillow`, `otherLinks` (a `; `-joined list of profile URLs on no known platform) — all admitted by the `links` entitlement field. In `csv` and `parquet` the two block columns are JSON-encoded cells; in `json` and `ndjson` they are nested objects. Windowed production (originators, agents, companies, branches): name `<field>_<n>mo` for n in 3, 6, 12, 14, 18, 24 to get a production field for that trailing window regardless of `period` — e.g. `volume_3mo`, `units_6mo`, `purchaseVolume_24mo`. Available for originators `volume`, `units`, `avgLoanAmount`, `purchaseVolume`, `purchaseUnits`, `refinanceVolume`, `refinanceUnits`, `conventionalPct`, `fhaPct`, `vaPct`; agents `volume`, `units`, `avgSoldPrice`, `buyerVolume`, `buyerUnits`, `sellerVolume`, `sellerUnits`, `totalOriginatorsWorkedWith`, `totalCompaniesWorkedWith`, `totalLendersWorkedWith`; companies `volume`, `units`, `avgLoanAmount`, `loCount`; branches `volume`, `units`, `avgLoanAmount`, `purchasePct`, `refinancePct`, `loCount`. Numbers (null when the window has no data); an entitlement that allows a field allows every window of it.",
47375
48154
  "items": {
47376
48155
  "minLength": 1,
47377
48156
  "type": "string"
@@ -48884,7 +49663,7 @@
48884
49663
  "$ref": "#/components/schemas/BulkDeliveryDestination"
48885
49664
  },
48886
49665
  "fields": {
48887
- "description": "Optional output column projection, named by the response DTO fields (the same camelCase fields the list endpoint returns, e.g. `city`, `interestRate`). Intersected with the entitlement scope's allowedFields and the entity's full column set. If empty after intersection, falls back to all columns. It also SELECTS the opt-in columns, which are not part of the list DTO and are never delivered unless named here: `communityLending` (properties, originators, companies, branches) — the Community Lending neighborhood profile, identical to the block on the entity's detail endpoint; `parties` (properties) — the mortgage parties attributed to the parcel, by attribution scope; `marketCount` / `countyCount` / `stateCount` / `zipCount` / `lenderCount` (originators) — the market-breadth rollups you can already filter on; and the computed `governmentPct` (originators: FHA + VA percent of loans, 0–100), `branchCount` (companies: NMLS branch count) and `managerName` / `managerNmlsId` (branches: the first branch manager). Agents also offer `email2` / `phone2` (the best-ranked email / phone distinct from `email` / `phone`, admitted by the `email` / `phone` entitlement field), `officePhone` (admitted by `phone`), `activeListings` (current active listings; null when unknown), and the profile-link columns `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok`, `zillow`, `otherLinks` (a `; `-joined list of profile URLs on no known platform) — all admitted by the `links` entitlement field. In `csv` and `parquet` the two block columns are JSON-encoded cells; in `json` and `ndjson` they are nested objects. Windowed production (originators, agents, companies, branches): name `<field>_<n>mo` for n in 3, 6, 12, 14, 18, 24 to get a production field for that trailing window regardless of `period` — e.g. `volume_3mo`, `units_6mo`, `purchaseVolume_24mo`. Available for originators `volume`, `units`, `avgLoanAmount`, `purchaseVolume`, `purchaseUnits`, `refinanceVolume`, `refinanceUnits`, `conventionalPct`, `fhaPct`, `vaPct`; agents `volume`, `units`, `avgSoldPrice`, `buyerVolume`, `buyerUnits`, `sellerVolume`, `sellerUnits`, `totalOriginatorsWorkedWith`, `totalCompaniesWorkedWith`, `totalLendersWorkedWith`; companies `volume`, `units`, `avgLoanAmount`, `loCount`; branches `volume`, `units`, `avgLoanAmount`, `purchasePct`, `refinancePct`, `loCount`. Numbers (null when the window has no data); an entitlement that allows a field allows every window of it.",
49666
+ "description": "Optional output column projection, named by the response DTO fields (the same camelCase fields the list endpoint returns, e.g. `city`, `interestRate`). Intersected with the entitlement scope's allowedFields and the entity's full column set. If empty after intersection, falls back to all columns. It also SELECTS the opt-in columns, which are not part of the list DTO and are never delivered unless named here: `communityLending` (properties, originators, companies, branches) — the Community Lending neighborhood profile, identical to the block on the entity's detail endpoint; `parties` (properties) — the mortgage parties attributed to the parcel, by attribution scope; `marketCount` / `countyCount` / `stateCount` / `zipCount` / `lenderCount` (originators) — the market-breadth rollups you can already filter on; and the computed `governmentPct` (originators: FHA + VA percent of loans, 0–100), `branchCount` (companies: NMLS branch count) and `managerName` / `managerNmlsId` (branches: the first branch manager). Agents also offer `email2` / `phone2` (the best-ranked email / phone distinct from `email` / `phone`, admitted by the `email` / `phone` entitlement field), `bestEmail` / `bestEmail2` and `bestPhone` / `bestPhone2` (the best and runner-up contact over every email / phone on the record, `email` / `phone` included — the pair the ModelMatch web app's agent export shows; same entitlement fields), `officePhone` (admitted by `phone`), `activeListings` (current active listings; null when unknown), and the profile-link columns `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok`, `zillow`, `otherLinks` (a `; `-joined list of profile URLs on no known platform) — all admitted by the `links` entitlement field. In `csv` and `parquet` the two block columns are JSON-encoded cells; in `json` and `ndjson` they are nested objects. Windowed production (originators, agents, companies, branches): name `<field>_<n>mo` for n in 3, 6, 12, 14, 18, 24 to get a production field for that trailing window regardless of `period` — e.g. `volume_3mo`, `units_6mo`, `purchaseVolume_24mo`. Available for originators `volume`, `units`, `avgLoanAmount`, `purchaseVolume`, `purchaseUnits`, `refinanceVolume`, `refinanceUnits`, `conventionalPct`, `fhaPct`, `vaPct`; agents `volume`, `units`, `avgSoldPrice`, `buyerVolume`, `buyerUnits`, `sellerVolume`, `sellerUnits`, `totalOriginatorsWorkedWith`, `totalCompaniesWorkedWith`, `totalLendersWorkedWith`; companies `volume`, `units`, `avgLoanAmount`, `loCount`; branches `volume`, `units`, `avgLoanAmount`, `purchasePct`, `refinancePct`, `loCount`. Numbers (null when the window has no data); an entitlement that allows a field allows every window of it.",
48888
49667
  "items": {
48889
49668
  "minLength": 1,
48890
49669
  "type": "string"
@@ -64825,7 +65604,7 @@
64825
65604
  "$ref": "#/components/schemas/BulkDeliveryDestination"
64826
65605
  },
64827
65606
  "fields": {
64828
- "description": "Optional output column projection, named by the response DTO fields (the same camelCase fields the list endpoint returns, e.g. `city`, `interestRate`). Intersected with the entitlement scope's allowedFields and the entity's full column set. If empty after intersection, falls back to all columns. It also SELECTS the opt-in columns, which are not part of the list DTO and are never delivered unless named here: `communityLending` (properties, originators, companies, branches) — the Community Lending neighborhood profile, identical to the block on the entity's detail endpoint; `parties` (properties) — the mortgage parties attributed to the parcel, by attribution scope; `marketCount` / `countyCount` / `stateCount` / `zipCount` / `lenderCount` (originators) — the market-breadth rollups you can already filter on; and the computed `governmentPct` (originators: FHA + VA percent of loans, 0–100), `branchCount` (companies: NMLS branch count) and `managerName` / `managerNmlsId` (branches: the first branch manager). Agents also offer `email2` / `phone2` (the best-ranked email / phone distinct from `email` / `phone`, admitted by the `email` / `phone` entitlement field), `officePhone` (admitted by `phone`), `activeListings` (current active listings; null when unknown), and the profile-link columns `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok`, `zillow`, `otherLinks` (a `; `-joined list of profile URLs on no known platform) — all admitted by the `links` entitlement field. In `csv` and `parquet` the two block columns are JSON-encoded cells; in `json` and `ndjson` they are nested objects. Windowed production (originators, agents, companies, branches): name `<field>_<n>mo` for n in 3, 6, 12, 14, 18, 24 to get a production field for that trailing window regardless of `period` — e.g. `volume_3mo`, `units_6mo`, `purchaseVolume_24mo`. Available for originators `volume`, `units`, `avgLoanAmount`, `purchaseVolume`, `purchaseUnits`, `refinanceVolume`, `refinanceUnits`, `conventionalPct`, `fhaPct`, `vaPct`; agents `volume`, `units`, `avgSoldPrice`, `buyerVolume`, `buyerUnits`, `sellerVolume`, `sellerUnits`, `totalOriginatorsWorkedWith`, `totalCompaniesWorkedWith`, `totalLendersWorkedWith`; companies `volume`, `units`, `avgLoanAmount`, `loCount`; branches `volume`, `units`, `avgLoanAmount`, `purchasePct`, `refinancePct`, `loCount`. Numbers (null when the window has no data); an entitlement that allows a field allows every window of it.",
65607
+ "description": "Optional output column projection, named by the response DTO fields (the same camelCase fields the list endpoint returns, e.g. `city`, `interestRate`). Intersected with the entitlement scope's allowedFields and the entity's full column set. If empty after intersection, falls back to all columns. It also SELECTS the opt-in columns, which are not part of the list DTO and are never delivered unless named here: `communityLending` (properties, originators, companies, branches) — the Community Lending neighborhood profile, identical to the block on the entity's detail endpoint; `parties` (properties) — the mortgage parties attributed to the parcel, by attribution scope; `marketCount` / `countyCount` / `stateCount` / `zipCount` / `lenderCount` (originators) — the market-breadth rollups you can already filter on; and the computed `governmentPct` (originators: FHA + VA percent of loans, 0–100), `branchCount` (companies: NMLS branch count) and `managerName` / `managerNmlsId` (branches: the first branch manager). Agents also offer `email2` / `phone2` (the best-ranked email / phone distinct from `email` / `phone`, admitted by the `email` / `phone` entitlement field), `bestEmail` / `bestEmail2` and `bestPhone` / `bestPhone2` (the best and runner-up contact over every email / phone on the record, `email` / `phone` included — the pair the ModelMatch web app's agent export shows; same entitlement fields), `officePhone` (admitted by `phone`), `activeListings` (current active listings; null when unknown), and the profile-link columns `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok`, `zillow`, `otherLinks` (a `; `-joined list of profile URLs on no known platform) — all admitted by the `links` entitlement field. In `csv` and `parquet` the two block columns are JSON-encoded cells; in `json` and `ndjson` they are nested objects. Windowed production (originators, agents, companies, branches): name `<field>_<n>mo` for n in 3, 6, 12, 14, 18, 24 to get a production field for that trailing window regardless of `period` — e.g. `volume_3mo`, `units_6mo`, `purchaseVolume_24mo`. Available for originators `volume`, `units`, `avgLoanAmount`, `purchaseVolume`, `purchaseUnits`, `refinanceVolume`, `refinanceUnits`, `conventionalPct`, `fhaPct`, `vaPct`; agents `volume`, `units`, `avgSoldPrice`, `buyerVolume`, `buyerUnits`, `sellerVolume`, `sellerUnits`, `totalOriginatorsWorkedWith`, `totalCompaniesWorkedWith`, `totalLendersWorkedWith`; companies `volume`, `units`, `avgLoanAmount`, `loCount`; branches `volume`, `units`, `avgLoanAmount`, `purchasePct`, `refinancePct`, `loCount`. Numbers (null when the window has no data); an entitlement that allows a field allows every window of it.",
64829
65608
  "items": {
64830
65609
  "minLength": 1,
64831
65610
  "type": "string"
@@ -68487,7 +69266,7 @@
68487
69266
  "$ref": "#/components/schemas/BulkDeliveryDestination"
68488
69267
  },
68489
69268
  "fields": {
68490
- "description": "Optional output column projection, named by the response DTO fields (the same camelCase fields the list endpoint returns, e.g. `city`, `interestRate`). Intersected with the entitlement scope's allowedFields and the entity's full column set. If empty after intersection, falls back to all columns. It also SELECTS the opt-in columns, which are not part of the list DTO and are never delivered unless named here: `communityLending` (properties, originators, companies, branches) — the Community Lending neighborhood profile, identical to the block on the entity's detail endpoint; `parties` (properties) — the mortgage parties attributed to the parcel, by attribution scope; `marketCount` / `countyCount` / `stateCount` / `zipCount` / `lenderCount` (originators) — the market-breadth rollups you can already filter on; and the computed `governmentPct` (originators: FHA + VA percent of loans, 0–100), `branchCount` (companies: NMLS branch count) and `managerName` / `managerNmlsId` (branches: the first branch manager). Agents also offer `email2` / `phone2` (the best-ranked email / phone distinct from `email` / `phone`, admitted by the `email` / `phone` entitlement field), `officePhone` (admitted by `phone`), `activeListings` (current active listings; null when unknown), and the profile-link columns `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok`, `zillow`, `otherLinks` (a `; `-joined list of profile URLs on no known platform) — all admitted by the `links` entitlement field. In `csv` and `parquet` the two block columns are JSON-encoded cells; in `json` and `ndjson` they are nested objects. Windowed production (originators, agents, companies, branches): name `<field>_<n>mo` for n in 3, 6, 12, 14, 18, 24 to get a production field for that trailing window regardless of `period` — e.g. `volume_3mo`, `units_6mo`, `purchaseVolume_24mo`. Available for originators `volume`, `units`, `avgLoanAmount`, `purchaseVolume`, `purchaseUnits`, `refinanceVolume`, `refinanceUnits`, `conventionalPct`, `fhaPct`, `vaPct`; agents `volume`, `units`, `avgSoldPrice`, `buyerVolume`, `buyerUnits`, `sellerVolume`, `sellerUnits`, `totalOriginatorsWorkedWith`, `totalCompaniesWorkedWith`, `totalLendersWorkedWith`; companies `volume`, `units`, `avgLoanAmount`, `loCount`; branches `volume`, `units`, `avgLoanAmount`, `purchasePct`, `refinancePct`, `loCount`. Numbers (null when the window has no data); an entitlement that allows a field allows every window of it.",
69269
+ "description": "Optional output column projection, named by the response DTO fields (the same camelCase fields the list endpoint returns, e.g. `city`, `interestRate`). Intersected with the entitlement scope's allowedFields and the entity's full column set. If empty after intersection, falls back to all columns. It also SELECTS the opt-in columns, which are not part of the list DTO and are never delivered unless named here: `communityLending` (properties, originators, companies, branches) — the Community Lending neighborhood profile, identical to the block on the entity's detail endpoint; `parties` (properties) — the mortgage parties attributed to the parcel, by attribution scope; `marketCount` / `countyCount` / `stateCount` / `zipCount` / `lenderCount` (originators) — the market-breadth rollups you can already filter on; and the computed `governmentPct` (originators: FHA + VA percent of loans, 0–100), `branchCount` (companies: NMLS branch count) and `managerName` / `managerNmlsId` (branches: the first branch manager). Agents also offer `email2` / `phone2` (the best-ranked email / phone distinct from `email` / `phone`, admitted by the `email` / `phone` entitlement field), `bestEmail` / `bestEmail2` and `bestPhone` / `bestPhone2` (the best and runner-up contact over every email / phone on the record, `email` / `phone` included — the pair the ModelMatch web app's agent export shows; same entitlement fields), `officePhone` (admitted by `phone`), `activeListings` (current active listings; null when unknown), and the profile-link columns `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok`, `zillow`, `otherLinks` (a `; `-joined list of profile URLs on no known platform) — all admitted by the `links` entitlement field. In `csv` and `parquet` the two block columns are JSON-encoded cells; in `json` and `ndjson` they are nested objects. Windowed production (originators, agents, companies, branches): name `<field>_<n>mo` for n in 3, 6, 12, 14, 18, 24 to get a production field for that trailing window regardless of `period` — e.g. `volume_3mo`, `units_6mo`, `purchaseVolume_24mo`. Available for originators `volume`, `units`, `avgLoanAmount`, `purchaseVolume`, `purchaseUnits`, `refinanceVolume`, `refinanceUnits`, `conventionalPct`, `fhaPct`, `vaPct`; agents `volume`, `units`, `avgSoldPrice`, `buyerVolume`, `buyerUnits`, `sellerVolume`, `sellerUnits`, `totalOriginatorsWorkedWith`, `totalCompaniesWorkedWith`, `totalLendersWorkedWith`; companies `volume`, `units`, `avgLoanAmount`, `loCount`; branches `volume`, `units`, `avgLoanAmount`, `purchasePct`, `refinancePct`, `loCount`. Numbers (null when the window has no data); an entitlement that allows a field allows every window of it.",
68491
69270
  "items": {
68492
69271
  "minLength": 1,
68493
69272
  "type": "string"
@@ -69029,7 +69808,7 @@
69029
69808
  },
69030
69809
  "/v1/originators/{nmlsId}/breakdowns/agents": {
69031
69810
  "post": {
69032
- "description": "Ranks the real-estate agents on this LO's loans, by volume — the buyer's agent by default, the listing agent with `side: \"listing\"`. Buckets whose name is an MLS placeholder for \"no agent recorded\" (`non member`, `non listed agent`, and ~140 board-specific spellings) are excluded rather than ranked as agents — they are not people. `id` is the agent id most often recorded under the name on these loans (pass it to `GET /v1/agents/{id}`); absent when none is recorded. Percentages are shares of the LO's whole loan population, so they do not sum to 100 across the page.",
69811
+ "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.",
69033
69812
  "operationId": "originatorAgents",
69034
69813
  "parameters": [
69035
69814
  {
@@ -70588,7 +71367,7 @@
70588
71367
  "$ref": "#/components/schemas/BulkDeliveryDestination"
70589
71368
  },
70590
71369
  "fields": {
70591
- "description": "Optional output column projection, named by the response DTO fields (the same camelCase fields the list endpoint returns, e.g. `city`, `interestRate`). Intersected with the entitlement scope's allowedFields and the entity's full column set. If empty after intersection, falls back to all columns. It also SELECTS the opt-in columns, which are not part of the list DTO and are never delivered unless named here: `communityLending` (properties, originators, companies, branches) — the Community Lending neighborhood profile, identical to the block on the entity's detail endpoint; `parties` (properties) — the mortgage parties attributed to the parcel, by attribution scope; `marketCount` / `countyCount` / `stateCount` / `zipCount` / `lenderCount` (originators) — the market-breadth rollups you can already filter on; and the computed `governmentPct` (originators: FHA + VA percent of loans, 0–100), `branchCount` (companies: NMLS branch count) and `managerName` / `managerNmlsId` (branches: the first branch manager). Agents also offer `email2` / `phone2` (the best-ranked email / phone distinct from `email` / `phone`, admitted by the `email` / `phone` entitlement field), `officePhone` (admitted by `phone`), `activeListings` (current active listings; null when unknown), and the profile-link columns `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok`, `zillow`, `otherLinks` (a `; `-joined list of profile URLs on no known platform) — all admitted by the `links` entitlement field. In `csv` and `parquet` the two block columns are JSON-encoded cells; in `json` and `ndjson` they are nested objects. Windowed production (originators, agents, companies, branches): name `<field>_<n>mo` for n in 3, 6, 12, 14, 18, 24 to get a production field for that trailing window regardless of `period` — e.g. `volume_3mo`, `units_6mo`, `purchaseVolume_24mo`. Available for originators `volume`, `units`, `avgLoanAmount`, `purchaseVolume`, `purchaseUnits`, `refinanceVolume`, `refinanceUnits`, `conventionalPct`, `fhaPct`, `vaPct`; agents `volume`, `units`, `avgSoldPrice`, `buyerVolume`, `buyerUnits`, `sellerVolume`, `sellerUnits`, `totalOriginatorsWorkedWith`, `totalCompaniesWorkedWith`, `totalLendersWorkedWith`; companies `volume`, `units`, `avgLoanAmount`, `loCount`; branches `volume`, `units`, `avgLoanAmount`, `purchasePct`, `refinancePct`, `loCount`. Numbers (null when the window has no data); an entitlement that allows a field allows every window of it.",
71370
+ "description": "Optional output column projection, named by the response DTO fields (the same camelCase fields the list endpoint returns, e.g. `city`, `interestRate`). Intersected with the entitlement scope's allowedFields and the entity's full column set. If empty after intersection, falls back to all columns. It also SELECTS the opt-in columns, which are not part of the list DTO and are never delivered unless named here: `communityLending` (properties, originators, companies, branches) — the Community Lending neighborhood profile, identical to the block on the entity's detail endpoint; `parties` (properties) — the mortgage parties attributed to the parcel, by attribution scope; `marketCount` / `countyCount` / `stateCount` / `zipCount` / `lenderCount` (originators) — the market-breadth rollups you can already filter on; and the computed `governmentPct` (originators: FHA + VA percent of loans, 0–100), `branchCount` (companies: NMLS branch count) and `managerName` / `managerNmlsId` (branches: the first branch manager). Agents also offer `email2` / `phone2` (the best-ranked email / phone distinct from `email` / `phone`, admitted by the `email` / `phone` entitlement field), `bestEmail` / `bestEmail2` and `bestPhone` / `bestPhone2` (the best and runner-up contact over every email / phone on the record, `email` / `phone` included — the pair the ModelMatch web app's agent export shows; same entitlement fields), `officePhone` (admitted by `phone`), `activeListings` (current active listings; null when unknown), and the profile-link columns `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok`, `zillow`, `otherLinks` (a `; `-joined list of profile URLs on no known platform) — all admitted by the `links` entitlement field. In `csv` and `parquet` the two block columns are JSON-encoded cells; in `json` and `ndjson` they are nested objects. Windowed production (originators, agents, companies, branches): name `<field>_<n>mo` for n in 3, 6, 12, 14, 18, 24 to get a production field for that trailing window regardless of `period` — e.g. `volume_3mo`, `units_6mo`, `purchaseVolume_24mo`. Available for originators `volume`, `units`, `avgLoanAmount`, `purchaseVolume`, `purchaseUnits`, `refinanceVolume`, `refinanceUnits`, `conventionalPct`, `fhaPct`, `vaPct`; agents `volume`, `units`, `avgSoldPrice`, `buyerVolume`, `buyerUnits`, `sellerVolume`, `sellerUnits`, `totalOriginatorsWorkedWith`, `totalCompaniesWorkedWith`, `totalLendersWorkedWith`; companies `volume`, `units`, `avgLoanAmount`, `loCount`; branches `volume`, `units`, `avgLoanAmount`, `purchasePct`, `refinancePct`, `loCount`. Numbers (null when the window has no data); an entitlement that allows a field allows every window of it.",
70592
71371
  "items": {
70593
71372
  "minLength": 1,
70594
71373
  "type": "string"