200 400 401 403 404
{
"programCode": "MEDICAL_LEAVE_DEFERRAL_V1",
"versionId": 9302 ,
"version": 2 ,
"status": "VALIDATED",
"definitionDigest": "8c1f6a2d9b304e57",
"effectiveFrom": null ,
"effectiveTo": null ,
"reason": "Extends the arrears eligibility rule from 90 to 120 days overdue.",
"createdAt": "2026-07-20T10: 00 :00Z",
"validatedAt": "2026-07-21T09: 30 :00Z",
"activatedAt": null ,
"retiredAt": null ,
"expectedVersion": 2 ,
"guardrailVersion": 2 ,
"definition": {
"programCode": "MEDICAL_LEAVE_DEFERRAL_V1",
"displayName": "Medical Leave Deferral",
"hardshipReasonCode": "MEDICAL_LEAVE",
"scope": {
"productClasses": [
"COVERED_CONSUMER"
],
"jurisdictions": [
"US"
],
"currencies": [
"USD"
],
"repaymentFrequencies": [
"MONTHLY"
],
"requiredNativeCapability": "DEFER_SCHEDULED_INSTALLMENTS_TO_MATURITY"
},
"evidence": {
"requiredEvidenceCode": "DOCTORS_MEDICAL_LEAVE_CERTIFICATE",
"acceptedScreeningResults": [
"SCREENING_PASSED",
"VERIFIED"
],
"humanConfirmationAccepted": true
},
"rules": [
{
"key": "EMPLOYMENT_ACTIVE",
"fact": "employmentActive",
"operator": "EQ",
"value": "true",
"onFail": "INELIGIBLE",
"onMissing": "MISSING_INFORMATION",
"operatorExplanation": "The borrower must still be employed; this program defers payments during leave, it does not address job loss.",
"borrowerSafeReason": "EMPLOYMENT_NOT_ACTIVE"
},
{
"key": "LEAVE_DOCUMENTED",
"fact": "certificateState",
"operator": "EQ",
"value": "COMPLETE",
"onFail": "MISSING_INFORMATION",
"onMissing": "MISSING_INFORMATION",
"operatorExplanation": "The workflow must have confirmed a complete doctor certificate before eligibility is evaluated.",
"borrowerSafeReason": "EVIDENCE_INCOMPLETE"
},
{
"key": "DELINQUENCY_WITHIN_GUARDRAIL",
"fact": "daysOverdue",
"operator": "LTE",
"value": "120",
"onFail": "INELIGIBLE",
"onMissing": "PASS",
"operatorExplanation": "Beyond the lender-configured arrears age this program is not the right instrument.",
"borrowerSafeReason": "ARREARS_TOO_OLD"
}
],
"authority": {
"straightThroughMaximum": 3 ,
"humanApprovalMaximum": 6 ,
"humanApprovalPermission": "APPROVE_SERVICING_HARDSHIP_DEFERRAL_UP_TO_6",
"outsideProgramAbove": 6
},
"terms": {
"reliefType": "DEFER_SCHEDULED_INSTALLMENTS_TO_MATURITY",
"minimumDeferredPayments": 1 ,
"maximumDeferredPayments": 6 ,
"principalForgiveness": false ,
"rateChange": false
},
"communication": {
"agreementTemplateCode": "HARDSHIP_MEDICAL_LEAVE_AGREEMENT",
"invitationTemplateCode": "HARDSHIP_CERTIFICATE_REQUEST",
"replacementTemplateCode": "HARDSHIP_CERTIFICATE_REPLACEMENT",
"reminderTemplateCode": "HARDSHIP_CERTIFICATE_REMINDER",
"ineligibilityTemplateCode": "HARDSHIP_NOT_ELIGIBLE",
"language": "en",
"offerValidityHours": 168 ,
"documentDeadlineHours": 168 ,
"reminderAfterHours": 72
},
"workflow": {
"caseType": "HARDSHIP_ASSISTANCE",
"workflowKey": "MEDICAL_LEAVE_HARDSHIP_V1"
}
},
"validation": {
"valid": true ,
"findings": []
},
"simulations": [
{
"simulationId": 8801 ,
"resultCode": "HUMAN_APPROVAL_REQUIRED",
"runAt": "2026-07-21T09: 35 :00Z",
"synthetic": true ,
"input": {
"requestedCount": 4 ,
"facts": {
"employmentActive": "true",
"certificateState": "COMPLETE",
"leaveStartDate": "2026-07-14",
"expectedReturnDate": "2026-08-25",
"canResumeAfterReturn": "true",
"loanStatus": "ACTIVE",
"daysOverdue": "0"
}
},
"result": {
"result": "HUMAN_APPROVAL_REQUIRED",
"requestedCount": 4 ,
"allowedCount": 4 ,
"requiredPermission": "APPROVE_SERVICING_HARDSHIP_DEFERRAL_UP_TO_6",
"reasonCodes": [],
"ruleTrace": [
{
"key": "EMPLOYMENT_ACTIVE",
"fact": "employmentActive",
"operator": "EQ",
"expected": "true",
"observed": "true",
"status": "PASS",
"operatorExplanation": "The borrower must still be employed; this program defers payments during leave, it does not address job loss."
}
],
"synthetic": 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": []
}