Chart of Accounts Guide

Build robust financial foundations with our chart of accounts system. From business templates to custom hierarchies, learn how to structure accounts for regulatory compliance and operational efficiency.

Understanding Chart of Accounts

The foundation of any financial system - learn how accounts work and why structure matters.

What is a Chart of Accounts?

A chart of accounts is your financial roadmap - a structured list of all accounts used to categorize and track financial transactions. Think of it as the skeleton of your financial system:

  • Assets - What you own (cash, receivables, equipment)
  • Liabilities - What you owe (customer deposits, payables)
  • Equity - Owner's stake in the business
  • Revenue - Money earned from operations
  • Expenses - Costs of doing business

Why Structure Matters

For Regulatory Compliance

  • CBN examinations require clear account structures
  • Audit trails must map to specific account categories
  • Financial reporting follows standardized formats

For Business Operations

  • Clear categorization of customer vs operational funds
  • Separate tracking of different revenue streams
  • Proper expense allocation for profitability analysis

For Scaling Your Business

  • Consistent structure across multiple currencies
  • Easy integration with accounting software
  • Automated reconciliation and reporting

Account Numbering Convention

Our templates follow standard numbering:

  • 1000-1999: Assets
  • 2000-2999: Liabilities
  • 3000-3999: Equity
  • 4000-4999: Revenue
  • 5000-5999: Expenses

This makes your books familiar to accountants and compatible with standard financial software.


Business Templates

Skip months of financial planning with our pre-built templates designed specifically for different fintech business models.

Wallet Template (Most Popular)

Perfect for digital wallets, mobile money, and stored value platforms.

curl -X POST https://api.sandbox.whocomply.com/v1/tenants/your-tenant/accounts/setup \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"business_type": "wallet"}'

Wallet Template Includes:

Asset Accounts

  • Settlement accounts (NGN, USD)
  • Customer wallet pools
  • Float accounts for operations
  • Receivables from payment partners

Liability Accounts

  • Customer deposit obligations
  • Regulatory reserves (CBN requirements)
  • Payables to merchants/partners

Revenue Accounts

  • Transaction fee revenue
  • FX spread revenue
  • Interchange income
  • Interest on float

Expense Accounts

  • Payment processing costs
  • Regulatory compliance costs
  • Technology infrastructure

Payment Processor Template

Designed for merchant services, payment gateways, and PSP operations.

curl -X POST https://api.sandbox.whocomply.com/v1/tenants/your-tenant/accounts/setup \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"business_type": "payments"}'

Payment Template Features:

  • Merchant settlement accounts
  • Escrow and reserve accounts
  • Chargeback and dispute handling
  • Rolling reserve management
  • Multi-acquirer reconciliation

Lending Template

Built for lending platforms, BNPL services, and credit providers.

curl -X POST https://api.sandbox.whocomply.com/v1/tenants/your-tenant/accounts/setup \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"business_type": "lending"}'

Lending Template Features:

  • Loan portfolio accounts
  • Interest income tracking
  • Provision for bad debts
  • Borrower deposit accounts
  • Regulatory capital accounts

Trading Template

Perfect for crypto exchanges, forex platforms, and securities trading.

curl -X POST https://api.sandbox.whocomply.com/v1/tenants/your-tenant/accounts/setup \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"business_type": "trading"}'

Trading Template Features:

  • Customer trading balances
  • Market maker positions
  • Trading fee revenue
  • Spread and commission income
  • Multi-asset support

Account Hierarchy

Master the parent-child relationships that make your chart of accounts both organized and flexible.

Understanding Hierarchy Levels

curl -X GET https://api.sandbox.whocomply.com/v1/tenants/your-tenant/accounts/hierarchy \
  -H "Authorization: Bearer your_api_key"

Hierarchy Best Practices

Level 0: Category Headers

  • Broad categories (Assets, Liabilities, etc.)
  • Usually not used for transactions
  • Provide structure and organization

Level 1: Sub-Categories

  • More specific groupings (Cash, Receivables)
  • May or may not have transactions
  • Useful for subtotals in reports

Level 2-3: Transaction Accounts

  • Where actual transactions are recorded
  • Specific to business operations
  • Include relevant metadata

Creating Hierarchical Accounts

curl -X POST https://api.sandbox.whocomply.com/v1/tenants/your-tenant/accounts \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "1102",
    "name": "Settlement Account - Access Bank",
    "account_type": "asset",
    "parent_code": "1100",
    "currency": "NGN",
    "metadata": {
      "bank_name": "Access Bank",
      "account_number": "9876543210",
      "branch": "Victoria Island"
    }
  }'

Path Generation: The system automatically creates paths like 1000.1100.1102 that show the complete hierarchy lineage.


Multi-Currency Accounts

Handle Nigerian Naira, US Dollars, British Pounds, and more with proper currency separation.

