LendEasy/DocsLMS + Servicing·v1
Start integrating
GuidesServicing PlaneMass cases & subcases

Mass cases & subcases

Coordinate a portfolio event through a versioned population and parent matter while evaluating, executing, and evidencing every customer action independently.

A disaster, provider incident, statement defect, or policy remediation can affect thousands of customers. A mass case manages the common cause; one subcase preserves each customer’s facts, controls, actions, and outcome.

The current API implements this structural boundary as bounded supercases: create/read/list a supercase and add idempotent customer subcases. The richer versioned-population, preview, canary, and bulk-status model below remains product direction.

The implemented supercase

A supercase is a container for a portfolio event and one shared subcase type. It carries no bulk-action authority of its own:

curl -X POST "$BASE/v1/servicing/supercases" \
  -H "Authorization: Bearer $TOKEN" \
  -H "LendEasy-Tenant: demo-lender" \
  -H "Content-Type: application/json" \
  -d '{
    "supercaseType": "FEMA",
    "displayName": "July wildfire assistance",
    "subcaseCaseTypeCode": "HARDSHIP",
    "createdSignalRef": "fema-event-2027-05",
    "sensitive": false
  }'
{
  "supercaseId": 8001,
  "externalSupercaseRef": "LE-SUPERCASE-8001",
  "status": "ACTIVE",
  "resourceId": 8001
}

supercaseType is a closed set — GENERIC, FEMA, or REMEDIATION — and subcaseCaseTypeCode must name an enabled case type. Fixing one subcase type per supercase is what stops a disaster container from quietly accumulating unrelated regulated matters.

Each affected customer is added as an ordinary case that is structurally linked to the container:

POST /v1/servicing/supercases/8001/subcases

{
  "customerRef": "123",
  "reasonCode": "DISASTER_ASSISTANCE",
  "priority": "HIGH",
  "loanRefs": ["456"],
  "ownerQueueCode": "HARDSHIP"
}

The response is a normal case creation result — caseId, externalCaseRef, status, and deduplicated — because that is exactly what it is. A subcase follows the full case model: its own workflow, tasks, compliance decisions, evidence, and closure criteria.

Reading the container

GET /v1/servicing/supercases lists bounded structural summaries, filterable by supercaseType, status, caseTypeCode, sensitive, and creation window. GET /v1/servicing/supercases/{supercaseId} adds status counts and a canonical link to the subcases themselves:

{
  "supercaseId": 8001,
  "supercaseType": "FEMA",
  "displayName": "July wildfire assistance",
  "status": "ACTIVE",
  "subcaseCaseTypeCode": "HARDSHIP",
  "subcaseCount": 12,
  "subcaseStatusCounts": { "OPEN": 10, "CLOSED": 2 },
  "subcasesHref": "/v1/servicing/cases?supercaseId=8001"
}

Detailed subcases are read through the case collection at subcasesHref, not through the supercase. The container reports structure and counts; the cases remain the system of record for the work. All four routes take MANAGE_SERVICING_SUPERCASE, which grants container management — never a bypass of the permissions each subcase’s own operations require.

Hierarchy

mass case: provider outage on 2027-08-04
  ├─ population version 1: 18,420 candidate loans
  ├─ subcase Maya / Harbor
  ├─ subcase customer B / BNPL
  ├─ subcase merchant C / advance
  └─ aggregate work, progress, exceptions, and evidence manifest

The parent cannot satisfy a subcase’s individual deadline or compliance requirement. Each subcase has exactly one managing mass case and otherwise follows the normal case model.

Versioned population

Population definitions pin source, query/criteria, as-of time, included IDs, exclusions, checksum, creator, and version. If the affected cohort expands, create version 2 and record added/removed reasons; do not mutate version 1.

Population state Meaning
Candidate Matches detection criteria; not yet confirmed.
Included Eligible for subcase and proposed actions.
Excluded Does not meet policy, with structured reason.
Added later Enters through a later population version.
Resolved before action Subcase retained; unnecessary action skipped.

Fan-out model

One proposed mass action becomes N individual action intents:

template + population version
        ↓ fan out
customer fact resolution

individual compliance/eligibility decision

idempotent execution or explicit skip

individual acknowledgement and reconciliation

One blocked customer does not fail the entire population, and one allowed customer does not authorize another.

Safe rollout

Run a dry preview with outcome counts and amount totals, require approval of the frozen population and template, execute a small canary, compare observed outcomes, then expand in bounded batches. A kill switch stops new dispatch but does not pretend already accepted provider or financial effects were recalled.

Aggregate status

The mass case reports counts by proposed, eligible, approval-required, blocked, missing-facts, submitted, completed, failed, drifted, and skipped. Counts reconcile to the frozen population version, and amount-based actions reconcile amounts separately.

Common failures

  • a customer pays after population selection;
  • a new cease or bankruptcy control appears before contact;
  • a document or address changes before rendering;
  • the core is stale for one cohort;
  • provider acceptance is partial;
  • an idempotent retry returns prior success;
  • a population criterion accidentally crosses legal entities or products.

Each becomes an individual outcome or controlled incident, never a silent bulk override.

Mass servicing is orchestration over governed single-customer actions. It is not a privileged endpoint that bypasses identity, consent, restrictions, approval, or reconciliation.
Unified search across guides, recipes & the API referenceEsc