Webhooks allow you to receive real-time notifications about loan events. When certain events occur, we’ll send a POST request to your configured webhook URL with details about the event.

Supported Events

We currently support the following loan-related webhook events:

loan.rejected

Triggered when a loan application is rejected.
{
  "event": "loan.rejected",
  "data": {
    "loanId": "239120c1abf1065b9c45-1773788145",
    "amount": "200",
    "tenure": "5",
    "interest": "66.67",
    "interestRate": "3.33",
    "processingFee": "2500",
    "processingFeeRate": "12.5",
    "receivableAmount": "200",
    "monthlyPayment": "13.33",
    "totalAmountRepayable": "2566.67",
    "totalAmountPaid": "0",
    "status": "REJECTED",
    "comment": "okay done",
    "loanAccount": null,
    "product": "Personal Loan",
    "ghanaCardNumber": "GHA-123456789",
    "startDate": "2026-03-01",
    "endDate": "2026-08-01",
    "counterOffer": null
  }
}

loan.counter

Triggered when a counter-offer is made on a loan application.
{
  "event": "loan.counter",
  "data": {
    "loanId": "74a5194cb97710b5aef3-1773788198",
    "amount": "200",
    "tenure": "5",
    "interest": "66.67",
    "interestRate": "3.33",
    "processingFee": "2500",
    "processingFeeRate": "12.5",
    "receivableAmount": "200",
    "monthlyPayment": "13.33",
    "totalAmountRepayable": "2566.67",
    "totalAmountPaid": "0",
    "status": "PENDING_APPROVAL",
    "comment": null,
    "loanAccount": null,
    "product": "Personal Loan",
    "ghanaCardNumber": "GHA-123456789",
    "startDate": "2026-03-01",
    "endDate": "2026-08-01",
    "counterOffer": {
      "id": "76a7d006-b196-4d3a-962f-c61a30860c5f",
      "amount": "20",
      "tenure": "3",
      "narration": null,
      "interest": "0.65",
      "interestRate": "2.17",
      "processingFee": "2500",
      "processingFeeRate": "12.5",
      "monthlyPayment": "10.22",
      "receivableAmount": "20",
      "totalRepayment": "30.65",
      "status": "PENDING_APPROVAL",
      "type": "COUNTER",
      "repaymentDate": "2026-06-17T21:57:23.394Z"
    }
  }
}

loan.approved

Triggered when a loan application is approved.
{
  "event": "loan.approved",
  "data": {
    "loanId": "74a5194cb97710b5aef3-1773788198",
    "amount": "20",
    "tenure": "3",
    "interest": "0.65",
    "interestRate": "2.17",
    "processingFee": "2500",
    "processingFeeRate": "12.5",
    "receivableAmount": "20",
    "monthlyPayment": "6.88",
    "totalAmountRepayable": "20.65",
    "totalAmountPaid": "0",
    "status": "APPROVED",
    "comment": "test",
    "loanAccount": null,
    "product": "Personal Loan",
    "ghanaCardNumber": "GHA-123456789",
    "startDate": "2026-03-17",
    "endDate": "2026-06-17",
    "counterOffer": null
  }
}

loan.disbursed

Triggered when a loan is disbursed to the borrower.
{
  "event": "loan.disbursed",
  "data": {
    "loanId": "74a5194cb97710b5aef3-1773788198",
    "amount": "20",
    "tenure": "3",
    "interest": "0.65",
    "interestRate": "2.17",
    "processingFee": "2500",
    "processingFeeRate": "12.5",
    "receivableAmount": "20",
    "monthlyPayment": "6.88",
    "totalAmountRepayable": "20.65",
    "totalAmountPaid": "0",
    "status": "DISBURSED",
    "comment": "test",
    "loanAccount": null,
    "product": "Personal Loan",
    "ghanaCardNumber": "GHA-123456789",
    "startDate": "2026-03-17",
    "endDate": "2026-06-17",
    "counterOffer": null
  }
}

Webhook Payload Structure

All webhook payloads follow this general structure:
  • event: The event type (string)
  • data: Event-specific data (object)
The data object contains loan details including:
  • loanId: Loan reference
  • amount: Loan amount
  • tenure: Loan tenure in months
  • interest: Interest amount
  • interestRate: Rate of interest
  • processingFee: Processing fee charged for the loan
  • processingFeeRate: Rate of processing fee
  • receivableAmount: Total amount receivable by the lender (principal amount)
  • monthlyPayment: Monthly payment
  • totalAmountRepayable: Total amount repayable (principal + interest + fees)
  • totalAmountPaid: Total amount already paid
  • status: Current loan status
  • comment: Optional comment from the lender
  • loanAccount: Associated loan account
  • product: Loan product name
  • ghanaCardNumber: Ghana card number of the borrower
  • startDate: Loan start date (YYYY-MM-DD)
  • endDate: Loan end/repayment date (YYYY-MM-DD)
  • counterOffer: Counter-offer details (if applicable)
The counterOffer object (when present) contains:
  • id: Counter-offer ID
  • amount: Counter-offer amount
  • tenure: Counter-offer tenure in months
  • interest: Interest amount on the counter-offer
  • interestRate: Rate of interest for counter-offer
  • processingFee: Processing fee for counter-offer
  • processingFeeRate: Rate of processing fee
  • monthlyPayment: Monthly payment for counter-offer
  • receivableAmount: Receivable amount for counter-offer
  • totalRepayment: Total repayment amount for counter-offer
  • status: Counter-offer status
  • type: Counter-offer type
  • narration: Additional notes for counter-offer
  • repaymentDate: Repayment date for counter-offer
  • Other loan-related fields

Handling Webhooks

Your webhook endpoint should:
  1. Return a 200 status code quickly to acknowledge receipt
  2. Process the event asynchronously
  3. Handle duplicate events gracefully (events may be retried)