Currency-Specific Accounts

Why Currency Separation Matters - CBN compliance requires clear currency tracking - FX risk management needs separate balances - Regulatory reporting by currency - Customer funds segregation by currency

Supported Currencies - NGN (Nigerian Naira) - Default - USD (US Dollar) - GBP (British Pound) - EUR (Euro) - GHS (Ghana Cedi) - KES (Kenya Shilling)

Creating Multi-Currency Structure

curl -X POST https://api.sandbox.whocomply.com/v1/tenants/your-tenant/accounts \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "1101",
    "name": "Settlement Account - NGN",
    "account_type": "asset",
    "parent_code": "1100",
    "currency": "NGN"
  }'

Currency Balance Queries

curl -X GET https://api.sandbox.whocomply.com/v1/tenants/your-tenant/accounts/acc_xyz789/balance?currency=NGN \
  -H "Authorization: Bearer your_api_key"

Multi-Currency Best Practices

Account Naming Convention

  • Always include currency in account names
  • Use ISO currency codes consistently
  • Group by currency within categories

Balance Management

  • Query balances by specific currency
  • Never mix currencies in single accounts
  • Use separate accounts for FX operations

Account Metadata

Enrich your accounts with custom metadata for business operations and compliance tracking.

Common Metadata Use Cases

Banking Integration

  • Bank name and branch details
  • Account numbers and routing codes
  • SWIFT/BIC codes for international
  • Contact information for reconciliation

Customer Segmentation

  • Customer tiers (premium, standard)
  • Geographic regions
  • Product categories
  • Risk classifications

Regulatory Compliance

  • CBN classification codes
  • Risk category assignments
  • Compliance officer assignments
  • Audit trail requirements

Operational Data

  • Cost center allocations
  • Profit center assignments
  • Business unit mappings
  • Integration system IDs

Setting Account Metadata

curl -X POST https://api.sandbox.whocomply.com/v1/tenants/your-tenant/accounts \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "1103",
    "name": "Settlement Account - Zenith Bank USD",
    "account_type": "asset",
    "parent_code": "1100",
    "currency": "USD",
    "metadata": {
      "bank_name": "Zenith Bank",
      "bank_code": "057",
      "account_number": "5123456789",
      "swift_code": "ZEIBNGLA",
      "branch": "Lagos Island",
      "contact_person": "Jane Doe",
      "contact_email": "jane.doe@zenithbank.com",
      "contact_phone": "+234-801-234-5678",
      "is_primary_usd": true,
      "daily_limit": 50000.00,
      "monthly_limit": 1000000.00,
      "requires_dual_approval": true,
      "cost_center": "CC001",
      "business_unit": "International",
      "cbn_category": "DFI_SETTLEMENT"
    }
  }'

Updating Metadata

curl -X PUT https://api.sandbox.whocomply.com/v1/tenants/your-tenant/accounts/acc_abc123 \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "metadata": {
      "bank_name": "Zenith Bank",
      "daily_limit": 75000.00,
      "last_reconciled": "2025-01-15T00:00:00Z",
      "reconciliation_status": "completed"
    }
  }'

Metadata Querying

Use metadata to filter and organize accounts for different business needs:

  • Reconciliation dashboards - Find accounts by reconciliation status
  • Compliance reporting - Group by CBN categories
  • Operations management - Filter by business unit or cost center
  • Risk management - Identify high-limit or approval-required accounts

Nigerian Best Practices

Leverage our local expertise to build CBN-compliant financial structures from day one.

CBN Compliance Requirements

Customer Fund Segregation

  • Keep customer funds separate from operational funds
  • Use distinct account codes for easy identification
  • Maintain proper audit trails for all customer transactions

Regulatory Reporting

  • Structure accounts to match CBN reporting categories
  • Include required metadata for regulatory filings
  • Separate local and foreign currency operations

Reserve Requirements

  • Set up regulatory reserve accounts
  • Track required vs actual reserves
  • Automate reserve calculations where possible

Nigerian Account Structure Template

{
  "accounts": [
    {
      "code": "1000",
      "name": "Assets",
      "children": [
        {
          "code": "1100",
          "name": "Operational Cash",
          "children": [
            { "code": "1101", "name": "GTBank Operating Account - NGN" },
            { "code": "1102", "name": "Access Bank Operating Account - NGN" }
          ]
        },
        {
          "code": "1200",
          "name": "Customer Funds (Segregated)",
          "children": [
            { "code": "1201", "name": "Customer Wallet Pool - NGN" },
            { "code": "1202", "name": "Customer Wallet Pool - USD" },
            { "code": "1203", "name": "Customer Escrow - NGN" }
          ]
        },
        {
          "code": "1300",
          "name": "Regulatory Reserves",
          "children": [
            { "code": "1301", "name": "CBN Reserve Requirement" },
            { "code": "1302", "name": "NDIC Premium Reserve" }
          ]
        }
      ]
    }
  ]
}

