QFAST API Documentation
  1. Webhook
  • Introduction
  • Authentication
  • Onboarding Flow
  • Loan Flow
  • Disbursement Flow
  • Repayment Flow
  • Area Reference
  • API
    • Obtain an Access Token
      POST
    • Onboarding Personal
      POST
    • Get Onboarding Status
      GET
    • Submit Loan
      POST
    • Update Loan
      PATCH
    • Get Loan
      GET
  • Webhook
    • Onboarding Webhooks
    • Loan Webhooks
    • Disbursement Webhooks
    • Repayment Webhooks
  1. Webhook

Repayment Webhooks

QFAST notifies your system whenever a daily repayment is processed for one of your loans.
Every request includes an HMAC-SHA256 signature in the Signature header. Verify it before processing — see Webhook Security.

Event: repayment.succeeded#

Fired when a daily repayment is successfully applied to a loan.

Headers#

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

Payload Structure#

FieldTypeDescription
eventStringAlways repayment.succeeded.
timestampStringEvent time in ISO 8601 format (e.g., 2026-08-25T23:00:00+07:00).
data.repayment_webhook_idUUIDUnique identifier for this webhook event. Acts as the idempotency key.
data.loan_idUUIDThe loan this repayment applies to.
data.reference_account_numberStringYour reference number for this loan.
data.loan_statusStringLoan status after this repayment (e.g., active).
data.outstanding_principal_amountString (decimal)Remaining principal after this repayment, in IDR (e.g., "2800000.00").
data.outstanding_interest_amountString (decimal)Remaining interest after this repayment, in IDR (e.g., "280000.00").
data.total_amountString (decimal)Aggregate total repayment amount for this event, in IDR (e.g., "220000.00").
data.principal_amountString (decimal)Aggregate principal portion of the repayment, in IDR (e.g., "200000.00").
data.interest_amountString (decimal)Aggregate interest portion of the repayment, in IDR (e.g., "20000.00").
data.repaymentsArrayArray of repayment transaction items.
data.affected_repayment_schedulesArrayAggregate snapshot of repayment schedules influenced by this event.
data.affected_daily_repayment_targetsArrayAggregate snapshot of daily repayment targets influenced by this event.

repayments[] Item Object#

FieldTypeDescription
repayment_idUUIDUnique repayment transaction identifier.
statusStringRepayment outcome. Value: paid.
fund_source_typeStringFund source used (settlement for QRIS revenue, reserve_balance for Risk Reserve Fund fallback).
total_amountString (decimal)Total amount for this item, in IDR (e.g., "99000.00").
principal_amountString (decimal)Principal portion for this item, in IDR (e.g., "89000.00").
interest_amountString (decimal)Interest portion for this item, in IDR (e.g., "10000.00").
surplus_amountString (decimal)Amount collected beyond the item's due amount, in IDR (e.g., "0.00").
reserve_replenish_amountString (decimal)Amount credited back to the Risk Reserve Fund for this item, in IDR (e.g., "0.00").
settlementObject|nullQRIS settlement details for this item. null when fund_source_type is reserve_balance.
paid_atStringPayment timestamp in ISO 8601 format.
affected_repayment_schedulesArrayRepayment schedules this item was allocated against.
affected_daily_repayment_targetsArrayDaily repayment targets this item was allocated against.

Settlement Object#

FieldTypeDescription
total_purchase_amountString (decimal)Gross QRIS purchase amount before fees, in IDR (e.g., "100000.00").
total_amountString (decimal)Net settlement amount received by QFAST after fees, in IDR (e.g., "99000.00").

Affected Repayment Schedule Object#

