QFAST API Documentation
  1. Webhook
  • Authentication
  • Onboarding
    • Overview
    • Reference
      • Area Reference
    • API
      • Onboarding Personal
      • Get Onboarding Status
      • Submit Loan
      • Get Loan
    • Webhook
      • Onboarding Webhooks
  • Disbursement
    • Overview
    • Webhook
      • Disbursement Webhooks
  • Repayment
    • Overview
    • Webhook
      • Repayment Webhooks
  • Schemas
    • Loan Schema
    • Onboarding Schema
  1. Webhook

Disbursement Webhooks

Disbursement webhooks notify your system when a disbursement transfer succeeds or fails. The disbursement is initiated through the QFAST dashboard — your system only needs to listen for these events.
Configure your webhook URL in QFAST's lender settings.

Webhook Security#

Every request includes an HMAC-SHA256 signature. Verify it before processing. See Authentication for credential setup and the Onboarding Webhooks for a verification code example.
HeaderValue
SignatureHMAC-SHA256 of the raw JSON body, using your webhook_secret.

Event: disbursement.succeeded#

Fired when funds are successfully transferred to the borrower's DOKU wallet. At this point, the loan transitions to ACTIVE.

Headers#

HeaderValue
Content-Typeapplication/json
Eventdisbursement.succeeded
SignatureHMAC-SHA256 of the body.

Payload Structure#

FieldTypeDescription
eventStringAlways disbursement.succeeded.
timestampStringEvent time in YYYY-MM-DD HH:MM:SS (UTC).
data.disbursement_idUUIDDisbursement identifier.
data.loan_idUUIDAssociated loan identifier.
data.reference_account_numberStringYour reference number for this loan.
data.amountNumberAmount transferred to borrower's wallet, in IDR.
data.disbursed_atDateTime|nullDate and time in Y-m-d H:i:s (UTC).
data.reference_idString|nullDOKU internal transfer reference number.

Example#

{
  "event": "disbursement.succeeded",
  "timestamp": "2026-05-11 12:00:00",
  "data": {
    "disbursement_id": "d1e2f3a4-b5c6-7890-def0-123456789abc",
    "loan_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "reference_account_number": "LND-ACC-2026-0001",
    "amount": 4950000.0,
    "disbursed_at": "2026-05-11 12:00:00",
    "reference_id": "DOKU-TRF-20260511-XYZ123"
  }
}

Event: disbursement.failed#

Fired when the transfer to the borrower's DOKU wallet fails.

Headers#

HeaderValue
Content-Typeapplication/json
Eventdisbursement.failed
SignatureHMAC-SHA256 of the body.

Payload Structure#

FieldTypeDescription
eventStringAlways disbursement.failed.
timestampStringEvent time in YYYY-MM-DD HH:MM:SS (UTC).
data.disbursement_idUUIDDisbursement identifier.
data.loan_idUUIDAssociated loan identifier.
data.reference_account_numberStringYour reference number for this loan.
data.amountNumberAmount that was attempted, in IDR.
data.reasonStringFailure reason (e.g. insufficient balance, etc.).
data.failed_atDateTime|nullDate and time in Y-m-d H:i:s (UTC).

Example#

{
  "event": "disbursement.failed",
  "timestamp": "2026-05-11 12:00:00",
  "data": {
    "disbursement_id": "d1e2f3a4-b5c6-7890-def0-123456789abc",
    "loan_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "reference_account_number": "LND-ACC-2026-0001",
    "amount": 4950000.0,
    "reason": "Insufficient escrow balance",
    "failed_at": "2026-05-11 12:00:00"
  }
}
Previous
Overview
Next
Overview
Built with