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

Onboarding Webhooks

QFAST sends asynchronous webhook notifications to your configured endpoint when KYB status changes and when a loan is created. Configure your webhook URL via QFAST's lender settings.

Webhook Security#

Every webhook request includes an HMAC-SHA256 signature in the Signature header. Always verify this before processing the payload.
HeaderValue
SignatureHMAC-SHA256 of the raw JSON body, using your webhook_secret.

Verification Example (PHP)#

Expected Response#

Your endpoint must return HTTP 200. Any other status code triggers a retry.

Event: kyb.status_updated#

Fired whenever the merchant's KYB status changes. This covers all intermediate and terminal states.

Headers#

HeaderValue
Content-Typeapplication/json
Eventkyb.status_updated
SignatureHMAC-SHA256 of the body.

Payload Structure#

FieldTypeDescription
eventStringAlways kyb.status_updated.
timestampStringEvent time in YYYY-MM-DD HH:MM:SS (UTC).
data.merchant_idUUIDThe merchant's unique identifier.
data.onboarding_statusStringThe new KYB status. See Get Onboarding Status.
data.rejected_entitiesArray|absentPresent when status is kyb_rejected or kyb_revision_needed.

rejected_entities Object#

FieldTypeDescription
typeStringThe entity type that failed verification (e.g., BUSINESS, OWNER, BRAND).
reasonStringHuman-readable rejection reason from DOKU.

Example: KYB Approved#

Example: KYB Revision Needed#


Event: loan_submitted#

Fired after a successful Submit Loan call. Confirms the loan has been created.

Headers#

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

Payload Structure#

FieldTypeDescription
eventStringAlways loan_submitted.
timestampStringEvent time in YYYY-MM-DD HH:MM:SS (UTC).
data.loan_idUUIDQFAST loan identifier.
data.reference_account_numberStringYour reference number.
data.statusStringLoan status — always pending on creation.
data.principal_amountNumberPrincipal in IDR.
data.interest_amountNumber|nullTotal interest in IDR.
data.admin_fee_amountNumber|nullAdmin fee in IDR.
data.reserve_amountNumberReserve amount in IDR.
data.term_unitStringLoan term unit — always month.
data.term_lengthIntegerLoan duration in months.
data.penalty_rateStringDaily late penalty rate as a string.
data.start_dateString|nullLoan start date in YYYY-MM-DD.

Example: Loan Submitted#


Event: loan_active#

Fired when a loan transitions to active status (e.g., after disbursement completes).

Payload Structure#

Same as loan_submitted — see table above — with status = active.
Previous
Get Loan
Next
Overview
Built with