Skip to main content
POST
Preview amortisation schedule

Authorizations

Authorization
string
header
required

JWT bearer token issued by the identity provider.

Body

application/json
annualInterestRate
string
required

Annual interest rate as a decimal string (e.g. "0.12000000").

Example:

"0.12000000"

dayCountConvention
string
required

Day count convention identifier.

Example:

"ACT/365"

jurisdictionCode
string
required

ISO-2 jurisdiction code.

Required string length: 2
Example:

"BR"

principalAmount
string
required

Principal amount as a decimal string (e.g. "50000.00").

Example:

"50000.00"

startDate
string
required

Schedule start date (RFC3339 or YYYY-MM-DD).

Example:

"2026-06-14T00:00:00Z"

termMonths
integer<int64>
required

Number of months.

Required range: 1 <= x <= 600
Example:

24

firstDueDate
string

Day the first instalment falls due (RFC3339 or YYYY-MM-DD). Omit it and the first instalment falls one month after the start date, clamped to the month's last day, which is the ordinary grid. Supply it and it becomes the grid: every later instalment falls on that day of the month, clamped to each month's last day so a ladder anchored on the 31st falls on the 30th in April and never spills into May, and the first period runs from the start date to this day — longer or shorter than a month, and charged by its real days. Naming the day the ordinary grid was going to fall on anyway is the same as omitting it, and prices the same ladder; naming any other day re-anchors the whole ladder on it, so two requests one day apart can move the SECOND instalment by more than one day. Refused when it is worth zero or fewer days from the start date by this day-count convention, when its first period would cost the whole instalment in interest so the first payment repays no principal, or when gracePeriodDays is also set.

Example:

"2026-03-10"

gracePeriodDays
integer<int64>

Grace period in days: the first instalment falls this many days after the start date instead of one month. Mutually exclusive with firstDueDate, which says the same thing by naming the day; sending both is refused.

Required range: 0 <= x <= 365
Example:

30

loanProductVersionId
string<uuid>

Loan product version whose admitted first-due-date window this preview should be bounded by. Optional: omit it and the preview prices whatever the arithmetic allows, which is what a quote made before a product is picked needs. Supply it together with firstDueDate and the preview answers the same refusal booking will, rather than quoting a ladder the door will not take.

Example:

"018f4e4e-7a3f-7c2e-9a1b-2c3d4e5f6071"

Response

OK

calendarReference
string
required

Identifier of the business calendar used to resolve due dates.

dayCountConvention
string
required

Day count convention applied to interest accrual.

Example:

"ACT/365"

installments
object[] | null
required

Ordered amortisation schedule, one entry per installment.

jurisdictionCode
string
required

ISO-2 jurisdiction code resolved for this preview.

Example:

"BR"

profileVersion
string
required

Jurisdiction profile version used to compute the schedule.

Example:

"1.0.0"

totalInterest
string
required

Sum of interest across all installments as a decimal string, minor-unit precision scale 2 (e.g. "4321.00").

Example:

"4321.00"

totalPrincipal
string
required

Sum of principal across all installments as a decimal string, minor-unit precision scale 2 (e.g. "50000.00").

Example:

"50000.00"

effectiveCostPreview
object

Effective-cost breakdown; present only when the jurisdiction profile computes one.

jurisdictionExtensions
object

Per-jurisdiction overlay payload; present only when the profile emits one.

scheduleOfferSnapshotId
string

Identifier of the offer this preview recorded; derived from the frozen inputs, so an identical preview returns the same value. Absent whenever no offer was recorded — the request carries no tenant identity, the offer store was unavailable, or the service is misconfigured — and the schedule is returned in every one of those cases.

Example:

"6f2b9a41-0c3d-5e7f-9a12-4b8c6d0e1f37"