Amortisation schedule for a hire purchase, chattel mortgage or equipment loan: nominal monthly period basis, in arrears or in advance, monthly frequency, with an optional balloon that replaces or adds to the instalment on its row. Internal balances are unrounded; output rounds to cents. The residual is reported against the stated rate and never forced to zero. Monthly frequency only; other frequencies are refused.
POST /v1/calculators/hp/schedule
URN urn:sbrm:calculator:hp:schedule. selection.kind: fact.
Not period-scoped. Read the input schema from /openapi.json before calling.
| Field | Required | Allowed values |
|---|---|---|
amount_financed | required | decimal string |
annual_rate_pct | required | decimal string |
term_regular_instalments | required | integer ≥ 1 |
instalment | required | decimal string |
timing | required | in_arrears | in_advance |
frequency | required | string; v1 supports monthly only |
begin_date | required | ISO date (YYYY-MM-DD) |
contract_form | required | hire_purchase | chattel_mortgage | equipment_loan |
balloon | optional | object, or null |
balloon.amount | required when balloon present | decimal string |
balloon.instalment_number | required when balloon present | integer ≥ 1 |
balloon.mode | required when balloon present | replace | add |
fy_end_month | optional | integer 1–12, default 6 |
A Scania prime mover on a chattel mortgage, in arrears, with a balloon that replaces the final instalment:
curl -s -X POST \
"$BASE/v1/calculators/hp/schedule" \
-H "Content-Type: application/json" \
-d '{
"amount_financed": "273269.35",
"annual_rate_pct": "3.84",
"term_regular_instalments": 59,
"instalment": "4180.02",
"timing": "in_arrears",
"frequency": "monthly",
"begin_date": "2021-08-30",
"contract_form": "chattel_mortgage",
"balloon": {
"amount": "59180.02",
"instalment_number": 60,
"mode": "replace"
},
"fy_end_month": 6
}'
From the live response:
totals.interest "32531.96"
final_balance "0.11"
rate_precision_residual "0.11"
fy_position["2025-06-30"] = {
"principal": "105904.81",
"current_gross": "50160.24",
"current_unexpired": "3246.78",
"current_net": "46913.46",
"non_current_gross": "59180.02",
"non_current_unexpired": "188.77",
"non_current_net": "58991.25"
}