Skip to content

Fixed Deposits & Recurring Deposits

Apache Fineract supports three distinct deposit product types. Understanding the differences is essential before configuring products:

Product typeDescription
Savings AccountFlexible deposit - clients can deposit and withdraw freely within configured limits
Fixed Deposit (FD)Lump-sum deposit held for a fixed term at a fixed interest rate; early withdrawal incurs a penalty
Recurring Deposit (RD)Clients make regular scheduled deposits over a term; interest accrues on the growing balance

This guide covers Fixed Deposits and Recurring Deposits. See the Savings & Deposit Management feature page for savings accounts.


Fixed Deposit Products

Key configuration fields

bash
POST /fineract-provider/api/v1/fixeddepositproducts
Authorization: Basic <base64>
Fineract-Platform-TenantId: default
Content-Type: application/json
json
{
  "name": "6-Month Fixed Deposit",
  "shortName": "FD6M",
  "description": "Term deposit for 6 months at 8% per annum",
  "currencyCode": "USD",
  "digitsAfterDecimal": 2,
  "inMultiplesOf": 0,
  "nominalAnnualInterestRate": 8.0,
  "interestCompoundingPeriodType": 4,
  "interestPostingPeriodType": 4,
  "interestCalculationType": 1,
  "interestCalculationDaysInYearType": 365,
  "lockinPeriodFrequency": 6,
  "lockinPeriodFrequencyType": 2,
  "minDepositTerm": 6,
  "maxDepositTerm": 6,
  "minDepositTermTypeId": 2,
  "maxDepositTermTypeId": 2,
  "depositAmount": 1000,
  "minDepositAmount": 500,
  "maxDepositAmount": 1000000,
  "preClosurePenalApplicable": true,
  "preClosurePenalInterest": 2.0,
  "preClosurePenalInterestOnTypeId": 1,
  "withHoldTax": false,
  "accountingRule": 1,
  "locale": "en"
}

Interest compounding period types

CodePeriod
1Daily
2Monthly
3Quarterly
4Semi-annual
5Annual

Interest posting period types

Same codes as compounding period. Posting frequency controls when interest is credited to the account. A common setup is monthly posting with semi-annual compounding.

Lock-in period

lockinPeriodFrequency + lockinPeriodFrequencyType define the minimum holding period before a withdrawal (full or partial) is allowed without penalty. Frequency type codes: 0=days, 1=weeks, 2=months, 3=years.

Pre-closure penalty

When preClosurePenalApplicable: true, withdrawing before the maturity date triggers a penalty. preClosurePenalInterest is the penalty rate. preClosurePenalInterestOnTypeId:

CodeBasis
1Whole term (penalty applies to the total interest earned)
2Post maturity interest (penalty applies only to interest earned after the deposit term)

Fixed Deposit Account Lifecycle

Create account → Approve → Activate (deposit funds) → [Hold until maturity] → Close on maturity
                                                     ↘ Pre-close (with penalty) →

1. Create account

bash
POST /fineract-provider/api/v1/fixeddepositaccounts
json
{
  "clientId": 1,
  "productId": 3,
  "depositAmount": 5000,
  "depositPeriod": 6,
  "depositPeriodFrequencyId": 2,
  "expectedFirstDepositOnDate": "01 March 2025",
  "dateFormat": "dd MMMM yyyy",
  "locale": "en",
  "submittedOnDate": "01 March 2025"
}

2. Approve

bash
POST /fineract-provider/api/v1/fixeddepositaccounts/{accountId}?command=approve
json
{
  "approvedOnDate": "01 March 2025",
  "dateFormat": "dd MMMM yyyy",
  "locale": "en"
}

3. Activate (deposit the funds)

bash
POST /fineract-provider/api/v1/fixeddepositaccounts/{accountId}?command=activate
json
{
  "activatedOnDate": "01 March 2025",
  "dateFormat": "dd MMMM yyyy",
  "locale": "en"
}

