@model-match/api 3.48.0 → 3.49.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/RELEASE_NOTES.md +4 -0
- package/dist/{index-cCkX3-4W.d.mts → index-6nE5Y3ti.d.mts} +268 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/slim/index.d.mts +8 -2
- package/dist/slim/index.mjs +18 -2
- package/dist/{src-CCp2TVpk.mjs → src-CvwNdqc1.mjs} +18 -0
- package/openapi.json +772 -1
- package/package.json +1 -1
package/openapi.json
CHANGED
|
@@ -15146,6 +15146,668 @@
|
|
|
15146
15146
|
},
|
|
15147
15147
|
"type": "object"
|
|
15148
15148
|
},
|
|
15149
|
+
"CompanyRetentionSnapshot": {
|
|
15150
|
+
"properties": {
|
|
15151
|
+
"book": {
|
|
15152
|
+
"description": "Rows the computation read (sizing / provenance).",
|
|
15153
|
+
"properties": {
|
|
15154
|
+
"laterLoans": {
|
|
15155
|
+
"type": "number"
|
|
15156
|
+
},
|
|
15157
|
+
"ownLoans": {
|
|
15158
|
+
"type": "number"
|
|
15159
|
+
},
|
|
15160
|
+
"parcels": {
|
|
15161
|
+
"type": "number"
|
|
15162
|
+
},
|
|
15163
|
+
"sales": {
|
|
15164
|
+
"type": "number"
|
|
15165
|
+
}
|
|
15166
|
+
},
|
|
15167
|
+
"required": [
|
|
15168
|
+
"ownLoans",
|
|
15169
|
+
"parcels",
|
|
15170
|
+
"laterLoans",
|
|
15171
|
+
"sales"
|
|
15172
|
+
],
|
|
15173
|
+
"type": "object"
|
|
15174
|
+
},
|
|
15175
|
+
"capturingCompanies": {
|
|
15176
|
+
"description": "Top 10 companies that captured lost borrowers, by volume.",
|
|
15177
|
+
"items": {
|
|
15178
|
+
"properties": {
|
|
15179
|
+
"count": {
|
|
15180
|
+
"type": "number"
|
|
15181
|
+
},
|
|
15182
|
+
"lane": {
|
|
15183
|
+
"enum": [
|
|
15184
|
+
"own_company",
|
|
15185
|
+
"servicer",
|
|
15186
|
+
"competitor"
|
|
15187
|
+
],
|
|
15188
|
+
"type": "string"
|
|
15189
|
+
},
|
|
15190
|
+
"name": {
|
|
15191
|
+
"type": "string"
|
|
15192
|
+
},
|
|
15193
|
+
"nmlsId": {
|
|
15194
|
+
"type": "string"
|
|
15195
|
+
},
|
|
15196
|
+
"volume": {
|
|
15197
|
+
"type": "number"
|
|
15198
|
+
}
|
|
15199
|
+
},
|
|
15200
|
+
"required": [
|
|
15201
|
+
"nmlsId",
|
|
15202
|
+
"name",
|
|
15203
|
+
"count",
|
|
15204
|
+
"volume",
|
|
15205
|
+
"lane"
|
|
15206
|
+
],
|
|
15207
|
+
"type": "object"
|
|
15208
|
+
},
|
|
15209
|
+
"type": "array"
|
|
15210
|
+
},
|
|
15211
|
+
"capturingOriginators": {
|
|
15212
|
+
"description": "Top 10 LOs that captured lost borrowers, by volume.",
|
|
15213
|
+
"items": {
|
|
15214
|
+
"properties": {
|
|
15215
|
+
"companyName": {
|
|
15216
|
+
"type": "string"
|
|
15217
|
+
},
|
|
15218
|
+
"count": {
|
|
15219
|
+
"type": "number"
|
|
15220
|
+
},
|
|
15221
|
+
"name": {
|
|
15222
|
+
"type": "string"
|
|
15223
|
+
},
|
|
15224
|
+
"nmlsId": {
|
|
15225
|
+
"type": "string"
|
|
15226
|
+
},
|
|
15227
|
+
"volume": {
|
|
15228
|
+
"type": "number"
|
|
15229
|
+
}
|
|
15230
|
+
},
|
|
15231
|
+
"required": [
|
|
15232
|
+
"nmlsId",
|
|
15233
|
+
"name",
|
|
15234
|
+
"companyName",
|
|
15235
|
+
"count",
|
|
15236
|
+
"volume"
|
|
15237
|
+
],
|
|
15238
|
+
"type": "object"
|
|
15239
|
+
},
|
|
15240
|
+
"type": "array"
|
|
15241
|
+
},
|
|
15242
|
+
"capturingTotals": {
|
|
15243
|
+
"properties": {
|
|
15244
|
+
"companies": {
|
|
15245
|
+
"properties": {
|
|
15246
|
+
"distinct": {
|
|
15247
|
+
"type": "number"
|
|
15248
|
+
},
|
|
15249
|
+
"loans": {
|
|
15250
|
+
"type": "number"
|
|
15251
|
+
},
|
|
15252
|
+
"volume": {
|
|
15253
|
+
"type": "number"
|
|
15254
|
+
}
|
|
15255
|
+
},
|
|
15256
|
+
"required": [
|
|
15257
|
+
"distinct",
|
|
15258
|
+
"loans",
|
|
15259
|
+
"volume"
|
|
15260
|
+
],
|
|
15261
|
+
"type": "object"
|
|
15262
|
+
},
|
|
15263
|
+
"originators": {
|
|
15264
|
+
"properties": {
|
|
15265
|
+
"distinct": {
|
|
15266
|
+
"type": "number"
|
|
15267
|
+
},
|
|
15268
|
+
"loans": {
|
|
15269
|
+
"type": "number"
|
|
15270
|
+
},
|
|
15271
|
+
"unattributedLoans": {
|
|
15272
|
+
"type": "number"
|
|
15273
|
+
},
|
|
15274
|
+
"volume": {
|
|
15275
|
+
"type": "number"
|
|
15276
|
+
}
|
|
15277
|
+
},
|
|
15278
|
+
"required": [
|
|
15279
|
+
"distinct",
|
|
15280
|
+
"loans",
|
|
15281
|
+
"volume",
|
|
15282
|
+
"unattributedLoans"
|
|
15283
|
+
],
|
|
15284
|
+
"type": "object"
|
|
15285
|
+
}
|
|
15286
|
+
},
|
|
15287
|
+
"required": [
|
|
15288
|
+
"companies",
|
|
15289
|
+
"originators"
|
|
15290
|
+
],
|
|
15291
|
+
"type": "object"
|
|
15292
|
+
},
|
|
15293
|
+
"churnTrend": {
|
|
15294
|
+
"items": {
|
|
15295
|
+
"properties": {
|
|
15296
|
+
"churned": {
|
|
15297
|
+
"type": "number"
|
|
15298
|
+
},
|
|
15299
|
+
"kept": {
|
|
15300
|
+
"type": "number"
|
|
15301
|
+
},
|
|
15302
|
+
"month": {
|
|
15303
|
+
"type": "string"
|
|
15304
|
+
},
|
|
15305
|
+
"retained": {
|
|
15306
|
+
"type": "number"
|
|
15307
|
+
},
|
|
15308
|
+
"secondPositions": {
|
|
15309
|
+
"type": "number"
|
|
15310
|
+
}
|
|
15311
|
+
},
|
|
15312
|
+
"required": [
|
|
15313
|
+
"month",
|
|
15314
|
+
"churned",
|
|
15315
|
+
"retained",
|
|
15316
|
+
"secondPositions",
|
|
15317
|
+
"kept"
|
|
15318
|
+
],
|
|
15319
|
+
"type": "object"
|
|
15320
|
+
},
|
|
15321
|
+
"type": "array"
|
|
15322
|
+
},
|
|
15323
|
+
"companyName": {
|
|
15324
|
+
"nullable": true,
|
|
15325
|
+
"type": "string"
|
|
15326
|
+
},
|
|
15327
|
+
"companyNmlsId": {
|
|
15328
|
+
"type": "string"
|
|
15329
|
+
},
|
|
15330
|
+
"computedAt": {
|
|
15331
|
+
"description": "When the weekly batch computed this snapshot (ISO-8601).",
|
|
15332
|
+
"type": "string"
|
|
15333
|
+
},
|
|
15334
|
+
"lanes": {
|
|
15335
|
+
"description": "Where lost refinances went: the borrower's funding lender (`servicer`) or another company (`competitor`). `own_company` is always 0 at company level (those are kept).",
|
|
15336
|
+
"properties": {
|
|
15337
|
+
"competitor": {
|
|
15338
|
+
"properties": {
|
|
15339
|
+
"count": {
|
|
15340
|
+
"type": "number"
|
|
15341
|
+
},
|
|
15342
|
+
"volume": {
|
|
15343
|
+
"type": "number"
|
|
15344
|
+
}
|
|
15345
|
+
},
|
|
15346
|
+
"required": [
|
|
15347
|
+
"count",
|
|
15348
|
+
"volume"
|
|
15349
|
+
],
|
|
15350
|
+
"type": "object"
|
|
15351
|
+
},
|
|
15352
|
+
"own_company": {
|
|
15353
|
+
"properties": {
|
|
15354
|
+
"count": {
|
|
15355
|
+
"type": "number"
|
|
15356
|
+
},
|
|
15357
|
+
"volume": {
|
|
15358
|
+
"type": "number"
|
|
15359
|
+
}
|
|
15360
|
+
},
|
|
15361
|
+
"required": [
|
|
15362
|
+
"count",
|
|
15363
|
+
"volume"
|
|
15364
|
+
],
|
|
15365
|
+
"type": "object"
|
|
15366
|
+
},
|
|
15367
|
+
"servicer": {
|
|
15368
|
+
"properties": {
|
|
15369
|
+
"count": {
|
|
15370
|
+
"type": "number"
|
|
15371
|
+
},
|
|
15372
|
+
"volume": {
|
|
15373
|
+
"type": "number"
|
|
15374
|
+
}
|
|
15375
|
+
},
|
|
15376
|
+
"required": [
|
|
15377
|
+
"count",
|
|
15378
|
+
"volume"
|
|
15379
|
+
],
|
|
15380
|
+
"type": "object"
|
|
15381
|
+
}
|
|
15382
|
+
},
|
|
15383
|
+
"required": [
|
|
15384
|
+
"own_company",
|
|
15385
|
+
"servicer",
|
|
15386
|
+
"competitor"
|
|
15387
|
+
],
|
|
15388
|
+
"type": "object"
|
|
15389
|
+
},
|
|
15390
|
+
"leakiestOriginators": {
|
|
15391
|
+
"description": "The company's own LOs ranked by borrowers lost to other companies (top 10; only LOs with at least 10 refi events in the window).",
|
|
15392
|
+
"items": {
|
|
15393
|
+
"properties": {
|
|
15394
|
+
"churnedCount": {
|
|
15395
|
+
"description": "Their borrowers who refinanced at another company.",
|
|
15396
|
+
"type": "number"
|
|
15397
|
+
},
|
|
15398
|
+
"churnedVolume": {
|
|
15399
|
+
"type": "number"
|
|
15400
|
+
},
|
|
15401
|
+
"keptCount": {
|
|
15402
|
+
"description": "Their borrowers the company refinanced again (any LO).",
|
|
15403
|
+
"type": "number"
|
|
15404
|
+
},
|
|
15405
|
+
"name": {
|
|
15406
|
+
"type": "string"
|
|
15407
|
+
},
|
|
15408
|
+
"nmlsId": {
|
|
15409
|
+
"type": "string"
|
|
15410
|
+
},
|
|
15411
|
+
"refiRetentionRate": {
|
|
15412
|
+
"nullable": true,
|
|
15413
|
+
"type": "number"
|
|
15414
|
+
},
|
|
15415
|
+
"verdict": {
|
|
15416
|
+
"description": "On `refiRetentionRate` (kept ÷ (kept + churned) refi events): `quiet` under 10 events, `holding` ≥ 60%, `leaking` 35–60%, `bleeding` < 35% — the LO tab's thresholds.",
|
|
15417
|
+
"enum": [
|
|
15418
|
+
"holding",
|
|
15419
|
+
"leaking",
|
|
15420
|
+
"bleeding",
|
|
15421
|
+
"quiet"
|
|
15422
|
+
],
|
|
15423
|
+
"type": "string"
|
|
15424
|
+
}
|
|
15425
|
+
},
|
|
15426
|
+
"required": [
|
|
15427
|
+
"nmlsId",
|
|
15428
|
+
"name",
|
|
15429
|
+
"churnedCount",
|
|
15430
|
+
"churnedVolume",
|
|
15431
|
+
"keptCount",
|
|
15432
|
+
"refiRetentionRate",
|
|
15433
|
+
"verdict"
|
|
15434
|
+
],
|
|
15435
|
+
"type": "object"
|
|
15436
|
+
},
|
|
15437
|
+
"type": "array"
|
|
15438
|
+
},
|
|
15439
|
+
"period": {
|
|
15440
|
+
"properties": {
|
|
15441
|
+
"end": {
|
|
15442
|
+
"description": "Last day (UTC, inclusive).",
|
|
15443
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
|
|
15444
|
+
"type": "string"
|
|
15445
|
+
},
|
|
15446
|
+
"start": {
|
|
15447
|
+
"description": "First day (UTC).",
|
|
15448
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
|
|
15449
|
+
"type": "string"
|
|
15450
|
+
}
|
|
15451
|
+
},
|
|
15452
|
+
"required": [
|
|
15453
|
+
"start",
|
|
15454
|
+
"end"
|
|
15455
|
+
],
|
|
15456
|
+
"type": "object"
|
|
15457
|
+
},
|
|
15458
|
+
"previous": {
|
|
15459
|
+
"description": "The preceding period of equal length (for deltas); null for `allTime`.",
|
|
15460
|
+
"nullable": true,
|
|
15461
|
+
"properties": {
|
|
15462
|
+
"period": {
|
|
15463
|
+
"properties": {
|
|
15464
|
+
"end": {
|
|
15465
|
+
"description": "Last day (UTC, inclusive).",
|
|
15466
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
|
|
15467
|
+
"type": "string"
|
|
15468
|
+
},
|
|
15469
|
+
"start": {
|
|
15470
|
+
"description": "First day (UTC).",
|
|
15471
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
|
|
15472
|
+
"type": "string"
|
|
15473
|
+
}
|
|
15474
|
+
},
|
|
15475
|
+
"required": [
|
|
15476
|
+
"start",
|
|
15477
|
+
"end"
|
|
15478
|
+
],
|
|
15479
|
+
"type": "object"
|
|
15480
|
+
},
|
|
15481
|
+
"summary": {
|
|
15482
|
+
"properties": {
|
|
15483
|
+
"churnRate": {
|
|
15484
|
+
"type": "number"
|
|
15485
|
+
},
|
|
15486
|
+
"churnedCount": {
|
|
15487
|
+
"type": "number"
|
|
15488
|
+
},
|
|
15489
|
+
"daysToRefiPairsUsed": {
|
|
15490
|
+
"type": "number"
|
|
15491
|
+
},
|
|
15492
|
+
"keptRefiCount": {
|
|
15493
|
+
"description": "Same-LO refinances of the LO's own borrowers in the period",
|
|
15494
|
+
"type": "number"
|
|
15495
|
+
},
|
|
15496
|
+
"keptRefiVolume": {
|
|
15497
|
+
"type": "number"
|
|
15498
|
+
},
|
|
15499
|
+
"keptSecondCount": {
|
|
15500
|
+
"type": "number"
|
|
15501
|
+
},
|
|
15502
|
+
"medianDaysToRefi": {
|
|
15503
|
+
"nullable": true,
|
|
15504
|
+
"type": "number"
|
|
15505
|
+
},
|
|
15506
|
+
"propertySoldCount": {
|
|
15507
|
+
"type": "number"
|
|
15508
|
+
},
|
|
15509
|
+
"refiRetentionRate": {
|
|
15510
|
+
"description": "kept ÷ (kept + churned) refi events; null with none",
|
|
15511
|
+
"nullable": true,
|
|
15512
|
+
"type": "number"
|
|
15513
|
+
},
|
|
15514
|
+
"retainedCount": {
|
|
15515
|
+
"type": "number"
|
|
15516
|
+
},
|
|
15517
|
+
"secondPositionCount": {
|
|
15518
|
+
"type": "number"
|
|
15519
|
+
},
|
|
15520
|
+
"secondPositionVolume": {
|
|
15521
|
+
"type": "number"
|
|
15522
|
+
},
|
|
15523
|
+
"totalBorrowers": {
|
|
15524
|
+
"type": "number"
|
|
15525
|
+
},
|
|
15526
|
+
"unattributedCount": {
|
|
15527
|
+
"type": "number"
|
|
15528
|
+
},
|
|
15529
|
+
"volumeLost": {
|
|
15530
|
+
"type": "number"
|
|
15531
|
+
},
|
|
15532
|
+
"volumeRetained": {
|
|
15533
|
+
"type": "number"
|
|
15534
|
+
}
|
|
15535
|
+
},
|
|
15536
|
+
"required": [
|
|
15537
|
+
"totalBorrowers",
|
|
15538
|
+
"churnedCount",
|
|
15539
|
+
"retainedCount",
|
|
15540
|
+
"propertySoldCount",
|
|
15541
|
+
"unattributedCount",
|
|
15542
|
+
"secondPositionCount",
|
|
15543
|
+
"secondPositionVolume",
|
|
15544
|
+
"keptRefiCount",
|
|
15545
|
+
"keptRefiVolume",
|
|
15546
|
+
"keptSecondCount",
|
|
15547
|
+
"refiRetentionRate",
|
|
15548
|
+
"churnRate",
|
|
15549
|
+
"volumeLost",
|
|
15550
|
+
"volumeRetained",
|
|
15551
|
+
"medianDaysToRefi",
|
|
15552
|
+
"daysToRefiPairsUsed"
|
|
15553
|
+
],
|
|
15554
|
+
"type": "object"
|
|
15555
|
+
},
|
|
15556
|
+
"verdict": {
|
|
15557
|
+
"description": "On `refiRetentionRate` (kept ÷ (kept + churned) refi events): `quiet` under 10 events, `holding` ≥ 60%, `leaking` 35–60%, `bleeding` < 35% — the LO tab's thresholds.",
|
|
15558
|
+
"enum": [
|
|
15559
|
+
"holding",
|
|
15560
|
+
"leaking",
|
|
15561
|
+
"bleeding",
|
|
15562
|
+
"quiet"
|
|
15563
|
+
],
|
|
15564
|
+
"type": "string"
|
|
15565
|
+
}
|
|
15566
|
+
},
|
|
15567
|
+
"required": [
|
|
15568
|
+
"period",
|
|
15569
|
+
"summary",
|
|
15570
|
+
"verdict"
|
|
15571
|
+
],
|
|
15572
|
+
"type": "object"
|
|
15573
|
+
},
|
|
15574
|
+
"schemaVersion": {
|
|
15575
|
+
"type": "integer"
|
|
15576
|
+
},
|
|
15577
|
+
"secondPositionLanes": {
|
|
15578
|
+
"properties": {
|
|
15579
|
+
"competitor": {
|
|
15580
|
+
"properties": {
|
|
15581
|
+
"count": {
|
|
15582
|
+
"type": "number"
|
|
15583
|
+
},
|
|
15584
|
+
"volume": {
|
|
15585
|
+
"type": "number"
|
|
15586
|
+
}
|
|
15587
|
+
},
|
|
15588
|
+
"required": [
|
|
15589
|
+
"count",
|
|
15590
|
+
"volume"
|
|
15591
|
+
],
|
|
15592
|
+
"type": "object"
|
|
15593
|
+
},
|
|
15594
|
+
"own_company": {
|
|
15595
|
+
"properties": {
|
|
15596
|
+
"count": {
|
|
15597
|
+
"type": "number"
|
|
15598
|
+
},
|
|
15599
|
+
"volume": {
|
|
15600
|
+
"type": "number"
|
|
15601
|
+
}
|
|
15602
|
+
},
|
|
15603
|
+
"required": [
|
|
15604
|
+
"count",
|
|
15605
|
+
"volume"
|
|
15606
|
+
],
|
|
15607
|
+
"type": "object"
|
|
15608
|
+
},
|
|
15609
|
+
"servicer": {
|
|
15610
|
+
"properties": {
|
|
15611
|
+
"count": {
|
|
15612
|
+
"type": "number"
|
|
15613
|
+
},
|
|
15614
|
+
"volume": {
|
|
15615
|
+
"type": "number"
|
|
15616
|
+
}
|
|
15617
|
+
},
|
|
15618
|
+
"required": [
|
|
15619
|
+
"count",
|
|
15620
|
+
"volume"
|
|
15621
|
+
],
|
|
15622
|
+
"type": "object"
|
|
15623
|
+
}
|
|
15624
|
+
},
|
|
15625
|
+
"required": [
|
|
15626
|
+
"own_company",
|
|
15627
|
+
"servicer",
|
|
15628
|
+
"competitor"
|
|
15629
|
+
],
|
|
15630
|
+
"type": "object"
|
|
15631
|
+
},
|
|
15632
|
+
"status": {
|
|
15633
|
+
"description": "`truncated`: a loan / sale scan hit its row cap, so counts cover the rows read. `timeout`: the book could not be read within the batch's per-company budget — every count is 0 and means 'not available', not 'none'.",
|
|
15634
|
+
"enum": [
|
|
15635
|
+
"ok",
|
|
15636
|
+
"timeout",
|
|
15637
|
+
"truncated"
|
|
15638
|
+
],
|
|
15639
|
+
"type": "string"
|
|
15640
|
+
},
|
|
15641
|
+
"summary": {
|
|
15642
|
+
"description": "Same fields as the LO report. At company level a refinance by ANY LO at the company is kept; only a refinance at another company is churned.",
|
|
15643
|
+
"properties": {
|
|
15644
|
+
"churnRate": {
|
|
15645
|
+
"type": "number"
|
|
15646
|
+
},
|
|
15647
|
+
"churnedCount": {
|
|
15648
|
+
"type": "number"
|
|
15649
|
+
},
|
|
15650
|
+
"daysToRefiPairsUsed": {
|
|
15651
|
+
"type": "number"
|
|
15652
|
+
},
|
|
15653
|
+
"keptRefiCount": {
|
|
15654
|
+
"description": "Same-LO refinances of the LO's own borrowers in the period",
|
|
15655
|
+
"type": "number"
|
|
15656
|
+
},
|
|
15657
|
+
"keptRefiVolume": {
|
|
15658
|
+
"type": "number"
|
|
15659
|
+
},
|
|
15660
|
+
"keptSecondCount": {
|
|
15661
|
+
"type": "number"
|
|
15662
|
+
},
|
|
15663
|
+
"medianDaysToRefi": {
|
|
15664
|
+
"nullable": true,
|
|
15665
|
+
"type": "number"
|
|
15666
|
+
},
|
|
15667
|
+
"propertySoldCount": {
|
|
15668
|
+
"type": "number"
|
|
15669
|
+
},
|
|
15670
|
+
"refiRetentionRate": {
|
|
15671
|
+
"description": "kept ÷ (kept + churned) refi events; null with none",
|
|
15672
|
+
"nullable": true,
|
|
15673
|
+
"type": "number"
|
|
15674
|
+
},
|
|
15675
|
+
"retainedCount": {
|
|
15676
|
+
"type": "number"
|
|
15677
|
+
},
|
|
15678
|
+
"secondPositionCount": {
|
|
15679
|
+
"type": "number"
|
|
15680
|
+
},
|
|
15681
|
+
"secondPositionVolume": {
|
|
15682
|
+
"type": "number"
|
|
15683
|
+
},
|
|
15684
|
+
"totalBorrowers": {
|
|
15685
|
+
"type": "number"
|
|
15686
|
+
},
|
|
15687
|
+
"unattributedCount": {
|
|
15688
|
+
"type": "number"
|
|
15689
|
+
},
|
|
15690
|
+
"volumeLost": {
|
|
15691
|
+
"type": "number"
|
|
15692
|
+
},
|
|
15693
|
+
"volumeRetained": {
|
|
15694
|
+
"type": "number"
|
|
15695
|
+
}
|
|
15696
|
+
},
|
|
15697
|
+
"required": [
|
|
15698
|
+
"totalBorrowers",
|
|
15699
|
+
"churnedCount",
|
|
15700
|
+
"retainedCount",
|
|
15701
|
+
"propertySoldCount",
|
|
15702
|
+
"unattributedCount",
|
|
15703
|
+
"secondPositionCount",
|
|
15704
|
+
"secondPositionVolume",
|
|
15705
|
+
"keptRefiCount",
|
|
15706
|
+
"keptRefiVolume",
|
|
15707
|
+
"keptSecondCount",
|
|
15708
|
+
"refiRetentionRate",
|
|
15709
|
+
"churnRate",
|
|
15710
|
+
"volumeLost",
|
|
15711
|
+
"volumeRetained",
|
|
15712
|
+
"medianDaysToRefi",
|
|
15713
|
+
"daysToRefiPairsUsed"
|
|
15714
|
+
],
|
|
15715
|
+
"type": "object"
|
|
15716
|
+
},
|
|
15717
|
+
"timing": {
|
|
15718
|
+
"properties": {
|
|
15719
|
+
"cashOutCount": {
|
|
15720
|
+
"type": "number"
|
|
15721
|
+
},
|
|
15722
|
+
"cashOutShare": {
|
|
15723
|
+
"nullable": true,
|
|
15724
|
+
"type": "number"
|
|
15725
|
+
},
|
|
15726
|
+
"loanTypeChangeCount": {
|
|
15727
|
+
"type": "number"
|
|
15728
|
+
},
|
|
15729
|
+
"medianMonths": {
|
|
15730
|
+
"nullable": true,
|
|
15731
|
+
"type": "number"
|
|
15732
|
+
},
|
|
15733
|
+
"monthsToExit": {
|
|
15734
|
+
"items": {
|
|
15735
|
+
"properties": {
|
|
15736
|
+
"bucket": {
|
|
15737
|
+
"type": "string"
|
|
15738
|
+
},
|
|
15739
|
+
"count": {
|
|
15740
|
+
"type": "number"
|
|
15741
|
+
}
|
|
15742
|
+
},
|
|
15743
|
+
"required": [
|
|
15744
|
+
"bucket",
|
|
15745
|
+
"count"
|
|
15746
|
+
],
|
|
15747
|
+
"type": "object"
|
|
15748
|
+
},
|
|
15749
|
+
"type": "array"
|
|
15750
|
+
},
|
|
15751
|
+
"rateDeltaMedian": {
|
|
15752
|
+
"nullable": true,
|
|
15753
|
+
"type": "number"
|
|
15754
|
+
},
|
|
15755
|
+
"rateDeltaPairs": {
|
|
15756
|
+
"type": "number"
|
|
15757
|
+
}
|
|
15758
|
+
},
|
|
15759
|
+
"required": [
|
|
15760
|
+
"monthsToExit",
|
|
15761
|
+
"medianMonths",
|
|
15762
|
+
"cashOutCount",
|
|
15763
|
+
"cashOutShare",
|
|
15764
|
+
"rateDeltaMedian",
|
|
15765
|
+
"rateDeltaPairs",
|
|
15766
|
+
"loanTypeChangeCount"
|
|
15767
|
+
],
|
|
15768
|
+
"type": "object"
|
|
15769
|
+
},
|
|
15770
|
+
"verdict": {
|
|
15771
|
+
"description": "On `refiRetentionRate` (kept ÷ (kept + churned) refi events): `quiet` under 10 events, `holding` ≥ 60%, `leaking` 35–60%, `bleeding` < 35% — the LO tab's thresholds.",
|
|
15772
|
+
"enum": [
|
|
15773
|
+
"holding",
|
|
15774
|
+
"leaking",
|
|
15775
|
+
"bleeding",
|
|
15776
|
+
"quiet"
|
|
15777
|
+
],
|
|
15778
|
+
"type": "string"
|
|
15779
|
+
},
|
|
15780
|
+
"window": {
|
|
15781
|
+
"enum": [
|
|
15782
|
+
"last12Months",
|
|
15783
|
+
"allTime"
|
|
15784
|
+
],
|
|
15785
|
+
"type": "string"
|
|
15786
|
+
}
|
|
15787
|
+
},
|
|
15788
|
+
"required": [
|
|
15789
|
+
"schemaVersion",
|
|
15790
|
+
"companyNmlsId",
|
|
15791
|
+
"companyName",
|
|
15792
|
+
"window",
|
|
15793
|
+
"period",
|
|
15794
|
+
"computedAt",
|
|
15795
|
+
"status",
|
|
15796
|
+
"summary",
|
|
15797
|
+
"verdict",
|
|
15798
|
+
"lanes",
|
|
15799
|
+
"secondPositionLanes",
|
|
15800
|
+
"timing",
|
|
15801
|
+
"churnTrend",
|
|
15802
|
+
"capturingCompanies",
|
|
15803
|
+
"capturingOriginators",
|
|
15804
|
+
"capturingTotals",
|
|
15805
|
+
"leakiestOriginators",
|
|
15806
|
+
"previous",
|
|
15807
|
+
"book"
|
|
15808
|
+
],
|
|
15809
|
+
"type": "object"
|
|
15810
|
+
},
|
|
15149
15811
|
"CompanyRoleScope": {
|
|
15150
15812
|
"description": "Which of a loan's party roles make it this company's loan. `loanCompany` (default): the company named on the loan document — one company per loan. `all`: the company appears in ANY role — loan-document company, the originating LO's employer at time of loan, the LO's organization, broker, or funding lender; a loan matching several roles counts once. `employer`: the company employed the originating LO when the loan closed. `broker`: the company brokered the loan. `lender`: the company funded the loan. `tpo`: third-party origination — the company is the loan company or lender but did NOT employ the originating LO (the `channel` dimension's `tpo` bucket as a population; `employer` is its `inHouse` counterpart). Use `all` for a broker shop's full production — its loans are often recorded under the funding lender's name, so `loanCompany` undercounts it.",
|
|
15151
15813
|
"enum": [
|
|
@@ -43265,7 +43927,7 @@
|
|
|
43265
43927
|
"info": {
|
|
43266
43928
|
"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.",
|
|
43267
43929
|
"title": "ModelMatch API",
|
|
43268
|
-
"version": "3.
|
|
43930
|
+
"version": "3.110.0"
|
|
43269
43931
|
},
|
|
43270
43932
|
"openapi": "3.1.0",
|
|
43271
43933
|
"paths": {
|
|
@@ -53922,6 +54584,115 @@
|
|
|
53922
54584
|
]
|
|
53923
54585
|
}
|
|
53924
54586
|
},
|
|
54587
|
+
"/v1/companies/{nmlsId}/retention": {
|
|
54588
|
+
"get": {
|
|
54589
|
+
"description": "How well a company keeps its borrowers when they refinance: kept (refinanced again by ANY LO at the company) vs lost to other companies, with the capturing companies and LOs, timing, the trend, a verdict, and the company's leakiest LOs. Precomputed weekly — `computedAt` says when. 404 means not computed (no loans since 2017, or not reached yet), never zero retention.",
|
|
54590
|
+
"operationId": "companyRetention",
|
|
54591
|
+
"parameters": [
|
|
54592
|
+
{
|
|
54593
|
+
"description": "Company NMLS ID",
|
|
54594
|
+
"in": "path",
|
|
54595
|
+
"name": "nmlsId",
|
|
54596
|
+
"required": true,
|
|
54597
|
+
"schema": {
|
|
54598
|
+
"description": "Company NMLS ID",
|
|
54599
|
+
"type": "string"
|
|
54600
|
+
}
|
|
54601
|
+
},
|
|
54602
|
+
{
|
|
54603
|
+
"description": "`last12Months` (the trailing 12 months to the computation date, with the 12 months before as `previous`) or `allTime` (2017-01-01 on). Default `last12Months`.",
|
|
54604
|
+
"in": "query",
|
|
54605
|
+
"name": "window",
|
|
54606
|
+
"required": false,
|
|
54607
|
+
"schema": {
|
|
54608
|
+
"default": "last12Months",
|
|
54609
|
+
"description": "`last12Months` (the trailing 12 months to the computation date, with the 12 months before as `previous`) or `allTime` (2017-01-01 on). Default `last12Months`.",
|
|
54610
|
+
"enum": [
|
|
54611
|
+
"last12Months",
|
|
54612
|
+
"allTime"
|
|
54613
|
+
],
|
|
54614
|
+
"type": "string"
|
|
54615
|
+
}
|
|
54616
|
+
}
|
|
54617
|
+
],
|
|
54618
|
+
"responses": {
|
|
54619
|
+
"200": {
|
|
54620
|
+
"content": {
|
|
54621
|
+
"application/json": {
|
|
54622
|
+
"schema": {
|
|
54623
|
+
"$ref": "#/components/schemas/CompanyRetentionSnapshot"
|
|
54624
|
+
}
|
|
54625
|
+
}
|
|
54626
|
+
},
|
|
54627
|
+
"description": "The stored snapshot"
|
|
54628
|
+
},
|
|
54629
|
+
"400": {
|
|
54630
|
+
"content": {
|
|
54631
|
+
"application/json": {
|
|
54632
|
+
"schema": {
|
|
54633
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
54634
|
+
}
|
|
54635
|
+
}
|
|
54636
|
+
},
|
|
54637
|
+
"description": "Validation error"
|
|
54638
|
+
},
|
|
54639
|
+
"401": {
|
|
54640
|
+
"content": {
|
|
54641
|
+
"application/json": {
|
|
54642
|
+
"schema": {
|
|
54643
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
54644
|
+
}
|
|
54645
|
+
}
|
|
54646
|
+
},
|
|
54647
|
+
"description": "Unauthorized"
|
|
54648
|
+
},
|
|
54649
|
+
"403": {
|
|
54650
|
+
"content": {
|
|
54651
|
+
"application/json": {
|
|
54652
|
+
"schema": {
|
|
54653
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
54654
|
+
}
|
|
54655
|
+
}
|
|
54656
|
+
},
|
|
54657
|
+
"description": "Forbidden (authenticated, but missing required context — e.g. no active organization)"
|
|
54658
|
+
},
|
|
54659
|
+
"404": {
|
|
54660
|
+
"content": {
|
|
54661
|
+
"application/json": {
|
|
54662
|
+
"schema": {
|
|
54663
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
54664
|
+
}
|
|
54665
|
+
}
|
|
54666
|
+
},
|
|
54667
|
+
"description": "Not found"
|
|
54668
|
+
},
|
|
54669
|
+
"413": {
|
|
54670
|
+
"content": {
|
|
54671
|
+
"application/json": {
|
|
54672
|
+
"schema": {
|
|
54673
|
+
"$ref": "#/components/schemas/PayloadTooLarge"
|
|
54674
|
+
}
|
|
54675
|
+
}
|
|
54676
|
+
},
|
|
54677
|
+
"description": "Response payload too large — detail endpoint capped to fit Lambda response limits"
|
|
54678
|
+
},
|
|
54679
|
+
"503": {
|
|
54680
|
+
"content": {
|
|
54681
|
+
"application/json": {
|
|
54682
|
+
"schema": {
|
|
54683
|
+
"$ref": "#/components/schemas/SearchUnavailable"
|
|
54684
|
+
}
|
|
54685
|
+
}
|
|
54686
|
+
},
|
|
54687
|
+
"description": "Search timed out or the cluster is overloaded — retry after `Retry-After` seconds."
|
|
54688
|
+
}
|
|
54689
|
+
},
|
|
54690
|
+
"summary": "Company borrower retention (weekly snapshot)",
|
|
54691
|
+
"tags": [
|
|
54692
|
+
"Companies"
|
|
54693
|
+
]
|
|
54694
|
+
}
|
|
54695
|
+
},
|
|
53925
54696
|
"/v1/companies/{nmlsId}/sponsored-individuals": {
|
|
53926
54697
|
"post": {
|
|
53927
54698
|
"operationId": "companySponsoredIndividuals",
|