LendEasy/DocsLMS + Servicing·v1
Start integrating
RecipesServicingWork a case with the copilot

Work a case with the copilot

Ask for a fact that never touches a model, have the copilot prepare a follow-up it has already validated, and confirm it under your own authority — with the AI’s contribution cited, not hidden.

Time
~5 min
Surface
Servicing Workspace
Steps
3
Gate
Case scope · proposal expiry · your permissions
EndpointsPOST /v1/servicing/cases/{caseId}/cookie/turnsPOST /v1/servicing/cases/{caseId}/follow-up-tasks

The useful question to ask a case copilot is not “what do you think” but “what is true, and can you get the next step ready for me”. The copilot answers the first from verified facts, and prepares the second for you to confirm.

1

Ask for a fact

No model call
POST/v1/servicing/cases/{caseId}/cookie/turns
curl -X POST "$BASE/v1/servicing/cases/1001/cookie/turns" \
  -H "Authorization: Bearer $TOKEN" \
  -H "LendEasy-Tenant: demo-lender" \
  -H "Idempotency-Key: turn-1001-last-payment" \
  -H "Content-Type: application/json" \
  -d '{ "question": "When was the last successful payment?" }'
{
  "turnId": 5001,
  "threadId": 501,
  "answer": {
    "family": "LAST_SUCCESSFUL_PAYMENT",
    "kind": "VERIFIED_FACT",
    "text": "The last successful payment was $517.14, effective March 12, 2027, posted the same day.",
    "sourceRefs": [{ "type": "LMS_PAYMENT", "ref": "9013" }],
    "asOf": "2027-05-01T16:55:02Z"
  }
}

The question classifies into a closed family — no provider call, no synthesis, available even when the model is down. The label says exactly what you’re holding: a verified fact with its source and as-of time.

2

Have the copilot prepare the follow-up

Prepared, not done
POST/v1/servicing/cases/{caseId}/cookie/turns
curl -X POST "$BASE/v1/servicing/cases/1001/cookie/turns" \
  -H "Authorization: Bearer $TOKEN" \
  -H "LendEasy-Tenant: demo-lender" \
  -H "Idempotency-Key: turn-1001-prepare-followup" \
  -H "Content-Type: application/json" \
  -d '{ "question": "Prepare a follow-up task to check the promise after its first commitment date." }'
{
  "turnId": 5002,
  "threadId": 501,
  "answer": {
    "family": "PREPARE_FOLLOW_UP_TASK",
    "kind": "PROPOSED_ACTION",
    "proposal": {
      "proposalRef": "prop-1001-7Q2",
      "taskTypeCode": "PROMISE_FOLLOW_UP",
      "dueAt": "2027-05-09T16:00:00Z",
      "priority": "MEDIUM",
      "summary": "Verify first promise commitment ($260.00 due May 8) against posted payments.",
      "expiresAt": "2027-05-01T17:25:02Z"
    }
  }
}

Preparation resolves the allowed task types, queues, and due-date rules server-side. The label is PROPOSED_ACTION — nothing has changed business state, and the proposal expires rather than lingering until it’s stale.

3

Confirm under your own authority

Your authority, not the copilot's
POST/v1/servicing/cases/1001/follow-up-tasks
curl -X POST "$BASE/v1/servicing/cases/1001/follow-up-tasks" \
  -H "Authorization: Bearer $TOKEN" \
  -H "LendEasy-Tenant: demo-lender" \
  -H "Idempotency-Key: confirm-prop-1001-7Q2" \
  -H "Content-Type: application/json" \
  -d '{ "proposalRef": "prop-1001-7Q2" }'
{ "taskId": 2005, "taskTypeCode": "PROMISE_FOLLOW_UP", "status": "OPEN", "dueAt": "2027-05-09T16:00:00Z" }

The command is the ordinary task-creation operation, run under your exact permissions — confirmation revalidates the proposal against current facts, and a stale or expired one is refreshed, never submitted as-was. The audit record names you as the submitter and cites the copilot’s session as the cause: the AI’s contribution is visible, not laundered into a human action.

i
the copilot never climbs the ladder on its own. Answers, drafts, and preparation are its ceiling — submission is always a human’s explicit act. The full contract is on the copilot’s page.
Unified search across guides, recipes & the API referenceEsc