Handle a delinquency case
Run a first-party Harbor collections matter from signal through compliant contact and a tracked payment promise, with current facts and evidence at every boundary.
On May 1, 2027, Harbor is 22 days past due. This workflow applies whether the Lending Core supplies facts natively or a configured core binding supplies them.
Open or deduplicate the matter
Durable contextcurl -X POST "$BASE/v1/servicing/cases" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: harbor-collections-signal-2027-05-01" \
-d '{
"caseType": "collections",
"customerId": "412",
"loanIds": ["7204"],
"source": "delinquency_monitor",
"sourceReference": "signal_2027-05-01_HBR",
"reasonCode": "installment_past_due",
"priority": "high"
}'{
"caseId": "case_HBR_COL_51",
"caseType": "collections",
"status": "open",
"stage": "contact_strategy",
"queueId": "queue_early_collections",
"nextAction": "evaluate_contact_eligibility",
"version": 6
}The configured deduplication key prevents a daily delinquency signal from creating a daily duplicate case.
Evaluate contact eligibility
Point-in-time decisioncurl -X POST "$BASE/v1/servicing/compliance/contact-eligibility" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: contact-check-hbr-2027-05-01T1000" \
-d '{
"caseId": "case_HBR_COL_51",
"customerId": "412",
"loanId": "7204",
"channel": "voice",
"purpose": "collections",
"contactPointId": "513",
"requestedAt": "2027-05-01T10:00:00-07:00"
}'The response is structured: allowed, blocked, approval_required, or missing_facts; it includes the facts used, their freshness, cited rule versions, remaining call capacity, and an expiry. A planning decision never authorizes a later dial by itself.
Reserve work atomically
curl -X POST "$BASE/v1/servicing/queues/queue_early_collections/tasks/reserve-next" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: reserve-next-worker-ana-4-1000" \
-d '{
"workerId": "worker_ANA_4",
"skills": ["collections", "english"],
"reservationSeconds": 120
}'Reservation prevents two workers from acting on the same task. It expires automatically if not accepted.
Execute the contact
Re-checked at dialcurl -X POST "$BASE/v1/servicing/interactions" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: hbr-call-attempt-2027-05-01-1" \
-d '{
"caseId": "case_HBR_COL_51",
"direction": "outbound",
"channel": "voice",
"purpose": "collections",
"contactPointId": "513",
"content": { "scriptVersion": "collections-opening-v5" }
}'Immediately before dialing, LendEasy refreshes restrictions, consent, local time, contact history, litigation/representation signals, and debt state. A cease request or posted payment that arrived after step 2 blocks execution and records why.
Record Maya's commitment
Guardrail checkedMaya commits to $260.00 on May 8 and $257.14 on May 22. The promise tracks expectations; it does not debit her account.
curl -X POST "$BASE/v1/servicing/cases/case_HBR_COL_51/promises" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: hbr-promise-2027-05-01" \
-d '{
"loanId": "7204",
"commitments": [
{ "amount": "260.00", "dueDate": "2027-05-08" },
{ "amount": "257.14", "dueDate": "2027-05-22" }
],
"sourceInteractionId": "int_HBR_CALL_91",
"borrowerConfirmedAt": "2027-05-01T10:18:42-07:00"
}'Verify the evidence chain
The timeline joins the signal, case version, task reservation, planning and execution-time compliance decisions, interaction outcome, and promise. Confirm causal IDs and timestamps rather than inferring chronology from separate lists.
curl "$BASE/v1/servicing/cases/case_HBR_COL_51/timeline?pageSize=50" \
-H "Authorization: Bearer $TOKEN"