LendEasy/DocsLMS + Servicing·v1
Start integrating
RecipesServicingRecord a promise-to-pay

Record a promise-to-pay

Turn Maya's two-part commitment into a guardrail-checked promise, then watch event-driven evaluation settle it from posted payment facts — kept, partial, or broken.

Time
~5 min plus due dates
Surface
Servicing Plane
Steps
3
Gate
Promise guardrail · posted payment facts
EndpointsGET /v1/servicing/cases/{caseId}POST /v1/servicing/cases/{caseId}/promisesGET /v1/servicing/cases/{caseId}/promises
1

Read fresh case context

GET/v1/servicing/cases/1001
curl "$BASE/v1/servicing/cases/1001" \
  -H "Authorization: Bearer $TOKEN" \
  -H "LendEasy-Tenant: demo-lender"

Confirm the case is open, Harbor is still past due, no payment covering the promise is in flight, and no restriction blocks the proposed follow-up policy. The case read includes context freshness — refresh stale core facts before offering terms.

2

Create the commitment schedule

No money movement
POST/v1/servicing/cases/1001/promises
curl -X POST "$BASE/v1/servicing/cases/1001/promises" \
  -H "Authorization: Bearer $TOKEN" \
  -H "LendEasy-Tenant: demo-lender" \
  -H "Idempotency-Key: promise-1001-2027-05-01" \
  -H "Content-Type: application/json" \
  -d '{
    "loanRef": "7204",
    "commitments": [
      { "amount": { "amount": 260.00, "currency": "USD" }, "dueDate": "2027-05-08" },
      { "amount": { "amount": 257.14, "currency": "USD" }, "dueDate": "2027-05-22" }
    ],
    "sourceInteractionId": 3001,
    "borrowerConfirmedAt": "2027-05-01T10:18:42-07:00"
  }'
{
  "promiseId": 5001,
  "caseId": 1001,
  "status": "ACTIVE",
  "guardrailDecision": "WITHIN_POLICY",
  "commitments": [
    { "amount": { "amount": 260.00, "currency": "USD" }, "dueDate": "2027-05-08" },
    { "amount": { "amount": 257.14, "currency": "USD" }, "dueDate": "2027-05-22" }
  ],
  "version": 1
}

An out-of-policy horizon, amount, or installment count returns an explainable approval requirement. It never silently clips the borrower’s terms. Under policy, an active promise can suppress routine collection outreach while it stands.

3

Read the evaluated outcome

Posted facts only
GET/v1/servicing/cases/1001/promises

There is nothing to trigger. Evaluation is servicing-owned: authoritative payment events and scheduled jobs run it as facts post. Maya pays $517.14 through the portal on May 6 — covering both commitments early — and the posting event settles the promise:

curl "$BASE/v1/servicing/cases/1001/promises" \
  -H "Authorization: Bearer $TOKEN" \
  -H "LendEasy-Tenant: demo-lender"
{
  "items": [
    {
      "promiseId": 5001,
      "status": "KEPT",
      "qualifyingPaymentRefs": ["9014"],
      "evaluatedAt": "2027-05-06T18:00:04Z",
      "version": 1
    }
  ]
}

Submitted or merely settled payments are not assumed posted — only posted facts qualify. A covering partial records PARTIALLY_KEPT; a missed commitment records BROKEN and can wake a follow-up task. The original promise and every revision remain visible.

i
Promise is not payment. It may suppress outreach according to policy, but it never creates an ACH debit, card charge, ledger posting, or receipt.
Unified search across guides, recipes & the API referenceEsc