Used at two levels. At the data top level each item is a full schedule snapshot. Inside repayments[], only id, reference_id, and the allocated_* fields are present.
FieldTypeDescription
idUUIDQFAST repayment schedule identifier.
reference_idStringValue you sent as repayment_schedules[].reference_id when submitting the loan (e.g., LND-SCH-001).
sequence_numberIntegerSchedule position within the loan (1-based).
start_dateStringStart date in YYYY-MM-DD.
due_dateStringDue date in YYYY-MM-DD.
principal_amountString (decimal)Full schedule principal, in IDR (e.g., "3000000.00").
interest_amountString (decimal)Full schedule interest, in IDR (e.g., "300000.00").
penalty_amountString (decimal)Penalty accrued on this schedule, in IDR (e.g., "0.00").
daily_amountString (decimal)Planned daily deduction for this schedule, in IDR (e.g., "110000.00").
total_daysIntegerTotal working days in the schedule (e.g., 30).
paid_amountString (decimal)Cumulative paid amount on this schedule, in IDR.
paid_principal_amountString (decimal)Cumulative paid principal on this schedule, in IDR.
paid_interest_amountString (decimal)Cumulative paid interest on this schedule, in IDR.
statusStringSchedule status (e.g., partially_paid).
settled_atString|nullSettlement timestamp in ISO 8601 format, or null if this schedule is not settled.
allocated_amountString (decimal)Amount allocated to this schedule by this event, in IDR.
allocated_principal_amountString (decimal)Principal allocated to this schedule by this event, in IDR.
allocated_interest_amountString (decimal)Interest allocated to this schedule by this event, in IDR.

Affected Daily Repayment Target Object#

Used at two levels. At the data top level each item is a full target snapshot. Inside repayments[], only id, reference_id, and the allocated_* fields are present.
FieldTypeDescription
idUUIDQFAST daily repayment target identifier.
reference_idStringValue you sent as repayment_schedules[].daily_repayment_schedules[].reference_id when submitting the loan (e.g., LND-TGT-2026-08-23).
repayment_schedule_idUUIDParent repayment schedule identifier.
sequence_numberIntegerSchedule position within the loan (1-based).
target_dateStringTarget date in YYYY-MM-DD.
base_principalString (decimal)Planned principal for this target, in IDR (e.g., "100000.00").
base_interestString (decimal)Planned interest for this target, in IDR (e.g., "10000.00").
base_targetString (decimal)Planned total for this target, in IDR (e.g., "110000.00").
paid_amountString (decimal)Cumulative paid amount against this target, in IDR.
paid_principalString (decimal)Cumulative paid principal against this target, in IDR.
paid_interestString (decimal)Cumulative paid interest against this target, in IDR.
settlement_purchase_amountString (decimal)Gross QRIS purchase amount applied to this target, in IDR.
settlement_total_amountString (decimal)Net settlement amount applied to this target, in IDR.
reserve_replenish_amountString (decimal)Amount credited back to the Risk Reserve Fund for this target, in IDR.
reserve_used_amountString (decimal)Amount drawn from the Risk Reserve Fund for this target, in IDR.
surplus_amountString (decimal)Amount collected beyond this target's due amount, in IDR.
statusStringTarget status (e.g., completed).
allocated_amountString (decimal)Amount allocated to this target by this event, in IDR.
allocated_principal_amountString (decimal)Principal allocated to this target by this event, in IDR.
allocated_interest_amountString (decimal)Interest allocated to this target by this event, in IDR.

Examples#

Case 1: Single Fund Source (settlement)#

