Loan Application Status Notification
Use Case
Use this webhook when the lender needs to notify Fundiin of status changes for a loan application, from receipt through disbursement, activation, and closure.
Integration: TRIAL + STANDARD
Request
POST /lender/open/notify/loan-application-status
See Lender Notification API Overview for base URL, request headers, HMAC signature, common request fields, idempotency, and response format.
Request Body
The request body includes the Common Request Fields plus the fields below.
| Parameter | Type | Required | Description |
|---|---|---|---|
| loanStatus | Loan status. See Loan Status Values. | ||
| lenderReferenceId | Stable application or loan identifier generated by the lender. Use one value across status updates for the same customer application or loan. | ||
| virtualAccount | Conditional | Virtual account details for customer repayment. Required when loanStatus = DISBURSED. See Data of virtualAccount. | |
| contractNumber | Conditional | Contract number. Required when a contract has been created. | |
| contractSigningUrl | Conditional | URL for the customer to sign the contract. Required when loanStatus = SIGNING_IN_PROGRESS. | |
| contractSigningUrlExpiry | Conditional | Expiry time of contractSigningUrl. Format: yyyy-MM-ddTHH:mm:ss+0700. | |
| contractUrl | Conditional | Signed contract document URL. Required when the contract has been signed. | |
| errorCode | Conditional | Required when loanStatus = REJECTED or loanStatus = CANCELLED. | |
| errorMessage | Conditional | Human-readable error description. Required when errorCode is returned. | |
| terminationReason | Conditional | Lender-defined reason code for rejection, cancellation, or closure. Follow the lender's reason code set. Example values only: FRAUD, NOT_ELIGIBLE, USER_INVALID. | |
| isReapplyAllowed | Conditional | Whether the customer can reapply after rejection. Required when loanStatus = REJECTED. | |
| reapplyAllowedFrom | Conditional | Earliest datetime the customer can reapply. Format: yyyy-MM-ddTHH:mm:ss+0700. |
Data of virtualAccount
| Attribute | Type | Required | Description |
|---|---|---|---|
| accountNumber | Virtual account number for customer repayment. | ||
| accountName | Conditional | Virtual account name or beneficiary name, if available. | |
| bankCode | Conditional | Bank code, if available. | |
| bankName | Conditional | Bank display name, if available. |
Loan Status Values
| Code | Description |
|---|---|
| RECEIVED | Lender received the loan application submitted by Fundiin. |
| PROCESSING | Lender is processing the loan application or disbursement request. |
| APPROVED | Lender approved the loan application. |
| REJECTED | Lender rejected the loan application. Populate errorCode and errorMessage. |
| CANCELLED | Loan application was cancelled before disbursement. Populate errorCode and errorMessage when applicable. |
| SIGNING_IN_PROGRESS | Customer can sign the contract. |
| DISBURSED | Lender has disbursed the loan. Populate lenderReferenceId and virtualAccount. |
| CLOSED | Loan has been fully repaid and has no remaining outstanding balance. |
Example Requests
DISBURSED
{
"requestId": "WH_REQ_202505300001",
"fundiinApplicationId": "APP1234567890",
"lenderCode": "LENDER_A",
"requestingDatetime": "2025-05-30T10:15:00+0700",
"loanStatus": "DISBURSED",
"lenderReferenceId": "LN20250530001",
"virtualAccount": {
"accountNumber": "9901234567890",
"accountName": "NGUYEN VAN A",
"bankCode": "VCB",
"bankName": "Vietcombank"
},
"contractNumber": "CNTR20250530001",
"contractUrl": "https://lender.example.com/contracts/CNTR20250530001",
"contractSigningUrl": null,
"contractSigningUrlExpiry": null,
"errorCode": null,
"errorMessage": null,
"terminationReason": null,
"isReapplyAllowed": false,
"reapplyAllowedFrom": null
}
REJECTED with reapply window
{
"requestId": "WH_REQ_202505300002",
"fundiinApplicationId": "APP1234567890",
"lenderCode": "LENDER_A",
"requestingDatetime": "2025-05-30T10:15:00+0700",
"loanStatus": "REJECTED",
"lenderReferenceId": "LN20250530001",
"virtualAccount": null,
"contractNumber": null,
"contractUrl": null,
"contractSigningUrl": null,
"contractSigningUrlExpiry": null,
"errorCode": "CREDIT_SCORE_TOO_LOW",
"errorMessage": "Customer credit score does not meet minimum requirement.",
"terminationReason": "NOT_ELIGIBLE",
"isReapplyAllowed": true,
"reapplyAllowedFrom": "2025-06-30T00:00:00+0700"
}
Response
See Common Response.