Companies
Analyze LO arrivals and departures for a company
Authorization
Path parameters
nmlsIdstringrequiredCompany NMLS ID
Body application/json
dateFromstringWindow start (ISO date, default 12 mo ago)
dateTostringWindow end (ISO date, default today)
directionenumdefault: "both"arrivalsdeparturesbothsizenumberdefault: 25Max example individuals per direction (0–500, default 25; a fractional value is rounded down). Affects ONLY the arrivals/departures row lists — every count and breakdown covers the full population regardless.
Responses
200objectMovement analysisShow attributesHide attributes
alreadyAtCompanynumberrequiredCounted in summary.arrivals but NOT a hire: already sponsored by this company before the window and merely added a state license.
arrivalSourcesobject[]requiredPrior employers of the fromOtherCompany group, by distinct individuals, over the FULL population. An attribution, not a partition: an individual who ended sponsorships at two companies inside the window is counted under both, so this may sum above fromOtherCompany. Complete unless arrivalSourcesTruncated is true.
Show child attributesHide child attributes
companyNamestringrequiredcompanyNmlsIdstring | nullrequiredcountnumberrequiredarrivalSourcesTruncatedbooleanrequiredtrue when more distinct employers matched than arrivalSources can hold (1000); the list is then the largest 1000 and no longer accounts for all of fromOtherCompany. false means the list is complete. The scalar counts are unaffected either way.
arrivalsobject[]requiredShow child attributesHide child attributes
movementKindenumrequiredWhich group this arrival falls in — the row-level twin of fromOtherCompany / newToIndustry / alreadyAtCompany. from_other_company: moved here from a different employer (named in previousCompany). new_to_industry: no prior sponsorship at any company. already_at_company: already sponsored here before the window and merely added a state license — not a move.
from_other_companynew_to_industryalready_at_companynamestringrequirednmlsIdstringrequiredpreviousCompanystring | nullrequiredpreviousCompanyNmlsIdstring | nullrequiredstartDatestringrequiredWhen this individual actually joined — the earliest sponsorship start at this company, not the license row that matched the window.
departureDestsobject[]requiredOnward employers of the toOtherCompany group, by distinct individuals, over the FULL population. Same attribution caveat as arrivalSources. Complete unless departureDestsTruncated is true.
Show child attributesHide child attributes
companyNamestringrequiredcompanyNmlsIdstring | nullrequiredcountnumberrequireddepartureDestsTruncatedbooleanrequiredtrue when more distinct employers matched than departureDests can hold (1000); the list is then the largest 1000 and no longer accounts for all of toOtherCompany. false means the list is complete. The scalar counts are unaffected either way.
departuresobject[]requiredShow child attributesHide child attributes
endDatestringrequiredmovementKindenumrequiredWhich group this departure falls in — the row-level twin of toOtherCompany / leftIndustry / stillAtCompany. to_other_company: moved on to a different employer (named in nextCompany). left_industry: holds no open sponsorship at any company afterwards. still_at_company: still sponsored here; a state license lapsed — not an exit.
to_other_companyleft_industrystill_at_companynamestringrequirednextCompanystring | nullrequirednextCompanyNmlsIdstring | nullrequirednmlsIdstringrequiredfromOtherCompanynumberrequiredArrivals who moved from a different employer. fromOtherCompany + newToIndustry + alreadyAtCompany equals summary.arrivals exactly.
leftIndustrynumberrequiredDepartures holding no open sponsorship at any company afterwards.
newToIndustrynumberrequiredArrivals with no prior sponsorship at any company — genuinely new to the industry.
stillAtCompanynumberrequiredCounted in summary.departures but NOT an exit: still holds an open sponsorship with this company; a state license lapsed.
summaryobjectrequiredShow child attributesHide child attributes
arrivalsnumberrequiredIndividuals whose sponsorship with this company began inside the window. Counts LICENSING EVENTS, not confirmed employer moves. A loan officer holds a separate sponsorship record for every state they are licensed in, so an existing team member who adds or lapses one state license registers here even though their employment did not change. The alreadyAtCompany / stillAtCompany fields report exactly how many of this total that is — subtract them for a move-only figure.
departuresnumberrequiredIndividuals whose sponsorship with this company ended inside the window. Counts LICENSING EVENTS, not confirmed employer moves. A loan officer holds a separate sponsorship record for every state they are licensed in, so an existing team member who adds or lapses one state license registers here even though their employment did not change. The alreadyAtCompany / stillAtCompany fields report exactly how many of this total that is — subtract them for a move-only figure.
netChangenumberrequiredtoOtherCompanynumberrequiredDepartures who moved to a different employer. toOtherCompany + leftIndustry + stillAtCompany equals summary.departures exactly.
400objectValidation error401objectUnauthorized403objectForbidden (authenticated, but missing required context — e.g. no active organization)404objectNot found413objectResponse payload too large — detail endpoint capped to fit Lambda response limits503objectSearch timed out or the cluster is overloaded — retry after `Retry-After` seconds.