One QRIS settlement covers the full daily target without drawing on the Risk Reserve Fund.
{
  "event": "repayment.succeeded",
  "timestamp": "2026-08-23T23:00:00+07:00",
  "data": {
    "repayment_webhook_id": "01a04f2a-bc73-7d12-a099-e1b3c4d5e6f7",
    "loan_id": "019e15a1-c644-705c-9330-fffa62cd44ed",
    "reference_account_number": "LND-ACC-2026-0001",

    "loan_status": "active",
    "outstanding_principal_amount": "2900000.00",
    "outstanding_interest_amount": "290000.00",

    "total_amount": "110000.00",
    "principal_amount": "100000.00",
    "interest_amount": "10000.00",

    "repayments": [
      {
        "repayment_id": "01a04f3b-cd84-7e23-b1aa-f2c4d5e6f7a8",
        "status": "paid",
        "fund_source_type": "settlement",
        "total_amount": "110000.00",
        "principal_amount": "100000.00",
        "interest_amount": "10000.00",
        "surplus_amount": "0.00",
        "reserve_replenish_amount": "0.00",
        "settlement": {
          "total_purchase_amount": "120000.00",
          "total_amount": "110000.00"
        },
        "paid_at": "2026-08-23T23:00:00+07:00",

        "affected_repayment_schedules": [
          {
            "id": "0199abcd-1234-7abc-8def-0123456789ab",
            "reference_id": "LND-SCH-001",
            "allocated_amount": "110000.00",
            "allocated_principal_amount": "100000.00",
            "allocated_interest_amount": "10000.00"
          }
        ],

        "affected_daily_repayment_targets": [
          {
            "id": "0199abcd-2345-7abc-8def-000000000823",
            "reference_id": "LND-TGT-2026-08-23",
            "allocated_amount": "110000.00",
            "allocated_principal_amount": "100000.00",
            "allocated_interest_amount": "10000.00"
          }
        ]
      }
    ],

    "affected_repayment_schedules": [
      {
        "id": "0199abcd-1234-7abc-8def-0123456789ab",
        "reference_id": "LND-SCH-001",
        "sequence_number": 1,
        "start_date": "2026-08-23",
        "due_date": "2026-09-21",

        "principal_amount": "3000000.00",
        "interest_amount": "300000.00",
        "penalty_amount": "0.00",

        "daily_amount": "110000.00",
        "total_days": 30,

        "paid_amount": "110000.00",
        "paid_principal_amount": "100000.00",
        "paid_interest_amount": "10000.00",

        "status": "partially_paid",
        "settled_at": null,

        "allocated_amount": "110000.00",
        "allocated_principal_amount": "100000.00",
        "allocated_interest_amount": "10000.00"
      }
    ],

    "affected_daily_repayment_targets": [
      {
        "id": "0199abcd-2345-7abc-8def-000000000823",
        "reference_id": "LND-TGT-2026-08-23",
        "repayment_schedule_id": "0199abcd-1234-7abc-8def-0123456789ab",
        "sequence_number": 1,
        "target_date": "2026-08-23",

        "base_principal": "100000.00",
        "base_interest": "10000.00",
        "base_target": "110000.00",

        "paid_amount": "110000.00",
        "paid_principal": "100000.00",
        "paid_interest": "10000.00",

        "settlement_purchase_amount": "120000.00",
        "settlement_total_amount": "110000.00",
        "reserve_replenish_amount": "0.00",
        "reserve_used_amount": "0.00",
        "surplus_amount": "0.00",

        "status": "completed",

        "allocated_amount": "110000.00",
        "allocated_principal_amount": "100000.00",
        "allocated_interest_amount": "10000.00"
      }
    ]
  }
}

Case 2: Mixed Fund Sources (settlement + reserve_balance)#

