Developer Guides
Double-entry ledger integration for Nigerian fintechs: Build Auditable Wallet Balances
Build wallet balances that remain explainable through pending transfers, reversals and reconciliation. This guide covers ledger design, posting rules and a practical Paddle integration checklist.
Double-entry ledger integration for Nigerian fintechs is about more than displaying a naira balance. It gives your team a defensible record of who owns funds, what is available to spend and why every balance changed. For a wallet-enabled marketplace or business finance product, that record becomes essential when transfers are delayed, events arrive twice or customers dispute their transaction history.
This guide explains how to design the accounting layer around Nigerian collections and payouts, then connect it to Paddle’s financial infrastructure. The focus is an auditable wallet model—not another transfer endpoint tutorial.
Why a wallet balance needs a ledger
A mutable balance column can support an early prototype. It becomes fragile when several operations compete for the same funds or when a payment changes state after your application records it.
Suppose a customer receives ₦25,000 and requests a ₦7,000 payout. Your product must distinguish between money received, money reserved for that payout and money still available. If the payout fails, the reservation must be released without inventing a second deposit.
A double-entry ledger records each movement as balanced entries across accounts. For every journal, total debits equal total credits within the same currency. This makes inconsistencies easier to detect, although balanced entries alone do not prove that a payment actually happened.
The ledger should explain balances. Provider records and bank statements should independently substantiate them.
Design double-entry ledger integration for Nigerian fintechs
Start with an explicit boundary: your product ledger records financial obligations and movements; it does not itself hold bank deposits or grant permission to offer regulated services.
Paddle is a banking-as-a-service platform by Pickpadi Global Ltd, not a bank. Banking services are provided by CBN-licensed partner banks. Your product’s permissible structure depends on its operating model and applicable requirements. Check current guidance and obtain qualified advice where needed; this guide is not legal advice.
Define accounts by economic purpose
An illustrative account model for a platform accounting for customer funds includes:
- Partner-bank settlement asset: funds represented by the relevant bank or settlement records.
- Customer available liability: the amount owed to a customer that is available for use.
- Customer reserved liability: customer funds committed to an unfinished operation.
- Unallocated receipt liability: incoming funds whose beneficiary is not yet identified.
- Fee revenue and fee expense accounts: separate accounts for earned charges and incurred costs.
The correct treatment depends on your contractual relationship to the funds. Have an accountant validate the chart of accounts rather than copying this model blindly.
Keep accounts currency-specific. A naira debit cannot balance a dollar credit simply because both entries share a transaction reference.
Establish identifiers before integration
Use different identifiers for the customer request, internal business operation, ledger journal and provider transaction. Store their relationships explicitly.
A provider reference answers “which external transaction is this?” A journal identifier answers “which accounting entry recorded its effect?” Treating them as interchangeable makes adjustments and investigations harder.
Model the complete balance lifecycle
Use a small set of posting templates that engineers, finance and operations can review together. The following examples assume the liability-based model above and omit fees.
Record an incoming collection
Once your agreed recognition criteria are met for a ₦25,000 collection:
- Debit partner-bank settlement asset: ₦25,000.
- Credit customer available liability: ₦25,000.
Do not credit spendable funds merely because a browser redirects to a success page. Use authenticated server-side evidence and the documented transaction status. Confirm whether that status represents receipt, settlement or another stage before defining your posting rule.
Reserve funds before a payout
For a ₦7,000 payout request:
- Debit customer available liability: ₦7,000.
- Credit customer reserved liability: ₦7,000.
The customer now has ₦18,000 available and ₦7,000 reserved. Total customer liability remains ₦25,000 because no money has left under this simplified model.
Check availability and create the reservation atomically. Otherwise, two simultaneous payout requests can both pass the same balance check.
Finalise or release the reservation
When sufficient evidence confirms the payout has completed:
- Debit customer reserved liability: ₦7,000.
- Credit partner-bank settlement asset: ₦7,000.
If the payout definitively fails before funds leave, release the reservation:
- Debit customer reserved liability: ₦7,000.
- Credit customer available liability: ₦7,000.
An unknown outcome is not a failure. Keep the reservation in place while investigating. If bank debits and payout completion occur at different times, introduce an appropriate clearing account rather than forcing both events into one posting.
Make journals immutable and posting atomic
Posted entries should not be edited to make balances look right. Correct errors through linked reversal or adjustment journals, preserving the original record and the reason for the correction.
Your posting service should enforce:
- Balanced debits and credits for each currency.
- Valid, active accounts with compatible currencies.
- Integer minor-unit amounts instead of floating-point arithmetic.
- Unique keys for each business operation and accounting effect.
- Atomic creation of the journal and all its entries.
For NGN, store kobo internally, but follow the documented amount convention at each API boundary. Never assume every endpoint uses your internal unit.
A unique posting key might combine an operation identifier with an effect such as reserve or complete. Enforce that uniqueness in storage. An application-level “already processed?” check is insufficient when concurrent workers can both pass it.
Cached balances can improve read performance, but they must remain consistent with committed entries and rebuildable from the ledger.
Connect Paddle without creating two sources of truth
Paddle offers ledgers alongside virtual accounts, NIP payouts to 120+ Nigerian banks and other financial services. Before implementation, review the current documentation to establish supported ledger operations, account structures and transaction-event behaviour.
Decide which system owns the authoritative product balance. If Paddle’s ledger capabilities meet your requirements, use them according to their documented guarantees. If you maintain an internal accounting ledger, define exactly how its entries map to Paddle transactions. Avoid two independently writable balances with no reconciliation contract.
Build an integration layer that translates documented provider statuses into your own business states. Keep provider payloads separate from accounting decisions so a new event field does not silently change posting behaviour.
Where webhooks are supported, follow the documented authentication procedure, durably record accepted events and process them with retry-safe workers. Expect duplicate or out-of-order delivery. Where supported, transaction retrieval can help resolve ambiguous outcomes.
Reconcile accounting against external evidence
Run two distinct checks. Internal reconciliation verifies balanced journals and agreement between entries and balance projections. External reconciliation compares your records with provider transaction histories and relevant bank or settlement statements.
Match records using references, currency, amount and the appropriate accounting period. Timing differences should be explained, not automatically classified as losses or gains.
Route unresolved items into an exception queue with an owner, supporting evidence and a next action. Examples include a bank debit without a completed internal payout, an unmatched incoming collection or a completed provider transaction without a journal.
Never post unexplained differences directly into revenue just to close the queue.
Practical launch checklist
Before exposing wallet balances to customers:
- Approve the account model. Have finance and engineering review ownership, liabilities, clearing accounts and fee treatment.
- Document posting triggers. Specify the evidence required for collection recognition, reservation, completion and release.
- Test concurrency. Submit competing requests against the same available funds and verify that overspending is prevented.
- Replay events. Confirm duplicates and reordered notifications cannot create additional financial effects.
- Exercise uncertainty. Simulate timeouts, missing notifications and delayed bank movements without prematurely releasing funds.
- Test corrections and access controls. Require authorised, traceable adjustment journals rather than direct balance edits.
- Prove reconciliation. Investigate representative mismatches and rebuild balance projections before launch.
Build it with Paddle
Paddle brings ledger capabilities, virtual accounts and Nigerian payout infrastructure into your integration planning. Start with one currency, a reviewed account model and a complete collection-to-payout lifecycle before expanding your product.
Create a free account to explore Paddle, then read the API docs to confirm the current ledger interfaces, transaction statuses and integration requirements. Build balances that your customers can trust—and your engineering and finance teams can explain.
Keep reading
Virtual Account Provisioning API for Nigerian Fintechs: Build a Safe Account Lifecycle
Build a reliable virtual account provisioning flow for Nigerian customers, from eligibility checks and duplicate prevention to account restrictions and closure.
Payment Webhook Security for Nigerian Fintechs: A Developer Guide
Build a secure webhook pipeline for Nigerian payment products, from authenticity checks to replay protection and recovery. Learn how to connect Paddle events to controlled business workflows without trusting every incoming request.
Airtime and Data API Integration in Nigeria: Build a Reliable Top-Up Flow
Build an airtime and data purchase flow that handles uncertain delivery, duplicate requests, and refunds. This developer guide covers product discovery, ledger design, status handling, and launch checks for Nigerian digital businesses.
Paddle Build Studio
Want us to build it with you?
Build for Africa and the world. Our team can deliver your fintech, web or mobile product in 2–3 weeks — or integrate Paddle APIs and build it yourself.