Per-person licensing for the regulated people at your company. Loan officers, insurance adjusters, and any future regulated role, on the same endpoints.
How it is shaped
Start at GET /individuals to get an individual_id, then use it against the sub-resources. Every sub-resource takes the same ID in the same position, so a client only needs one path builder.
People are typed by vertical rather than split across separate routes. ?type=mlo gives loan officers, ?type=adjuster gives insurance adjusters, and omitting the filter returns everyone. Onboarding a new regulated role does not add endpoints or change response shapes.
Endpoints
GET/individualsList regulated individuals
Paginated list of the regulated people at your company. Omit type to list everyone regardless of vertical.
Parameter
Type
Description
type
string
Vertical filter, for example mlo or adjuster. Omit to return all individual types.
employment_status
string
One of active, inactive, terminated, pending.
page
integer
Page number, starting at 1. Defaults to 1.
limit
integer
Results per page. Defaults to 50, maximum 200.
GET/individuals/{id}/licensesGet a person’s licenses
Every state license held by one person. For loan officers this is the NMLS individual record per state. Other verticals come from their own source system, NIPR for adjusters.
GET/individuals/{id}/license-conditionsGet open conditions
Regulator conditions attached to a person, with the verbatim condition text and a short action_required title. Lifecycle runs open, in_progress, submitted, cleared.
GET/individuals/{id}/ce-statusGet continuing education status
One record per state license that has CE hours tracked, with required, completed and remaining hours plus the cycle deadline.
GET/individuals/{id}/attestationsGet attestations
Attestation state for a person, currently NMLS MU2 filing attestations, with the last completed timestamp and the next deadline.
GET/individuals/{id}/tasksGet assigned tasks
Work assigned to this person. Read assignment_status rather than status: it is the authoritative per-person value, where status is the parent task.
Requires the individuals capability on your key. Full response schemas are in the interactive reference.
Most integrations exist to answer one thing before letting work proceed: is this person licensed in this state right now?
// Can this loan officer originate in the subject state today?
const { data: licenses } = await payna(
`/individuals/${individualId}/licenses`
)
const licensed = licenses.some(
(l) => l.state === subjectState && l.status === 'active'
)
Individual licenses use a four value status: active, inactive, pending, not_licensed. Note this differs from the five value model on company licenses, and there is no status_detail object here. Detail lives in sub_status, for example temporary_authority.
The state field is a two-letter US state code, or US for federal and national registrations.
Sub-resources
Resource
What it tells you
licenses
State by state license status for the person. For loan officers this is the NMLS individual record; other verticals come from their own source system.
license-conditions
Open regulator conditions with verbatim text, a short action_required title, and a lifecycle of open, in_progress, submitted, cleared.
ce-status
Continuing education per state license: required, completed, and remaining hours plus the cycle deadline.
attestations
Attestation state, currently NMLS MU2 filing attestations, with last completed and next due.
tasks
Work assigned to the person, each with a deep link into the Payna portal.
Two fields worth reading carefully
assignment_status, not status
On tasks, status belongs to the parent task and assignment_status belongs to this person. When one task fans out to several people, the parent stays open until everyone is done, so the parent status will not tell you whether this person has finished. Read assignment_status, which is either open or completed.
remaining_hours can be null
On continuing education, remaining_hours is computed as required minus completed, floored at zero. It is null when either input is unknown, which is not the same as zero. Treating null as done will under-report a compliance gap.
Privacy
BOOK A DEMO
See how Payna runs licensing.
Tell us a little about the company and we’ll walk through how Payna handles licensing and compliance in every US state.