1. Fixed Deposits
Core Banking Services
  • Introduction
  • Terminologies
  • Webhooks
  • Authentication
  • Account
    • Saving Account Guide
    • Product List
      GET
    • Create Account
      POST
    • Update Account
      PUT
    • Find Client
      POST
    • Accounts
      GET
    • Create Additional Account
      POST
    • Account Details By BVN
      GET
    • Get Client Addresses
      GET
    • Get Account Details
      GET
    • Get Account Summary
      GET
    • Client Images
      GET
    • Update BVN
      POST
    • Update Transaction Limit
      POST
    • Client Notifications
      PUT
    • Get Savings Product
      GET
    • Get Account Interest
      GET
    • Close Account And Move Balance
      POST
    • Activate Client Account
      POST
    • Add Client Address
      POST
    • Update Client Address
      PUT
    • Get Full Account Details
      GET
    • Get Full Account Details By NUBAN
      GET
    • Upload Client Passport
      POST
    • Update NIN
      POST
    • Create Client
      POST
    • Get Directors
      GET
    • Create Directors
      POST
    • Update Directors
      PUT
    • Delete Director
      DELETE
    • Get Genders
      GET
    • Get Signatories
      GET
    • Create Signatories
      POST
    • Delete Signatory
      DELETE
    • Get Template
      GET
  • KYC
    • Get KYC Info
    • Update KYC
    • Get KYC Level
    • Auto Verify KYC
    • Get KYC Comparison Details
    • Face Comparison
    • Get KYC Info
    • Get KYC Settings
    • Get KYC Info
    • Create Face Liveness Session
    • Get KYC Log Details
    • Get KYC Logs
    • Set KYC Level
    • Set KYC Log Status
  • Transaction
    • Payment Types
    • Debit Account
    • Credit Account
    • Transaction History
    • Transaction Details [Legacy]
    • Transaction Details
    • Get All Transactions
  • Transfer
    • Interbank Transfer
      • Get Institutions
      • Name Inquiry
      • Interbank Transfer
      • InterBank Transfer Query
      • Transfer Details
      • Bulk Interbank Transfer
    • Intrabank Transfer
      • IntraBank Transfer
      • Intrabank Transfer To Virtual Accounts
      • Query Intrabank Transfer Status
      • Intrabank Transfer To Virtual Accounts
      • Query Intrabank Transfer To Virtual Account Status
  • Account Restrictions
    • Block Debit
    • Unblock Debit
    • Hold Amount
    • Release Amount
    • Block Account
    • Block Account Credits
    • Unblock Account
    • Unblock Account Credits
  • Loans
    • Loans Guide
    • Loan Booking
      • Submit Loan Application
      • Update Loan Application
      • Delete Loan Application
      • Approve Loan
      • Assign Loan Officer
      • Reject Loan
    • Loan Management
      • List Customer's Loans
      • Calculate Loan Schedule
      • Retrieve Loan
      • Disburse Loan
      • Disburse Loan to Savings
      • Recover From Guarantors
      • Calculate Loan Schedule with Term Variations
      • Create Loan Term Variations
      • Remove All Loan Term Variations
      • Unassign Loan Officer
      • Undo Loan Approval
      • Undo Loan Disbursal
      • Withdraw Loan
    • Loan Transactions
      • Foreclose Loan
      • Loan Pre-Closure Template
      • Make Loan Recovery Payment
      • Refund Active Loan by Cash
      • Enter Loan Repayment
      • Undo Loan Write-Off
      • Waive Loan Interest
      • Write Off Loan
      • Retrieve Loan Transaction
      • Adjust Loan Transaction
    • Loan Reschedule
      • Create Loan Reschedule Request
      • Retrieve Loan Reschedule Request
      • Approve Loan Reschedule Request
      • Preview Loan Reschedule
      • Reject Loan Reschedule Request
  • Fixed Deposits
    • Fixed Deposit Guide
    • List Fixed Deposit Products
      GET
    • Get Fixed Deposit Product
      GET
    • Open Fixed Deposit
      POST
    • Get Fixed Deposit
      GET
    • Preview Fixed Deposit Early Closure
      POST
    • Close Fixed Deposit Early
      POST
    • Change Fixed Deposit Maturity Instruction
      PUT
  • Recurring Deposits
    • Recurring Deposits
    • List Recurring Deposit Products
    • Get Recurring Deposit Product
    • Preview Recurring Deposit Early Closure
    • Close Recurring Deposit Early
    • Open Recurring Deposit
    • Get Recurring Deposit
    • Pay Recurring Deposit Instalment
    • Withdraw From Recurring Deposit
    • Set Up Recurring Deposit Auto-Debit
    • Cancel Recurring Deposit Auto-Debit
  • Organisation
    • Get Address Types
    • Get Offices
    • Get States
  • Reporting
    • Report Types
    • Get Report Parameters
    • Create Report
    • Report Details
    • Get Reports
  • Schemas
    • Client
    • Product
    • ClientNotificationsRequest
    • ClientNotificationsResponse
    • ErrorDetail
    • ErrorResponse
    • ValidationErrorResponse
    • LoanCustomer
    • LoanApplicationRequest
    • LoanApproveRequest
    • LoanRejectRequest
    • LoanWithdrawRequest
    • LoanNoteRequest
    • LoanAssignOfficerRequest
    • LoanUnassignOfficerRequest
    • LoanDisburseRequest
    • LoanTransactionRequest
    • LoanAdjustTransactionRequest
    • LoanDateNoteRequest
    • LoanPassthroughRequest
    • LoanRescheduleRequest
    • LoanRescheduleApproveRequest
    • LoanRescheduleRejectRequest
    • LoanCommandResult
    • Loan
    • LoanSummary
    • LoanTransaction
    • LoanRescheduleRequestData
    • LoanSchedule
    • LoanTemplate
    • FixedDepositOpenRequest
    • MaturityInstructionRequest
    • DepositClosureRequest
    • RecurringDepositOpenRequest
    • RecurringAmountRequest
    • AutoDebitRequest
    • SavingsCloseRequest
  1. Fixed Deposits