4. Close on maturity

bash
POST /fineract-provider/api/v1/fixeddepositaccounts/{accountId}?command=close
json
{
  "closedOnDate": "01 September 2025",
  "onAccountClosure": 100,
  "transferDescription": "FD maturity proceeds",
  "toSavingsAccountId": 12,
  "dateFormat": "dd MMMM yyyy",
  "locale": "en"
}

onAccountClosure determines where the proceeds go: 100 = transfer to a linked savings account, 200 = withdraw as cash.

Pre-mature closure

bash
POST /fineract-provider/api/v1/fixeddepositaccounts/{accountId}?command=prematureClose

Same body as a regular close. Fineract automatically applies the pre-closure penalty if configured.


Recurring Deposit Products

Recurring deposits require clients to make regular contributions (weekly, monthly) over a defined term. Interest accrues on the accumulated balance.

Key configuration differences from Fixed Deposits

json
{
  "name": "Monthly Savings Plan - 12 months",
  "shortName": "RD12M",
  "mandatoryRecommendedDepositAmount": 200,
  "minMandatoryRecommendedDepositAmount": 100,
  "maxMandatoryRecommendedDepositAmount": 10000,
  "isCalendarInherited": false,
  "recurringFrequency": 1,
  "recurringFrequencyType": 2,
  "minDepositTerm": 12,
  "maxDepositTerm": 60,
  "minDepositTermTypeId": 2,
  "maxDepositTermTypeId": 2
}
FieldMeaning
mandatoryRecommendedDepositAmountThe standard deposit amount per instalment
recurringFrequency + recurringFrequencyTypeHow often deposits are due (e.g., 1 + 2 = every 1 month)
isCalendarInheritedIf true, uses the group meeting schedule as the deposit schedule

Recurring Deposit Account Lifecycle

Create → Approve → Activate → [Regular deposits at each due date] → Close on maturity

Creating and activating a recurring deposit account follows the same pattern as fixed deposits, using the /recurringdepositaccounts endpoints instead.

Recording a recurring deposit

bash
POST /fineract-provider/api/v1/recurringdepositaccounts/{accountId}/transactions?command=deposit
json
{
  "transactionDate": "01 April 2025",
  "transactionAmount": 200,
  "paymentTypeId": 1,
  "dateFormat": "dd MMMM yyyy",
  "locale": "en"
}

Interest Calculation

Both Fixed and Recurring Deposits calculate interest using the daily balance method by default:

Daily interest = Outstanding balance × (Annual rate / Days in year)

Interest is accrued daily and posted to the account at the configured posting frequency (monthly, quarterly, etc.). Posted interest increases the balance on which future interest accrues (compounding effect).

interestCalculationDaysInYearType controls the denominator: 360 (banking convention) or 365 (exact days).


Accounting for Deposits

Fixed and Recurring Deposits require dedicated GL account mappings, separate from savings accounts:

MappingGL account typeDescription
Savings referenceLiabilityThe deposit principal held on behalf of the client
Income from interestIncomeInterest expense paid to depositors
Interest payableLiabilityAccrued interest not yet posted to client
Transfers in suspenseAssetIntermediate account for fund transfers

Retrieving Maturity Details

Check when a fixed deposit matures and how much interest has been accrued:

bash
GET /fineract-provider/api/v1/fixeddepositaccounts/{accountId}?associations=all

The response includes maturityDate, maturityAmount, and interestEarned in the summary section.


Common Mistakes

MistakeEffectFix
Not configuring pre-closure penaltyClients can withdraw early at full interestSet preClosurePenalApplicable: true and configure the rate
Using the wrong deposit period type codeTerm does not match the productUse 2 for months, 3 for years
Trying to close before maturity without the premature close command400 errorUse command=prematureClose for early withdrawal
Missing interest posting period setupInterest never posts to client accountEnsure interestPostingPeriodType is set on the product