Model MatchHelp

Market

Did the move pay off? Production before vs after moving

getapi.modelmatch.com/v1/market/movement/cohort-payoff

For loan officers who moved in the window (default last 24 months), annualized production at the previous employer vs the new one, bucketed by pre-move tier (Low <25, Mid 25–99, High 100+ units/yr). Each side is annualized over the months actually spent there inside a trailing 24-month production window; movers with fewer than windowMonths months on either side are excluded. A move is dated by the loan officer's FIRST record at the new company; a loan officer licensed in several states counts once per company. Location filters use the loan officer's CURRENT NMLS location. Results refresh weekly. A response not ready within 25 s answers 202 (MovementComputing): repeat the same request after retryAfterMs.

Authorization

x-api-keystringrequired

API key or OAuth token. See Authentication.

Query parameters

dateRangestring

Reporting window. last_N_months = the N most recent COMPLETED calendar months (the current month is excluded); year_to_date = Jan 1 through the end of last month; YYYY (or fy_YYYY) = that calendar year; all_time. Default last_12_months.

statestring

Two-letter state. Matches the loan officer's CURRENT NMLS location, not where they were when they moved.

statesstring

Comma-separated two-letter states (e.g. a region). ORed; combined with state when both are sent.

citystring

Exact city name of the loan officer's current NMLS location. Pair with state.

companyCategorystring

Comma-separated company categories (BANK, CU, OTHER) applied to the company whose roster changed — the destination for arrivals, the company left for departures.

windowMonthsenum

Minimum months a mover must have on EACH side of the move inside the 24-month production window (default 3).

Options:3612

Responses

200objectOK
Show attributes
caveatsobjectrequired
Show child attributes
floorMonthsnumberrequired
totalMoversAnalyzednumberrequired
totalMoversExcludednumberrequired
totalMoversInRangenumberrequired
truncatedbooleanrequired

Always false: every mover in the window is analyzed. Kept for compatibility.

tiersobject[]required
Show child attributes
deltaobjectrequired
Show child attributes
unitsChangePctnumberrequired
volumeChangePctnumberrequired
moverCountnumberrequired
postMoveobjectrequired
Show child attributes
meanUnitsnumberrequired
meanVolumenumberrequired
medianUnitsnumberrequired
medianVolumenumberrequired
preMoveobjectrequired
Show child attributes
meanUnitsnumberrequired
meanVolumenumberrequired
medianUnitsnumberrequired
medianVolumenumberrequired
tierKeyenumrequired
Options:lowmidhigh
tierLabelstringrequired
windowobjectrequired

The resolved reporting window (inclusive dates).

Show child attributes
endDatestringrequired
monthsnumberrequired
startDatestringrequired
202objectStill computing — poll the same request after `retryAfterMs`. See `MovementComputing`.
Show attributes
retryAfterMsintegerrequired

Suggested wait before repeating the SAME request (also sent as Retry-After, in seconds).

statusenumrequired
Options:computing
400objectValidation error
401objectUnauthorized
403objectForbidden (authenticated, but missing required context — e.g. no active organization)
404objectNot found
413objectResponse payload too large — detail endpoint capped to fit Lambda response limits
503objectSearch timed out or the cluster is overloaded — retry after `Retry-After` seconds.