{"openapi":"3.1.0","info":{"title":"Payna Compliance API","version":"1.1.0","description":"Real-time access to your regulatory compliance data managed by Payna. The API covers two main resource groups:\n\n- **Licenses** — company-level license portfolio across all states and activity types.\n- **Individuals** — regulated persons (loan officers, insurance adjusters, and other licensed individuals) with per-person license status, open conditions, CE tracking, attestations, and actionable tasks. Filter by `?type=mlo`, `?type=adjuster`, etc.\n\n**Authentication:** All endpoints require a Bearer token API key. Contact your Payna account manager to obtain a key.\n\n**Base URL:** https://app.payna.com/api/v1\n\n**Rate Limiting:** 300 requests per 15-minute sliding window. Exceeded requests receive HTTP 429 with a Retry-After header.","contact":{"name":"Payna Support","email":"support@payna.com","url":"https://payna.com"}},"externalDocs":{"description":"Payna API documentation","url":"https://payna.com/docs"},"servers":[{"url":"https://app.payna.com/api/v1","description":"Production"}],"security":[{"BearerAuth":[]}],"tags":[{"name":"Licenses","description":"Company-level license portfolio. Covers all state licenses across all activity types (lending, mortgage, debt collection, money transmission). These are entity-level licenses — for licenses held by individual people (MLOs, adjusters), use the **Individuals** endpoints."},{"name":"Individuals","description":"Regulated individuals (loan officers, insurance adjusters, and other licensed persons) tracked inside Payna. Each individual has their own license portfolio, open conditions, CE requirements, attestations, and task queue.\n\nIndividuals are vertically-typed via the `individual_type` field. Use `?type=mlo` to scope to loan officers, `?type=adjuster` for insurance adjusters, or omit `type` to list everyone. The same endpoints and response shapes work for all current and future verticals — no new routes are needed when a new regulated role is onboarded."}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"Your Payna API key. Format: pk_live_... -- contact your account manager."}},"schemas":{"License":{"type":"object","required":["id","state_code","license_type","activity_type","status","verified","updated_at","status_detail"],"properties":{"id":{"type":"string","format":"uuid","description":"Unique license record ID."},"state_code":{"type":"string","example":"CA","description":"Two-letter US state code."},"license_type":{"type":"string","example":"California - DFPI Debt Collection License"},"activity_type":{"type":"string","enum":["lending","debt_collection","money_transmission","mortgage","other"],"example":"debt_collection"},"license_number":{"type":"string","nullable":true,"example":"CCA-2671499"},"nmls_id":{"type":"string","nullable":true,"example":"2671499"},"regulator":{"type":"string","nullable":true,"example":"DFPI"},"status":{"type":"string","enum":["active","deficient","pending","applying","not_licensed"],"description":"Core license status (5-value model). For accurate display, prefer status_detail.category and status_detail.code — the top-level status can say \"applying\" for abandoned applications or \"pending\" for withdrawal-requested licenses; status_detail resolves those correctly."},"sub_status":{"type":"string","nullable":true,"example":"withdrawn","description":"Detailed sub-status within the core status category. Known values: expired, suspended, nmls_deficiency, inactive (licence granted but not usable: no sponsorship / not authorised), no_license_needed, in_state_office_required, withdrawn, rejected (the regulator rejected the request), denied (the regulator denied the licence), surety_bond_only (bond-only states: compliance is a surety bond on file, no license exists)."},"raw_status":{"type":"string","nullable":true,"example":"Approved-Active","description":"Verbatim status string from the regulator."},"issued_date":{"type":"string","format":"date","nullable":true,"example":"2023-06-15"},"renewal_date":{"type":"string","format":"date","nullable":true,"example":"2026-12-31","description":"Deadline to file the renewal — the single \"act-by\" date for the license. NMLS licenses run on a renewal cycle (not a hard expiry); state-portal licenses may use the same field."},"days_until_renewal":{"type":"integer","nullable":true,"example":168,"description":"Days until the renewal date from today. Negative means the renewal date has passed without a recorded renewal."},"verified":{"type":"boolean","description":"Whether Payna has verified this license record with the regulator."},"verified_at":{"type":"string","format":"date-time","nullable":true},"jurisdiction_level":{"type":"string","nullable":true,"example":"state"},"filing_method":{"type":"string","nullable":true,"example":"nmls"},"updated_at":{"type":"string","format":"date-time","description":"Last time this record was updated in Payna."},"status_detail":{"$ref":"#/components/schemas/StatusDetail"}}},"StatusDetail":{"type":"object","description":"Derived, machine-stable descriptor of the license status. Render per-state nuance off `code`/`category` instead of parsing `raw_status`. Always present and well-formed.","required":["code","label","category","intentional","is_nmls","portal","source_text"],"properties":{"code":{"type":"string","example":"voluntary_withdrawal","description":"Stable machine slug — safe to branch on.","enum":["licensed","conditional_approval","surety_bond_only","deficient","revoked","suspended","terminated_for_cause","expired","inactive","application","application_deficient","application_incomplete","under_review","pending","withdrawal_requested","application_abandoned","voluntary_withdrawal","withdrawn","surrendered","terminated","rejected","denied","no_license_needed","in_state_office_required","not_licensed","unknown"]},"label":{"type":"string","example":"Withdrawn — voluntary","description":"Human-readable label."},"category":{"type":"string","enum":["active","in_progress","deficient","exited","not_pursued","needs_review"],"description":"Color bucket: active→green, in_progress→blue/amber, deficient→red, exited/not_pursued→gray, needs_review→amber."},"intentional":{"type":"boolean","description":"True when the unlicensed posture is deliberate (voluntary withdrawal / no-license-needed / in-state-office / surety-bond-only) — i.e. not a problem."},"is_nmls":{"type":"boolean","description":"False for state-portal (non-NMLS) jurisdictions such as TX/DE debt collection."},"portal":{"type":"object","nullable":true,"description":"State portal for non-NMLS jurisdictions; null for NMLS or when there is no online portal.","properties":{"name":{"type":"string","example":"Delaware One Stop"},"url":{"type":"string","nullable":true,"example":"https://onestop.delaware.gov/Account_SignIn"},"type":{"type":"string","nullable":true}}},"source_text":{"type":"string","nullable":true,"example":"Withdrawn - Voluntary Without Licensure","description":"Passthrough of the underlying raw_status."}}},"LicenseSummary":{"type":"object","properties":{"total":{"type":"integer","example":37},"by_status":{"type":"object","additionalProperties":{"type":"integer"},"description":"Count per core status.","example":{"active":13,"deficient":2,"pending":3,"applying":13,"not_licensed":6}},"renewing_soon":{"type":"integer","description":"Active licenses with a renewal date within 90 days.","example":3},"renewing_30_days":{"type":"integer","description":"Active licenses with a renewal date within 30 days.","example":1},"expired":{"type":"integer","description":"Licenses with status=deficient and sub_status=expired.","example":0},"verified":{"type":"integer","description":"Licenses that Payna has verified with the regulator.","example":0}}},"Meta":{"type":"object","properties":{"total":{"type":"integer","example":18},"page":{"type":"integer","example":1},"limit":{"type":"integer","example":50},"synced_at":{"type":"string","format":"date-time","nullable":true}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"UNAUTHORIZED"},"message":{"type":"string","example":"Missing or invalid API key."},"status":{"type":"integer","example":401}}}}},"Individual":{"type":"object","required":["individual_id","individual_type","full_name","company_id","updated_at"],"properties":{"individual_id":{"type":"string","format":"uuid","description":"Payna internal ID for this person. Use in all sub-resource endpoints."},"individual_type":{"type":"string","example":"mlo","description":"Regulated vertical: mlo (mortgage loan officer), adjuster (insurance adjuster), or any future type."},"full_name":{"type":"string","example":"Jane Smith"},"work_email":{"type":"string","format":"email","nullable":true,"example":"jane@company.com"},"nmls_id":{"type":"string","nullable":true,"example":"1234567","description":"NMLS individual identifier, when applicable."},"employment_status":{"type":"string","nullable":true,"enum":["active","inactive","terminated","pending"],"description":"Employment/sponsorship status at this company. An individual can be active at one company and terminated at another."},"company_id":{"type":"string","format":"uuid"},"updated_at":{"type":"string","format":"date-time"}}},"IndividualLicense":{"type":"object","required":["id","state","license_type","status","source","updated_at"],"properties":{"id":{"type":"string","format":"uuid"},"state":{"type":"string","example":"CA","description":"2-letter US state code, or US for federal/national registrations."},"license_type":{"type":"string","example":"Mortgage Loan Originator"},"status":{"type":"string","enum":["active","deficient","pending","applying","not_licensed"],"description":"Core license status (5-value model) — the same vocabulary as company licenses."},"sub_status":{"type":"string","nullable":true,"example":"inactive","description":"Detailed sub-status within the core status category. Known values: expired, suspended, nmls_deficiency, inactive (licence granted but not usable: no sponsorship / not authorised), no_license_needed, in_state_office_required, withdrawn, rejected (the regulator rejected the request), denied (the regulator denied the licence), surety_bond_only (bond-only states: compliance is a surety bond on file, no license exists)."},"license_number":{"type":"string","nullable":true,"example":"MLO-12345"},"effective_date":{"type":"string","format":"date","nullable":true,"description":"Date the license was issued or became effective."},"renewal_date":{"type":"string","format":"date","nullable":true,"description":"Date by which the license must be renewed."},"source":{"type":"string","example":"nmls","description":"Where this record originated: nmls, nipr, manual, etc."},"updated_at":{"type":"string","format":"date-time"}}},"LicenseCondition":{"type":"object","required":["item_id","individual_id","description","action_required","status","source","updated_at"],"properties":{"item_id":{"type":"string","format":"uuid","description":"Unique condition ID."},"individual_id":{"type":"string","format":"uuid"},"state":{"type":"string","nullable":true,"example":"TX"},"condition_type":{"type":"string","nullable":true,"example":"education","description":"Type of condition (e.g. education, disclosure, background_check). Null when not yet classified."},"description":{"type":"string","description":"Full condition text from the regulator."},"action_required":{"type":"string","description":"Short title describing what needs to happen."},"status":{"type":"string","enum":["open","in_progress","submitted","cleared"]},"due_date":{"type":"string","format":"date","nullable":true},"source":{"type":"string","enum":["nmls_sync","manual"],"description":"How this condition was recorded."},"first_seen_at":{"type":"string","format":"date-time","nullable":true},"updated_at":{"type":"string","format":"date-time"}}},"CeStatus":{"type":"object","description":"Continuing education tracking for a single state license. Returns one record per state license that has CE hour data tracked.","properties":{"state":{"type":"string","example":"CA"},"license_type":{"type":"string","example":"Mortgage Loan Originator"},"year":{"type":"integer","nullable":true,"example":2026,"description":"CE cycle year, derived from the deadline date."},"required_hours":{"type":"number","nullable":true,"example":8},"completed_hours":{"type":"number","nullable":true,"example":5.5},"remaining_hours":{"type":"number","nullable":true,"example":2.5,"description":"Computed: max(0, required - completed). Null when required or completed is unknown."},"status":{"type":"string","nullable":true,"enum":["compliant","pending","deficient"],"description":"compliant = CE complete; pending = in progress; deficient = overdue."},"deadline":{"type":"string","format":"date","nullable":true,"description":"Date by which CE must be completed for the current cycle."}}},"Attestation":{"type":"object","properties":{"attestation_id":{"type":"string","format":"uuid","description":"Attestation request ID, or individual_id for synthetic records derived from NMLS sync data."},"attestation_type":{"type":"string","example":"mu2","description":"Type of attestation. Currently: mu2 (NMLS MU2 filing attestation)."},"status":{"type":"string","example":"pending","description":"Current status: pending, paused, attested, cancelled, superseded."},"last_completed_at":{"type":"string","format":"date-time","nullable":true,"description":"Most recent timestamp this person attested."},"next_due_at":{"type":"string","format":"date","nullable":true,"description":"Deadline for the current open attestation request, when applicable."}}},"IndividualTask":{"type":"object","properties":{"task_id":{"type":"string","format":"uuid"},"individual_id":{"type":"string","format":"uuid"},"title":{"type":"string","example":"Complete 2026 CE — CA"},"description":{"type":"string","nullable":true},"category":{"type":"string","enum":["people","state","general"],"description":"people = person-level work; state = license/deficiency work; general = other."},"priority":{"type":"string","nullable":true,"example":"high","description":"Task priority (pass-through from Payna internal value)."},"status":{"type":"string","example":"open","description":"Task-level status (pass-through from Payna internal value)."},"assignment_status":{"type":"string","enum":["open","completed"],"example":"open","description":"This person's assignment status. Authoritative for this individual."},"due_date":{"type":"string","format":"date","nullable":true},"completed_at":{"type":"string","format":"date-time","nullable":true},"completion_url":{"type":"string","nullable":true,"description":"Deep link to this specific task in the Payna portal. Format: https://app.payna.com/portal?taskId=<uuid>."}}}}},"paths":{"/licenses":{"get":{"tags":["Licenses"],"operationId":"listLicenses","summary":"List all licenses","description":"Returns a paginated list of all license records for your company. Use the `state`, `status`, `license_type`, and `verified` query parameters to filter results. Results are ordered by state code ascending.","parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated 2-letter state codes. Example: `CA,NY,TX`"},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated status values. Example: `active,pending`"},{"name":"license_type","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by license type (partial match). Example: `Money Transmission`"},{"name":"verified","in":"query","required":false,"schema":{"type":"boolean"},"description":"Filter by verification status. `true` or `false`."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1},"description":"Page number. Starts at 1."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200},"description":"Results per page. Max 200."}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/License"}},"meta":{"$ref":"#/components/schemas/Meta"}}},"example":{"data":[{"id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","state_code":"CA","license_type":"California - DFPI Debt Collection License","activity_type":"debt_collection","license_number":"11622-99","nmls_id":"2671499","regulator":"DFPI","status":"active","sub_status":null,"raw_status":"Approved","issued_date":"2025-07-17","renewal_date":"2026-12-31","days_until_renewal":168,"verified":false,"verified_at":null,"jurisdiction_level":null,"filing_method":null,"updated_at":"2026-07-16T18:36:49Z","status_detail":{"code":"licensed","label":"Licensed","category":"active","intentional":false,"is_nmls":true,"portal":null,"source_text":"Approved"}}],"meta":{"total":37,"page":1,"limit":50,"synced_at":"2026-07-16T18:36:49Z"}}}}},"400":{"description":"Invalid query parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until rate limit resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/licenses/summary":{"get":{"tags":["Licenses"],"operationId":"getLicenseSummary","summary":"Get license summary","description":"Returns aggregate counts for all licenses. Lightweight endpoint suitable for health checks, dashboards, and startup checks. Use `renewing_30_days` to drive collection-blocking logic.","responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LicenseSummary"},"meta":{"$ref":"#/components/schemas/Meta"}}},"example":{"data":{"total":37,"by_status":{"active":13,"deficient":2,"pending":3,"applying":10,"not_licensed":9},"renewing_soon":3,"renewing_30_days":1,"expired":0,"verified":0},"meta":{"total":37,"synced_at":null}}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/licenses/{state}":{"get":{"tags":["Licenses"],"operationId":"getLicenseByState","summary":"Get license for a specific state","description":"Returns a single license record for a US state. A state can hold more than one license (different activity types, or state-level plus city-level entries); when that happens this endpoint returns the most recently updated one and reports the count in `meta.total` — use `GET /licenses?state=XX` to retrieve all of them. State codes are case-insensitive.","parameters":[{"name":"state","in":"path","required":true,"schema":{"type":"string"},"description":"2-letter US state code. Example: `CA`"}],"responses":{"200":{"description":"License found.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/License"},"meta":{"type":"object","properties":{"total":{"type":"integer","example":1,"description":"Number of licenses held in the state; >1 means more are available via the list endpoint."},"synced_at":{"type":"string","format":"date-time"}}}}}}}},"400":{"description":"Invalid state code.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No license record found for this state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/individuals":{"get":{"tags":["Individuals"],"operationId":"listIndividuals","summary":"List regulated individuals","description":"Returns a paginated list of all regulated individuals (loan officers, insurance adjusters, etc.) for your company. Use `?type=mlo` to filter to loan officers, `?type=adjuster` for adjusters, or omit `type` to list all regulated persons regardless of vertical. Filter further by `employment_status` to surface only active or terminated individuals.","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string"},"description":"Vertical filter. Examples: `mlo`, `adjuster`. Omit to return all individual types."},{"name":"employment_status","in":"query","required":false,"schema":{"type":"string","enum":["active","inactive","terminated","pending"]},"description":"Filter by employment/sponsorship status."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200}}],"responses":{"200":{"description":"Paginated list of individuals.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Individual"}},"meta":{"$ref":"#/components/schemas/Meta"}}},"example":{"data":[{"individual_id":"c1d2e3f4-0000-0000-0000-aabbccddeeff","individual_type":"mlo","full_name":"Jane Smith","work_email":"jane@company.com","nmls_id":"1234567","employment_status":"active","company_id":"f0a1b2c3-0000-0000-0000-112233445566","updated_at":"2026-07-17T10:00:00Z"}],"meta":{"total":12,"page":1,"limit":50,"synced_at":"2026-07-17T10:00:00Z"}}}}},"400":{"description":"Invalid query parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/individuals/{id}/licenses":{"get":{"tags":["Individuals"],"operationId":"getIndividualLicenses","summary":"Get individual's licenses","description":"Returns all state licenses held by a regulated individual. For MLOs this reflects their NMLS individual license record per state. For other verticals, licenses come from the relevant source system (NIPR for adjusters, etc.).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Individual ID from `GET /individuals`."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200}}],"responses":{"200":{"description":"List of licenses.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IndividualLicense"}},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Individual not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/individuals/{id}/license-conditions":{"get":{"tags":["Individuals"],"operationId":"getIndividualLicenseConditions","summary":"Get outstanding license conditions","description":"Returns open conditions and deficiencies on an individual's licenses — the items blocking transfers, causing delays, or requiring action before a state can go active. Filter by `?status=open` to see only unresolved items.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["open","in_progress","submitted","cleared"]},"description":"Filter by condition status."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200}}],"responses":{"200":{"description":"List of license conditions.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LicenseCondition"}},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Individual not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/individuals/{id}/ce-status":{"get":{"tags":["Individuals"],"operationId":"getIndividualCeStatus","summary":"Get continuing education status","description":"Returns CE tracking data for each state license where hours are recorded. One record per state. Use `remaining_hours` and `deadline` to drive reminder logic. Records only appear when `required_hours` has been entered — states without CE data are omitted.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200}}],"responses":{"200":{"description":"CE records per state license.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CeStatus"}},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Individual not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/individuals/{id}/attestations":{"get":{"tags":["Individuals"],"operationId":"getIndividualAttestations","summary":"Get attestation / disclosure status","description":"Returns attestation and disclosure records for an individual. For MLOs, this surfaces MU2 attestation requests. Use `last_completed_at` to check when they last attested and `next_due_at` to see pending deadlines. When no formal attestation round has been initiated, a synthetic record derived from NMLS sync data is returned with `status: attested` and the observed attestation timestamp.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200}}],"responses":{"200":{"description":"Attestation records.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Attestation"}},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Individual not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/individuals/{id}/tasks":{"get":{"tags":["Individuals"],"operationId":"getIndividualTasks","summary":"Get tasks / action feed","description":"Returns a normalized feed of actionable work assigned to this individual. Use `?status=open` to drive a \"things to do\" view. `assignment_status` is authoritative for this person's progress — it can differ from the overall `status` when a task has multiple assignees. `completion_url` links the individual to the Payna portal where they can act.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["open","completed"]},"description":"Filter by assignment status. `open` = not yet done; `completed` = finished."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"maximum":200}}],"responses":{"200":{"description":"Task feed.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IndividualTask"}},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"description":"Unauthorized.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Individual not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}