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",
    "processingFee": "2500",
    "receivableAmount": "200",
    "status": "REJECTED",
    "comment": "okay done",
    "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",
    "processingFee": "2500",
    "receivableAmount": "200",
    "status": "PENDING_APPROVAL",
    "comment": null,
    "counterOffer": {
      "id": "76a7d006-b196-4d3a-962f-c61a30860c5f",
      "amount": "20",
      "tenure": "3",
      "narration": null,
      "interest": "0.65",
      "processingFee": "2500",
      "receivableAmount": "20",
      "totalRepayment": "30.65",
      "status": "PENDING_APPROVAL",
      "type": "COUNTER",
      "repaymentDate": "2026-06-17T21:57:23.394Z",
      "createdAt": "2026-03-17T22:57:23.395Z",
      "updatedAt": "2026-03-17T22:57:23.395Z"
    }
  }
}

loan.approved

Triggered when a loan application is approved.
{
  "event": "loan.approved",
  "data": {
    "loanId": "74a5194cb97710b5aef3-1773788198",
    "amount": "20",
    "tenure": "3",
    "interest": "0.65",
    "processingFee": "2500",
    "receivableAmount": "20",
    "status": "APPROVED",
    "comment": "test",
    "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",
    "processingFee": "2500",
    "receivableAmount": "20",
    "status": "DISBURSED",
    "comment": "test",
    "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
  • processingFee: Processing fee charged for the loan
  • receivableAmount: Total amount receivable by the lender (principal amount)
  • status: Current loan status
  • comment: Optional comment from the lender
  • counterOffer: Counter-offer details (if applicable)

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)