Both QRIS revenue and Risk Reserve Fund are used to cover the repayment.
{
  "event": "repayment.succeeded",
  "timestamp": "2026-08-25T23:00:00+07:00",
  "data": {
    "repayment_webhook_id": "01a03e5f-ea97-72ae-b041-fc22db6fffb9",
    "loan_id": "019e15a1-c644-705c-9330-fffa62cd44ed",
    "reference_account_number": "LND-ACC-2026-0001",

    "loan_status": "active",
    "outstanding_principal_amount": "2800000.00",
    "outstanding_interest_amount": "280000.00",

    "total_amount": "220000.00",
    "principal_amount": "200000.00",
    "interest_amount": "20000.00",

    "repayments": [
      {
        "repayment_id": "019e15a1-c644-705c-9330-fffa62cd44ee",
        "status": "paid",
        "fund_source_type": "settlement",
        "total_amount": "99000.00",
        "principal_amount": "89000.00",
        "interest_amount": "10000.00",
        "surplus_amount": "0.00",
        "reserve_replenish_amount": "0.00",
        "settlement": {
          "total_purchase_amount": "100000.00",
          "total_amount": "99000.00"
        },
        "paid_at": "2026-08-25T17:00:00+07:00",

        "affected_repayment_schedules": [
          {
            "id": "0199abcd-1234-7abc-8def-0123456789ab",
            "reference_id": "LND-SCH-001",
            "allocated_amount": "99000.00",
            "allocated_principal_amount": "89000.00",
            "allocated_interest_amount": "10000.00"
          }
        ],

        "affected_daily_repayment_targets": [
          {
            "id": "0199abcd-2345-7abc-8def-000000000823",
            "reference_id": "LND-TGT-2026-08-23",
            "allocated_amount": "99000.00",
            "allocated_principal_amount": "89000.00",
            "allocated_interest_amount": "10000.00"
          }
        ]
      },
      {
        "repayment_id": "019e15a1-c644-705c-9330-fffa62cd44ef",
        "status": "paid",
        "fund_source_type": "reserve_balance",
        "total_amount": "121000.00",
        "principal_amount": "111000.00",
        "interest_amount": "10000.00",
        "surplus_amount": "0.00",
        "reserve_replenish_amount": "0.00",
        "settlement": null,
        "paid_at": "2026-08-25T23:00:00+07:00",

        "affected_repayment_schedules": [
          {
            "id": "0199abcd-1234-7abc-8def-0123456789ab",
            "reference_id": "LND-SCH-001",
            "allocated_amount": "121000.00",
            "allocated_principal_amount": "111000.00",
            "allocated_interest_amount": "10000.00"
          }
        ],

        "affected_daily_repayment_targets": [
          {
            "id": "0199abcd-2345-7abc-8def-000000000823",
            "reference_id": "LND-TGT-2026-08-23",
            "allocated_amount": "11000.00",
            "allocated_principal_amount": "11000.00",
            "allocated_interest_amount": "0.00"
          },
          {
            "id": "0199abcd-2345-7abc-8def-000000000824",
            "reference_id": "LND-TGT-2026-08-24",
            "allocated_amount": "110000.00",
            "allocated_principal_amount": "100000.00",
            "allocated_interest_amount": "10000.00"
          }
        ]
      }
    ],

    "affected_repayment_schedules": [
      {
        "id": "0199abcd-1234-7abc-8def-0123456789ab",
        "reference_id": "LND-SCH-001",
        "sequence_number": 1,
        "start_date": "2026-08-23",
        "due_date": "2026-09-21",

        "principal_amount": "3000000.00",
        "interest_amount": "300000.00",
        "penalty_amount": "0.00",

        "daily_amount": "110000.00",
        "total_days": 30,

        "paid_amount": "220000.00",
        "paid_principal_amount": "200000.00",
        "paid_interest_amount": "20000.00",

        "status": "partially_paid",
        "settled_at": null,

        "allocated_amount": "220000.00",
        "allocated_principal_amount": "200000.00",
        "allocated_interest_amount": "20000.00"
      }
    ],

    "affected_daily_repayment_targets": [
      {
        "id": "0199abcd-2345-7abc-8def-000000000823",
        "reference_id": "LND-TGT-2026-08-23",
        "repayment_schedule_id": "0199abcd-1234-7abc-8def-0123456789ab",
        "sequence_number": 1,
        "target_date": "2026-08-23",

        "base_principal": "100000.00",
        "base_interest": "10000.00",
        "base_target": "110000.00",

        "paid_amount": "110000.00",
        "paid_principal": "100000.00",
        "paid_interest": "10000.00",

        "settlement_purchase_amount": "100000.00",
        "settlement_total_amount": "99000.00",
        "reserve_replenish_amount": "0.00",
        "reserve_used_amount": "11000.00",
        "surplus_amount": "0.00",

        "status": "completed",

        "allocated_amount": "110000.00",
        "allocated_principal_amount": "100000.00",
        "allocated_interest_amount": "10000.00"
      },
      {
        "id": "0199abcd-2345-7abc-8def-000000000824",
        "reference_id": "LND-TGT-2026-08-24",
        "repayment_schedule_id": "0199abcd-1234-7abc-8def-0123456789ab",
        "sequence_number": 2,
        "target_date": "2026-08-24",

        "base_principal": "100000.00",
        "base_interest": "10000.00",
        "base_target": "110000.00",

        "paid_amount": "110000.00",
        "paid_principal": "100000.00",
        "paid_interest": "10000.00",

        "settlement_purchase_amount": "0.00",
        "settlement_total_amount": "0.00",
        "reserve_replenish_amount": "0.00",
        "reserve_used_amount": "110000.00",
        "surplus_amount": "0.00",

        "status": "completed",

        "allocated_amount": "110000.00",
        "allocated_principal_amount": "100000.00",
        "allocated_interest_amount": "10000.00"
      }
    ]
  }
}