Recommended Account Codes

Customer Operations

  • 12xx - Customer wallet pools and balances
  • 20xx - Customer deposit liabilities
  • 40xx - Transaction fee revenue
  • 41xx - FX spread revenue

Regulatory Compliance

  • 13xx - Regulatory reserves and requirements
  • 21xx - Regulatory provisions and obligations
  • 50xx - Compliance and regulatory expenses

Banking Integration

  • 11xx - Settlement and nostro accounts
  • 22xx - Due to/from banks and payment providers

Multi-Bank Setup

# GTBank Settlement
curl -X POST https://api.sandbox.whocomply.com/v1/tenants/your-tenant/accounts \
  -H "Authorization: Bearer your_api_key" \
  -d '{
    "code": "1101",
    "name": "Settlement Account - GTBank NGN",
    "currency": "NGN",
    "metadata": {
      "bank_name": "Guaranty Trust Bank",
      "bank_code": "058",
      "is_primary_ngn": true
    }
  }'

# Access Bank Settlement
curl -X POST https://api.sandbox.whocomply.com/v1/tenants/your-tenant/accounts \
  -H "Authorization: Bearer your_api_key" \
  -d '{
    "code": "1102",
    "name": "Settlement Account - Access Bank NGN",
    "currency": "NGN",
    "metadata": {
      "bank_name": "Access Bank",
      "bank_code": "044",
      "is_backup_ngn": true
    }
  }'

Custom Account Creation

Go beyond templates with custom accounts tailored to your specific business needs.

Planning Your Custom Structure

Before creating custom accounts, consider:

Business Requirements

  • What types of transactions will you process?
  • How do you want to categorize revenue streams?
  • What expense categories do you need to track?
  • Do you need project or customer-specific accounts?

Regulatory Requirements

  • Which CBN categories apply to your business?
  • What segregation is required for customer funds?
  • How will you handle multi-currency operations?
  • What reserves or provisions are required?

Operational Needs

  • How will you reconcile with banks and partners?
  • What metadata do you need for reporting?
  • How will you handle different business units?
  • What integration points do you have?

Custom Account Creation Workflow

curl -X POST https://api.sandbox.whocomply.com/v1/tenants/your-tenant/accounts \
  -H "Authorization: Bearer your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "1400",
    "name": "Merchant Receivables",
    "account_type": "asset",
    "currency": "NGN"
  }'

Advanced Account Features

Conditional Logic in Metadata

{
  "code": "1412",
  "name": "High-Risk Merchant Settlements",
  "metadata": {
    "risk_level": "high",
    "settlement_cycle": "T+7",
    "requires_manual_approval": true,
    "dual_approval_required": true,
    "max_daily_settlement": 100000.0,
    "auto_hold_threshold": 50000.0,
    "compliance_review_required": true,
    "escalation_contact": "risk@yourfintech.com"
  }
}

Integration-Specific Accounts

{
  "code": "1501",
  "name": "Paystack Integration Clearing",
  "metadata": {
    "integration_type": "payment_gateway",
    "provider": "paystack",
    "api_key_reference": "paystack_prod_key",
    "webhook_url": "https://yourapi.com/webhooks/paystack",
    "auto_reconciliation": true,
    "reconciliation_schedule": "hourly"
  }
}

Account Validation Rules

Our system validates accounts to prevent common mistakes:

  • Unique codes within each tenant
  • Valid parent references (parent must exist)
  • Consistent account types (assets under asset parents)
  • Currency consistency within account families
  • Hierarchy depth limits (maximum 5 levels)
  • Reserved code ranges (system accounts protected)

Testing Your Structure

curl -X GET https://api.sandbox.whocomply.com/v1/tenants/your-tenant/accounts/stats \
  -H "Authorization: Bearer your_api_key"

What's Next?

You now have a solid foundation in chart of accounts design. Here's how to continue building:

Ready for Transactions

  • Transaction Posting - Record debits and credits to your accounts
  • Balance Updates - Automatic balance calculations with conflict resolution
  • Double-Entry Validation - Ensure debits equal credits automatically
  • Multi-Currency Transactions - Handle FX and currency conversions

Integration Planning

// Your chart structure is ready for this:
const transaction = {
  description: 'Customer wallet funding',
  lines: [
    {
      account_code: '1101', // Settlement Account - GTBank
      debit: 50000.0,
      currency: 'NGN',
    },
    {
      account_code: '2001', // Customer Deposits - NGN
      credit: 50000.0,
      currency: 'NGN',
    },
  ],
}

Additional Resources

Get Help & Stay Updated


🏗️ Your Financial Foundation is Ready! You now have the knowledge to build robust, compliant chart of accounts that will scale with your fintech business.

Was this page helpful?