Fixed Deposit Guide

This guide explains how a customer locks an amount for a set period and earns interest, and shows which API call does each step
and which message you receive when something happens. You do not need to know anything about banking or this API before you start.
Part 1 explains the words used everywhere else.
Part 2 explains the rules every call follows.
Part 3 is a worked story: open, look, close early, maturity.
Part 4 shows the notifications you receive, with the exact message for each.
Parts 5 to 7 are for looking things up: every route, common errors, and things worth knowing.
All example data is made up. All money is in naira (NGN). Responses marked (shortened) show the fields you will use. Interest figures
are illustrative: the deposit product decides the rates and rules.
Related guides: recurring-deposits-guide.md, savings-guide.md.

1. Concepts in plain words#

WordWhat it meansWhere you see it
Main accountThe customer's ordinary savings account. The principal comes from it, and money from the deposit goes back to it.nuban in every call
Fixed deposit (FD)The customer locks one amount for a set period and earns interest on it./core/fixed-deposits
Deposit productA template made by the bank: allowed amounts and periods, interest rates, early closure penalty.productId
PrincipalThe amount put in.depositAmount, principal
MaturityThe end of the period; the deposit has earned its full interest.maturityDate, maturityAmount
Maturity instructionWhat happens at maturity: pay out, pay to the main account, or reinvest.maturityInstruction
Early closureClosing before maturity; the bank may reduce the interest (a penalty). Preview first.early-closure
Withholding taxTax taken from interest, shown separately.withholdingTaxDeducted

2. How the fixed deposit APIs work#

All routes are under {tpGatewayHostUrl}.

2.1 Signing in#

Every call uses the same bearer token as the other /core routes. Your merchant account must be set up for deposits; if it is not you
get 401 with Access Denied or No Access To Core Banking. Contact the bank's support.

2.2 The customer rule#

Every call names the customer's main account by nuban (in the body on POST and PUT, in the query on GET and DELETE).
The deposit must belong to the owner of that account. A deposit that belongs to someone else is a 404 Deposit Account Not Found,
exactly as if it did not exist.

2.3 The one deposit identifier: accountNo#

A deposit is addressed by its account number (accountNo), the same number you see on the customer's statement. Use the
accountNo returned when you open the deposit. Other ids in responses are for the bank's own use and are never accepted as input.

2.4 Dates and amounts#

Dates are yyyy-MM-dd; a date that is not a real date (for example 2026-02-31) is refused with 400. A date you leave out
defaults to today. Amounts are plain numbers in naira, at least 0.01.

2.5 Periods#

depositPeriodFrequencyId: 0 days, 1 weeks, 2 months, 3 years.

2.6 Errors#

