A fixed-rate reserve uses the same primitives as a floating reserve plus four config fields that pin the rate and impose a term. This page covers what those fields mean and the workflow for creating a reserve.Documentation Index
Fetch the complete documentation index at: https://kamino.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
What pins a fixed-rate reserve
| Field | Type | Meaning |
|---|---|---|
borrow_rate_curve | piecewise-linear curve | For a fixed-rate reserve, configured as a flat curve at the target rate. Borrowers pay this rate regardless of utilization. |
host_fixed_interest_rate_bps | u16 | Optional additional spread layered on top of the curve, charged to the borrower and accruing 100% to the protocol (not lenders). Default 0. |
debt_term_seconds | u64 | Per-borrow term. The borrower’s loan matures at last_borrowed_at_timestamp + debt_term_seconds. 0 = open-term (the reserve behaves as floating). |
debt_maturity_timestamp | u64 | Reserve-wide sunset timestamp. After this, no new borrows are accepted and existing borrows become liquidatable. 0 = no sunset. |
early_repay_remaining_interest_pct | u8 (0–100) | Penalty for repaying inside the first term. Penalty = projected interest for the remaining term × this percentage. Accrues to protocol fees on the debt reserve. |
debt_term_seconds and debt_maturity_timestamp are independent. Set neither (effectively a floating reserve), one, or both. Use debt_term_seconds to express every borrow gets a 3-month clock starting at borrow time. Use debt_maturity_timestamp to express this whole reserve sunsets on January 1. The two compose: a reserve with both constraints requires every borrow to fit inside the remaining time until reserve maturity.
The borrower’s effective rate is the
borrow_rate_curve value at current utilization plus host_fixed_interest_rate_bps. For most fixed-rate reserves you want a flat borrow_rate_curve at the desired rate and host_fixed_interest_rate_bps = 0. Set a non-zero host_fixed_interest_rate_bps only when you intentionally want a protocol-side spread on top of the lender-facing rate.Creating a fixed-rate reserve
A fixed-rate reserve is created the same way as a floating one — the difference is in the config you supply.- Kamino CLI
- SDK
- API
Add the reserve to your market
Edit the config for fixed-rate behaviour
In the JSON, set:The remaining points in the curve array should be padded to the same final value (the SDK and CLI handle padding automatically when you start from a flat curve).
borrowRateCurve.points— flat curve at the target rate. Both endpoints set to the sameborrowRateBps. See pattern below.debtTermSeconds— term in seconds (e.g.7776000for 90 days,2592000for 30 days).debtMaturityTimestamp— only if you want the entire reserve to sunset on a specific date; otherwise leave at0.earlyRepayRemainingInterestPct— typical values are 10–25% (the first-term-only penalty).hostFixedInterestRateBps— usually0. Only set if you want a protocol-side spread.
Set risk parameters
Standard reserve risk params still apply — set them appropriate to the collateral, not to the term:
loanToValuePct,liquidationThresholdPct— the same curve as the floating-rate reserve for the same debt token typically applies. Term doesn’t change credit risk; collateral does.minLiquidationBonusBps,maxLiquidationBonusBps,deleveragingBonusIncreaseBpsPerDay— these matter especially for fixed-rate because protocol-enforced liquidation (term/maturity breach) ramps the bonus from min to max linearly per day. Set values that produce a meaningful incentive curve for liquidators.
What’s next
Market Settings
Enable the market-level features that fixed-rate reserves depend on.
Lifecycle Operations
Update or sunset an existing fixed-rate reserve.