Skip to main content

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.

ParameterTypeRequiredDescription
loanStatusStringLoan status. See Loan Status Values.
lenderReferenceIdStringStable application or loan identifier generated by the lender. Use one value across status updates for the same customer application or loan.
virtualAccountJsonObjectConditionalVirtual account details for customer repayment. Required when loanStatus = DISBURSED. See Data of virtualAccount.
contractNumberStringConditionalContract number. Required when a contract has been created.
contractSigningUrlStringConditionalURL for the customer to sign the contract. Required when loanStatus = SIGNING_IN_PROGRESS.
contractSigningUrlExpiryTimestampConditionalExpiry time of contractSigningUrl. Format: yyyy-MM-ddTHH:mm:ss+0700.
contractUrlStringConditionalSigned contract document URL. Required when the contract has been signed.
errorCodeStringConditionalRequired when loanStatus = REJECTED or loanStatus = CANCELLED.
errorMessageStringConditionalHuman-readable error description. Required when errorCode is returned.
terminationReasonStringConditionalLender-defined reason code for rejection, cancellation, or closure. Follow the lender's reason code set. Example values only: FRAUD, NOT_ELIGIBLE, USER_INVALID.
isReapplyAllowedBooleanConditionalWhether the customer can reapply after rejection. Required when loanStatus = REJECTED.
reapplyAllowedFromTimestampConditionalEarliest datetime the customer can reapply. Format: yyyy-MM-ddTHH:mm:ss+0700.

Data of virtualAccount

AttributeTypeRequiredDescription
accountNumberStringVirtual account number for customer repayment.
accountNameStringConditionalVirtual account name or beneficiary name, if available.
bankCodeStringConditionalBank code, if available.
bankNameStringConditionalBank display name, if available.

Loan Status Values

CodeDescription
RECEIVEDLender received the loan application submitted by Fundiin.
PROCESSINGLender is processing the loan application or disbursement request.
APPROVEDLender approved the loan application.
REJECTEDLender rejected the loan application. Populate errorCode and errorMessage.
CANCELLEDLoan application was cancelled before disbursement. Populate errorCode and errorMessage when applicable.
SIGNING_IN_PROGRESSCustomer can sign the contract.
DISBURSEDLender has disbursed the loan. Populate lenderReferenceId and virtualAccount.
CLOSEDLoan 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.