Request
curl https://sandbox.api.lendeasy.ai /v1/servicing/reconciliation-drift/$DRIFT_ID \
-H "Authorization: Bearer $TOKEN" \
-H "LendEasy-Tenant: $TENANT" await fetch(`https://sandbox.api.lendeasy.ai /v1/servicing/reconciliation-drift/${driftId}` , {
method: "GET" ,
headers: { Authorization: `Bearer ${token}` , "LendEasy-Tenant" : tenant },
});requests.get(
f"https://sandbox.api.lendeasy.ai /v1/servicing/reconciliation-drift/{drift_id}" ,
headers={"Authorization" : f"Bearer {token}" , "LendEasy-Tenant" : tenant},
)200 400 401 403 404
{
"driftId": 81 ,
"driftType": "EXPECTED_STATE_MISMATCH",
"objectType": "AUTOPAY",
"objectRef": "456",
"customerRef": "123",
"loanRef": "456",
"detail": "The LMS reports autopay active; servicing expected it suspended.",
"status": "OPEN",
"priority": "HIGH",
"externalCaseRef": "LE-CASE-1001",
"caseId": 1001 ,
"reviewTaskId": 2005 ,
"detectedAt": "2026-07-25T18: 30 :00Z",
"comparison": {
"expected": "AUTOPAY_SUSPENDED",
"actual": "AUTOPAY_ACTIVE",
"failure": "The downstream update was rejected."
},
"lane": {
"signalEventId": 5501 ,
"aggregateType": "LOAN",
"aggregateRef": "456",
"sequenceNo": 118 ,
"shard": 3 ,
"processingStatus": "FAILED",
"lastError": "Autopay suspension rejected by the LMS.",
"attempts": 3 ,
"laneStatus": "POISONED",
"laneHighWater": 117
},
"resolution": {},
"availableActions": [
{
"action": "RETRY",
"displayName": "Re-drive the failed event",
"description": "Clears the poisoned lane and replays the event through the ordinary poller.",
"available": true
},
{
"action": "MANUAL_REPAIR",
"displayName": "Record a repair made through a governed path",
"description": "Requires a governed command or an action request on the linked case to point at.",
"available": true
},
{
"action": "CANCEL_DEPENDENT_WORK",
"displayName": "Cancel the work that depended on this",
"description": "Cancels the case work this drift blocked, with an audited reason on each item.",
"available": true
},
{
"action": "ACCEPT_AS_EXPECTED",
"displayName": "Accept the difference as correct",
"description": "Records that the two sides are allowed to differ here, and why.",
"available": true
}
]
}{
"developerMessage": "Request was understood but rejected; inspect errors for field-level causes.",
"httpStatusCode": "400",
"defaultUserMessage": "The request could not be applied.",
"userMessageGlobalisationCode": "validation.msg.validation.errors.exist",
"errors": []
}{
"developerMessage": "Request was understood but rejected; inspect errors for field-level causes.",
"httpStatusCode": "401",
"defaultUserMessage": "The request could not be applied.",
"userMessageGlobalisationCode": "error.msg.not.authenticated",
"errors": []
}{
"developerMessage": "Request was understood but rejected; inspect errors for field-level causes.",
"httpStatusCode": "403",
"defaultUserMessage": "The request could not be applied.",
"userMessageGlobalisationCode": "error.msg.not.authorized",
"errors": []
}{
"developerMessage": "Request was understood but rejected; inspect errors for field-level causes.",
"httpStatusCode": "404",
"defaultUserMessage": "The request could not be applied.",
"userMessageGlobalisationCode": "error.msg.resource.not.found",
"errors": []
}