After a reserve is live, every parameter on itsDocumentation Index
Fetch the complete documentation index at: https://kamino.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
ReserveConfig is editable through the same fetch → mutate → apply pattern as market settings. This page covers the day-to-day workflow.
- SDK
- API
- Kamino CLI
Update a reserve via SDK
The SDK exposeskaminoManager.updateReserveIxs(signer, marketWithAddress, reserveAddress, newReserveConfig) for full reserve config updates. Fetch the current config, mutate, pass the new value in.Mutate the fields you want to change
Cloning a reserve config
To duplicate an existing reserve’s config onto a new reserve, see Add reserves → Cloning an existing reserve config via SDK.Multisig mode
Replace the admin signer withnoopSigner(multisigPubkey) and submit the resulting transactions as Squads proposals.Common edits
Adjust LTV / liquidation threshold / borrow factor
EditloanToValuePct, liquidationThresholdPct, borrowFactorPct. Existing positions continue using the new values from the next refresh.
Adjust deposit / borrow caps
EditdepositLimit and/or borrowLimit. The CLI’s focused update-reserve-config-debt-cap command exists for the borrow cap.
Change the IR curve
EditborrowRateCurve.points. The change takes effect from the next interest accrual; current debts continue accruing at the new rate.
Update oracle config
Edit fields undertokenInfo. The on-chain validator confirms the new oracle accounts match what was passed in the instruction; mismatches return InvalidScopePriceAccount / InvalidPythPriceAccount / InvalidSwitchboardAccount.
For a full oracle migration (e.g., switching from Pyth direct to Scope), do it as a single update: clear old fields, set new fields, apply. See Configure oracles.
Pause a reserve
Setstatus: 1 (Obsolete) or status: 2 (Hidden).
| Status | Effect |
|---|---|
0 Active | Normal operation |
1 Obsolete | Existing positions continue; signals integrators not to surface for new activity |
2 Hidden | Hidden from default UIs |
block_price_usage: 1 on the reserve’s tokenInfo (rejects every operation that needs the price) or emergency_mode: 1 on the reserve. See Emergency controls.
Enable / disable advanced features
Most advanced features have flags at the market level — withdrawal queue, borrow orders, obligation orders, fixed-term rollover windows. The reserve-level fixed-term parameters (debt_term_seconds, host_fixed_interest_rate_bps, early_repay_remaining_interest_pct) live on ReserveConfig and use the standard reserve update flow.
See:
- Withdrawal queue (market-level)
- Fixed rate reserves (reserve-level + market-level)
- Borrow orders (market-level)
- Obligation orders (market-level + reserve-level fee)
Multisig considerations
For multisig-owned markets, every reserve update is a Squads proposal subject to the configured timelock. Plan parameter changes accordingly — a 12-hour timelock means an LTV adjustment proposed at 9:00 AM executes at 9:00 PM. For changes that need to land faster (e.g., closing a reserve in response to an oracle incident), use Emergency controls —borrow_disabled or block_price_usage flips can be batched into a single emergency proposal that takes precedence over slower-cadence parameter tuning.
Common errors
| Error | Cause |
|---|---|
InvalidConfig | A field is out of range (e.g., loanToValuePct > 100, or liquidationThresholdPct < loanToValuePct). |
InvalidOracleConfig / InvalidPythPriceAccount / InvalidScopePriceAccount | Oracle pubkey in tokenInfo doesn’t match the account passed to the instruction. |
MarketImmutable | Market has immutable: 1. No further updates are possible. |
Unauthorized | The signer isn’t the lending_market_owner. Check ownership with get-market-or-vault-admin-info. |
Reference
- Reserve config reference — every editable field
- Risk parameters — choosing values
- Emergency controls — pause and freeze flows
market-operationsCLI reference — full CLI flag detail