Errors use the same body as the rest of the API. The ones you will meet most:
StatusMessageMeaning
400The Following Parameters Contain ErrorsA field is missing or wrong; parameters names it, for example "nuban is required".
401Access Denied / No Access To Core BankingYour merchant is not set up for this call.
404Deposit Account Not FoundThe accountNo is not a deposit of this customer.
404Savings account with external identifier ... does not existThe nuban matches no account.
4xx(the bank's own message)A business rule: wrong status, amount outside the product limits, not enough balance, and so on.

2.7 Repeating a call safely#

There is no idempotency key. Before you repeat a call that may have worked, read the deposit and the main account's transactions first.

3. Life of a fixed deposit#

Open -> Active -> either Matured (at the end of the period) or Closed (early closure, or after maturity).
Opening takes one call: the deposit is created, approved and activated, and the principal moves from the main account.

Step 1. See the products#

GET /core/fixed-deposits/products lists them; GET /core/fixed-deposits/products/{productId} shows one (interest slabs, allowed
periods, minimum and maximum deposit, early closure penalty). Choose a productId.

Step 2. Open the deposit#

POST /core/fixed-deposits
{
  "nuban": "1234567890",
  "productId": 4,
  "depositAmount": 100000,
  "depositPeriod": 12,
  "depositPeriodFrequencyId": 2,
  "maturityInstruction": "TRANSFER_TO_MAIN_ACCOUNT",
  "transferInterestToMainAccount": false
}
FieldMeaning
nubanMain account. The principal is taken from it.
maturityInstructionWITHDRAW_DEPOSIT (pay out), TRANSFER_TO_MAIN_ACCOUNT, REINVEST_PRINCIPAL_AND_INTEREST or REINVEST_PRINCIPAL_ONLY.
transferInterestToMainAccountOptional. true credits interest to the main account as it is posted.
Response (shortened): the new deposit as the bank holds it.
{
  "id": 9,
  "accountNo": "000000009",
  "status": { "id": 300, "code": "savingsAccountStatusType.active", "value": "Active" },
  "depositAmount": 100000,
  "depositPeriod": 12,
  "nominalAnnualInterestRate": 10,
  "maturityDate": [2027, 11, 10],
  "maturityAmount": 110000,
  "currency": { "code": "NGN" }
}
Keep accountNo.

Step 3. Look at the deposit#

GET /core/fixed-deposits/000000009?nuban=1234567890
{
  "accountNo": "000000009",
  "status": { "id": 300, "code": "savingsAccountStatusType.active", "value": "Active" },
  "productName": "12 Month Fixed Deposit",
  "principal": 100000,
  "interestRate": 10,
  "depositPeriod": 12,
  "maturityDate": "2027-11-10",
  "maturityAmount": 110000,
  "interestSoFar": 2740.0,
  "interestPosted": 0,
  "withholdingTaxDeducted": 0,
  "accountBalance": 100000,
  "maturityInstruction": { "id": 200, "value": "Transfer to savings" },
  "currency": { "code": "NGN" }
}

Step 4. Close early: preview, then close#

POST /core/fixed-deposits/000000009/early-closure/preview with
{ "nuban": "1234567890", "closedOnDate": "2026-11-10" }
returns what would be paid, with the penalty applied, and changes nothing (shortened):
{ "preClosurePenalApplicable": true, "preClosurePenalInterest": 1.0, "interestAccrued": 2200.5, "payoutAmount": 102200.5 }
POST /core/fixed-deposits/000000009/early-closure with the same body closes the deposit and pays the full amount to the main
account
. Response (shortened): { "savingsId": 9, "resourceId": 9, "changes": { "status": { "value": "Premature Closed" } } }.
You also receive FD_PREMATURE_CLOSED (Part 4).

Step 5. Change what happens at maturity#

PUT /core/fixed-deposits/000000009/maturity-instruction with { "nuban": "1234567890", "maturityInstruction": "WITHDRAW_DEPOSIT" }.
The bank only accepts this while the deposit is waiting for approval. On an active deposit you get the bank's refusal
(not.in.submittedandpendingapproval); choose the instruction when you open the deposit.

Step 6. At maturity#

At the end of the period the bank's nightly job marks the deposit matured and you receive FD_MATURED. If the instruction was
transfer or reinvest, it is carried out in the same run (maturityInstructionApplied is true); otherwise the deposit stays
matured until the bank closes it (FD_CLOSED).


4. Notifications you receive#

When something happens to a deposit, a message is placed on the same queue as your transaction messages. They are told apart by
eventType. Rules for all of them:
The queue is FIFO. The message group is the customer's main account nuban, and the deduplication id is eventId.
eventId is unique per event. Store it and ignore a message you have seen.
Delivery is best effort. A message that cannot be sent is logged on our side and not retried, so do not rely on notifications
alone: read the deposit if a message may have been missed.
Messages are sent after the action has completed, never for an action that failed.
Amounts are numbers in currency; dates are yyyy-MM-dd; timestamp is when the bank raised the event.
nuban is the customer's main account. depositAccountNo is the deposit's accountNo. amounts, dates and details contain only
the fields that apply.
Common shape:
FieldMeaning
eventId, eventType, depositTypeThe event, and FIXED_DEPOSIT or RECURRING_DEPOSIT.
depositAccountNo, nuban, clientId, currencyThe deposit, its main account, the customer, the currency.
amounts, datesMoney and dates of the event.
detailsaccountId, linkedSavingsAccountId, linkedSavingsAccountNo, plus event specific fields. onAccountClosureId is 100 pay out, 200 transfer to savings, 300 reinvest principal and interest, 400 reinvest principal only.

4.1 FD_MATURED: a fixed deposit reached its maturity date#

Sent by the nightly maturity job. maturityInstructionApplied is true when a transfer or reinvest instruction was carried out in the
same run; in that case there is no separate FD_CLOSED.
{
  "eventId": "3f1f0c9e-6a8f-4b6e-9a53-0f7c2d9a1b11",
  "eventType": "FD_MATURED",
  "depositType": "FIXED_DEPOSIT",
  "depositAccountNo": "000000009",
  "nuban": "1234567890",
  "clientId": 2048,
  "currency": "NGN",
  "amounts": { "depositAmount": 100000.0, "maturityAmount": 110000.0, "nominalAnnualInterestRate": 10.0, "accountBalance": 110000.0 },
  "dates": { "activationDate": "2026-01-01", "maturityDate": "2027-01-01" },
  "details": { "accountId": 9, "linkedSavingsAccountId": 5120, "linkedSavingsAccountNo": "000005120", "onAccountClosureId": 100, "maturityInstructionApplied": false },
  "timestamp": "2026-11-09T00:30:12Z"
}

4.2 FD_PREMATURE_CLOSED: a fixed deposit was closed before maturity#

payoutAmount is what was paid out or transferred, interest and penalty included.
{
  "eventId": "3f1f0c9e-6a8f-4b6e-9a53-0f7c2d9a1b11",
  "eventType": "FD_PREMATURE_CLOSED",
  "depositType": "FIXED_DEPOSIT",
  "depositAccountNo": "000000009",
  "nuban": "1234567890",
  "clientId": 2048,
  "currency": "NGN",
  "amounts": { "depositAmount": 100000.0, "maturityAmount": 110000.0, "nominalAnnualInterestRate": 10.0, "payoutAmount": 102500.5 },
  "dates": { "activationDate": "2026-01-01", "maturityDate": "2027-01-01", "closedOnDate": "2026-11-09" },
  "details": { "accountId": 9, "linkedSavingsAccountId": 5120, "linkedSavingsAccountNo": "000005120", "onAccountClosureId": 200, "toSavingsAccountId": 5120 },
  "timestamp": "2026-11-09T14:02:51Z"
}

4.3 FD_CLOSED: a fixed deposit was closed (after maturity)#

Same shape as 4.2 with "eventType": "FD_CLOSED", payoutAmount equal to the final balance and closedOnDate the closing date.
{
  "eventId": "9a3d5c10-2b7e-4e0a-8c64-51d9b0e7a2f3",
  "eventType": "FD_CLOSED",
  "depositType": "FIXED_DEPOSIT",
  "depositAccountNo": "000000009",
  "nuban": "1234567890",
  "clientId": 2048,
  "currency": "NGN",
  "amounts": { "depositAmount": 100000.0, "maturityAmount": 110000.0, "nominalAnnualInterestRate": 10.0, "payoutAmount": 110000.0 },
  "dates": { "activationDate": "2026-01-01", "maturityDate": "2027-01-01", "closedOnDate": "2027-01-02" },
  "details": { "accountId": 9, "linkedSavingsAccountId": 5120, "linkedSavingsAccountNo": "000005120", "onAccountClosureId": 100 },
  "timestamp": "2027-01-02T09:15:40Z"
}

5. Quick reference: every fixed deposit route#

"Customer" is nuban: in the body on POST and PUT, in the query on GET. {no} is the deposit's accountNo.
RouteWhat it doesKey fields
GET /core/fixed-deposits/products[/{productId}]List or read products
POST /core/fixed-depositsOpen (create, approve, activate)nuban, productId, depositAmount, depositPeriod, depositPeriodFrequencyId, maturityInstruction, transferInterestToMainAccount
GET /core/fixed-deposits/{no}Readnuban
POST /core/fixed-deposits/{no}/early-closure/previewPayout if closed nownuban, closedOnDate
POST /core/fixed-deposits/{no}/early-closureClose early, pay the main accountnuban, closedOnDate
PUT /core/fixed-deposits/{no}/maturity-instructionChange the maturity instruction (pending deposits only)nuban, maturityInstruction

6. Common errors and what to do#

You seeWhyWhat to do
401 Access Denied or No Access To Core BankingYour merchant is not set up for this callAsk the bank to enable deposits for your merchant
404 Deposit Account Not FoundWrong accountNo, or it belongs to another customerCheck the accountNo and nuban pair
400 "nuban is required"Missing customerSend the main account nuban
403 User has no authority to: <PERMISSION>The bank user behind your merchant may not do thisAsk the bank to grant the named permission
Bank's own 4xx on openingAmount or period outside the product limits, or not enough balanceRead the product, and check the main account balance
Modified at 2026-11-10 10:43:19
Previous
Reject Loan Reschedule Request
Next
List Fixed Deposit Products
Built with