Nhảy tới nội dung

Installment Schedule Notification

Use Case

Use this webhook to sync the latest loan state from the lender. It is sent after loan activation and after each repayment allocation.

TRIAL integrations send the loan summary object only. STANDARD integrations extend the same notification with the full installment array.

Integration: TRIAL + STANDARD

Request

POST /lender/open/notify/installment-schedule

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
lenderReferenceIdStringStable application or loan identifier generated by the lender. See Loan Identification.
contractNumberStringConditionalContract number. Secondary reference for reconciliation against contract documents.
loanJsonObjectLatest loan summary. See Data of loan.
installmentsJsonArrayConditionalFull installment schedule. Required for STANDARD; not required for TRIAL. See Data of installments.

Data of loan

TRIAL fields

These fields are required for all integrations.

AttributeTypeRequiredDescription
loanStatusStringCurrent loan status. Values: ACTIVE, OVERDUE, PAID, TERMINATED, CANCELLED.
disbursedAmountNumberTotal principal disbursed to customer in VND.
outstandingDueAmountNumberTotal amount currently due, including overdue and current period principal, User Service Fee, and Late Payment Fee.
nextDueDateDateNext scheduled due date. Format: yyyy-MM-dd. Send null when the loan is fully paid.
pendingAllocationAmountNumberAmount received from customer but not yet allocated to debt.
virtualAccountJsonObjectVirtual account details for customer repayment. See Data of virtualAccount.
lastUpdatedDatetimeTimestampLatest update time from the lender. Format: yyyy-MM-ddTHH:mm:ss+0700.

STANDARD additional fields

These fields are required for STANDARD integrations. TRIAL integrations can also optionally send these fields if available.

AttributeTypeRequiredDescription
paidAmountNumberTotal amount paid by customer to date in VND. Equal to the sum of all allocatedTotal across all installments.
outstandingPrincipalNumberTotal remaining principal balance in VND.
overduePrincipalNumberPrincipal amount currently past due, where DPD > 0, in VND.
overdueServiceFeeNumberUser Service Fee amount currently past due in VND.
accruedPenaltyNumberLate Payment Fee accrued to date and not yet paid in VND.
dpdNumberDays Past Due at the time of this notification.

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.

Data of installments

The installments array is STANDARD only. TRIAL integrations do not include it.

AttributeTypeRequiredDescription
installmentIdStringInstallment ID generated by the lender.
installmentNumberNumberInstallment sequence number, starting from 1.
dueDateDateScheduled due date. Format: yyyy-MM-dd.
remainingAmountNumberRemaining unpaid amount for this installment in VND.
statusStringPENDING, PARTIALLY_PAID, PAID, OVERDUE, CANCELLED.
originalPrincipalNumberOriginal scheduled principal for this installment in VND.
originalServiceFeeNumberOriginal scheduled User Service Fee for this installment in VND.
paidPrincipalNumberConditionalPrincipal paid for this installment to date in VND. Required if lender can provide payment breakdown.
paidServiceFeeNumberConditionalUser Service Fee paid for this installment to date in VND. Required if lender can provide payment breakdown.
paidPenaltyNumberConditionalLate Payment Fee paid for this installment to date in VND. Required if lender can provide payment breakdown.
paidDatetimeTimestampConditionalDatetime payment was completed. Required when status = PAID. Format: yyyy-MM-ddTHH:mm:ss+0700.

Example Requests

TRIAL after activation

{
"requestId": "WH_REQ_202505300003",
"fundiinApplicationId": "APP1234567890",
"lenderCode": "LENDER_A",
"requestingDatetime": "2025-05-30T10:15:00+0700",
"lenderReferenceId": "LN20250530001",
"contractNumber": "CNTR20250530001",
"loan": {
"loanStatus": "ACTIVE",
"disbursedAmount": 3000000,
"outstandingDueAmount": 0,
"nextDueDate": "2025-06-30",
"pendingAllocationAmount": 0,
"virtualAccount": {
"accountNumber": "9901234567890",
"accountName": "NGUYEN VAN A",
"bankCode": "VCB",
"bankName": "Vietcombank"
},
"lastUpdatedDatetime": "2025-05-30T10:10:00+0700"
},
"installments": null
}

STANDARD after repayment

{
"requestId": "WH_REQ_202507150003",
"fundiinApplicationId": "APP1234567890",
"lenderCode": "LENDER_A",
"requestingDatetime": "2025-07-15T09:15:00+0700",
"lenderReferenceId": "LN20250530001",
"contractNumber": "CNTR20250530001",
"loan": {
"loanStatus": "ACTIVE",
"disbursedAmount": 3000000,
"outstandingDueAmount": 0,
"nextDueDate": "2025-07-30",
"pendingAllocationAmount": 0,
"virtualAccount": {
"accountNumber": "9901234567890",
"accountName": "NGUYEN VAN A",
"bankCode": "VCB",
"bankName": "Vietcombank"
},
"lastUpdatedDatetime": "2025-07-15T09:12:00+0700",
"paidAmount": 1054000,
"outstandingPrincipal": 2084000,
"overduePrincipal": 0,
"overdueServiceFee": 0,
"accruedPenalty": 0,
"dpd": 0
},
"installments": [
{
"installmentId": "INS_001",
"installmentNumber": 1,
"dueDate": "2025-06-30",
"originalPrincipal": 916000,
"originalServiceFee": 138000,
"remainingAmount": 0,
"status": "PAID",
"paidPrincipal": 916000,
"paidServiceFee": 138000,
"paidPenalty": 0,
"paidDatetime": "2025-07-15T09:08:00+0700"
},
{
"installmentId": "INS_002",
"installmentNumber": 2,
"dueDate": "2025-07-30",
"originalPrincipal": 916000,
"originalServiceFee": 138000,
"remainingAmount": 1054000,
"status": "PENDING",
"paidPrincipal": 0,
"paidServiceFee": 0,
"paidPenalty": 0,
"paidDatetime": null
},
{
"installmentId": "INS_003",
"installmentNumber": 3,
"dueDate": "2025-08-30",
"originalPrincipal": 916000,
"originalServiceFee": 138000,
"remainingAmount": 1054000,
"status": "PENDING",
"paidPrincipal": 0,
"paidServiceFee": 0,
"paidPenalty": 0,
"paidDatetime": null
}
]
}

Response

See Common Response.