Case 3: No Repayment (empty array)#

No deduction was applied for this cycle. No fund source was triggered, so affected_repayment_schedules and affected_daily_repayment_targets are empty arrays.
{
  "event": "repayment.succeeded",
  "timestamp": "2026-08-25T23:00:00+07:00",
  "data": {
    "repayment_webhook_id": "01a05a6c-de95-7f34-c2bb-a3d5e6f7a8b9",
    "loan_id": "019e15a1-c644-705c-9330-fffa62cd44ed",
    "reference_account_number": "LND-ACC-2026-0001",

    "loan_status": "active",
    "outstanding_principal_amount": "3000000.00",
    "outstanding_interest_amount": "300000.00",

    "total_amount": "0.00",
    "principal_amount": "0.00",
    "interest_amount": "0.00",

    "repayments": [],

    "affected_repayment_schedules": [],

    "affected_daily_repayment_targets": []
  }
}

Case 4: Cross-Schedule Allocation#

A single QRIS purchase covers the remaining target in one schedule and spills into the first target of the next schedule. One repayment item, two affected schedules.
{
  "event": "repayment.succeeded",
  "timestamp": "2026-08-25T23:00:00+07:00",
  "data": {
    "repayment_webhook_id": "01a06b7d-ef06-8a45-d3cc-b4e6f7a8b9c0",
    "loan_id": "019e15a1-c644-705c-9330-fffa62cd44ed",
    "reference_account_number": "LND-ACC-2026-0001",

    "loan_status": "active",
    "outstanding_principal_amount": "2810000.00",
    "outstanding_interest_amount": "280000.00",

    "total_amount": "200000.00",
    "principal_amount": "180000.00",
    "interest_amount": "20000.00",

    "repayments": [
      {
        "repayment_id": "01a06b7e-f017-8b56-e4dd-c5f7a8b9c0d1",
        "status": "paid",
        "fund_source_type": "settlement",
        "total_amount": "200000.00",
        "principal_amount": "180000.00",
        "interest_amount": "20000.00",
        "surplus_amount": "0.00",
        "reserve_replenish_amount": "0.00",
        "settlement": {
          "total_purchase_amount": "202000.00",
          "total_amount": "200000.00"
        },
        "paid_at": "2026-08-25T17:00:00+07:00",

        "affected_repayment_schedules": [
          {
            "id": "0199abcd-1234-7abc-8def-0123456789ab",
            "reference_id": "LND-SCH-001",
            "allocated_amount": "90000.00",
            "allocated_principal_amount": "80000.00",
            "allocated_interest_amount": "10000.00"
          },
          {
            "id": "0199abcd-5678-7abc-8def-0123456789cd",
            "reference_id": "LND-SCH-002",
            "allocated_amount": "110000.00",
            "allocated_principal_amount": "100000.00",
            "allocated_interest_amount": "10000.00"
          }
        ],

        "affected_daily_repayment_targets": [
          {
            "id": "0199abcd-2345-7abc-8def-000000000825",
            "reference_id": "LND-TGT-2026-08-25",
            "allocated_amount": "90000.00",
            "allocated_principal_amount": "80000.00",
            "allocated_interest_amount": "10000.00"
          },
          {
            "id": "0199abcd-6789-7abc-8def-000000000925",
            "reference_id": "LND-TGT-2026-09-25",
            "allocated_amount": "110000.00",
            "allocated_principal_amount": "100000.00",
            "allocated_interest_amount": "10000.00"
          }
        ]
      }
    ],

    "affected_repayment_schedules": [
      {
        "id": "0199abcd-1234-7abc-8def-0123456789ab",
        "reference_id": "LND-SCH-001",
        "sequence_number": 1,
        "start_date": "2026-08-23",
        "due_date": "2026-09-21",

        "principal_amount": "3000000.00",
        "interest_amount": "300000.00",
        "penalty_amount": "0.00",

        "daily_amount": "110000.00",
        "total_days": 30,

        "paid_amount": "290000.00",
        "paid_principal_amount": "260000.00",
        "paid_interest_amount": "30000.00",

        "status": "partially_paid",
        "settled_at": null,

        "allocated_amount": "90000.00",
        "allocated_principal_amount": "80000.00",
        "allocated_interest_amount": "10000.00"
      },
      {
        "id": "0199abcd-5678-7abc-8def-0123456789cd",
        "reference_id": "LND-SCH-002",
        "sequence_number": 2,
        "start_date": "2026-09-22",
        "due_date": "2026-10-21",

        "principal_amount": "3000000.00",
        "interest_amount": "300000.00",
        "penalty_amount": "0.00",

        "daily_amount": "110000.00",
        "total_days": 30,

        "paid_amount": "110000.00",
        "paid_principal_amount": "100000.00",
        "paid_interest_amount": "10000.00",

        "status": "partially_paid",
        "settled_at": null,

        "allocated_amount": "110000.00",
        "allocated_principal_amount": "100000.00",
        "allocated_interest_amount": "10000.00"
      }
    ],

    "affected_daily_repayment_targets": [
      {
        "id": "0199abcd-2345-7abc-8def-000000000825",
        "reference_id": "LND-TGT-2026-08-25",
        "repayment_schedule_id": "0199abcd-1234-7abc-8def-0123456789ab",
        "sequence_number": 3,
        "target_date": "2026-08-25",

        "base_principal": "100000.00",
        "base_interest": "10000.00",
        "base_target": "110000.00",

        "paid_amount": "110000.00",
        "paid_principal": "100000.00",
        "paid_interest": "10000.00",

        "settlement_purchase_amount": "91000.00",
        "settlement_total_amount": "90000.00",
        "reserve_replenish_amount": "0.00",
        "reserve_used_amount": "0.00",
        "surplus_amount": "0.00",

        "status": "completed",

        "allocated_amount": "90000.00",
        "allocated_principal_amount": "80000.00",
        "allocated_interest_amount": "10000.00"
      },
      {
        "id": "0199abcd-6789-7abc-8def-000000000925",
        "reference_id": "LND-TGT-2026-09-25",
        "repayment_schedule_id": "0199abcd-5678-7abc-8def-0123456789cd",
        "sequence_number": 1,
        "target_date": "2026-09-25",

        "base_principal": "100000.00",
        "base_interest": "10000.00",
        "base_target": "110000.00",

        "paid_amount": "110000.00",
        "paid_principal": "100000.00",
        "paid_interest": "10000.00",

        "settlement_purchase_amount": "111000.00",
        "settlement_total_amount": "110000.00",
        "reserve_replenish_amount": "0.00",
        "reserve_used_amount": "0.00",
        "surplus_amount": "0.00",

        "status": "completed",

        "allocated_amount": "110000.00",
        "allocated_principal_amount": "100000.00",
        "allocated_interest_amount": "10000.00"
      }
    ]
  }
}
Previous
Disbursement Webhooks
Built with