Skip to content

Fees, VAT and stamp duty

The platform levies charges on two kinds of payment: interbank (NIP) transfers and bill payments. Internal movements (fund, charge, deposit, wallet-to-wallet) carry no platform fee. Your API usage is billed separately and is covered in API access and billing.

Three charges can attach to an outward NIP transfer. Each one is configured by the bank per tenant, and each can be charged to the customer or absorbed by the bank independently.

Charge How it is worked out Default (no tenant config)
Bank fee A flat amount by tier of the transfer amount. Up to ₦5,000: ₦10. Up to ₦50,000: ₦25. Above: ₦50.
VAT A percentage of the bank fee. 7.5%
Stamp duty A flat amount on transfers above a threshold. ₦50 on amounts over ₦10,000. A transfer of exactly ₦10,000 attracts none.

A fourth charge, the NIBSS switch fee, is always borne by the bank and never reaches a statement.

The balance check before a transfer is against principal plus every customer-borne charge, so a wallet holding exactly the principal is refused with 0004.

Each charge is its own statement line, posted at the moment of the debit, immediately after the principal:

Line Type Reference Narration
Principal NIP_OUTWARD NIP… Your memo, or NIP transfer to <beneficiary>
Bank fee FEE NIP…-FEE Transfer Fee
VAT TAX NIP…-VAT VAT on Transfer Fee
Stamp duty STAMP_DUTY NIP…-SD Stamp Duty

All four carry your transactionRef as their client reference; Check a transaction skips the three charge lines and answers for the principal. A bank-absorbed charge produces no line at all.

The principal line’s metadata carries the amounts whether or not the customer paid them:

{
"beneficiaryName": "ADEBAYO OGUNDIMU",
"beneficiaryAccount": "0123456789",
"beneficiaryBank": "000013",
"beneficiaryBankCbnCode": "058",
"beneficiaryBankName": "Guaranty Trust Bank",
"nipSessionId": "100003260401143000000042",
"senderName": "ACME PAYMENTS LTD",
"senderAccount": "6020012345",
"feeAmount": 25.00,
"vatAmount": 1.88,
"stampDutyAmount": 50.00
}

The same keys appear in the transaction.completed webhook for the principal, and nip.transfer.completed carries feeAmount. See Events and payloads.

When a transfer fails or is returned, the principal and each charge line are refunded, as REVERSAL lines against the originals. A customer is never left paying a fee for a payment that did not happen.

A bill payment’s fee is set by the biller and product configuration the bank holds, and the bank can override it for agents. It is computed as a flat amount plus a percentage of the amount, clamped to a minimum and maximum, with optional amount bands that override all of that. Ask for it before paying with the fee estimate endpoint.

bearing Who pays The wallet is debited
SUBSCRIBER The payer. Amount plus fee.
MERCHANT The biller, out of its settlement. The amount only.

Unlike NIP, the fee is not a separate statement line. The wallet sees one BILL_PAYMENT (or AIRTIME_PURCHASE) debit for the total, with the split in its metadata:

{
"billerName": "Ikeja Electric",
"billerCode": "IKEDC",
"billType": "UTILITY",
"productName": "Prepaid",
"subscriberId": "04512345678",
"amount": "15000.00",
"feeAmount": "100.00",
"totalDebit": "15100.00",
"token": "1234-5678-9012-3456-7890",
"units": "52.3",
"receipt": "IE-RCPT-000771",
"providerReference": "CP-20260401-9981"
}

The fee is then shared out between parties named in the configuration, typically BANK, AGENT and SWITCH. The agent share is a commission: it is paid to the fee account of an agent, merchant or corporate that made the payment, and kept by the bank when an individual pays their own bill. If your organisation is set up to earn commission, it arrives on your fee account as its own credit line after the biller confirms.

No VAT or stamp duty is added to bill payments by the platform.

Fund, charge, deposit and wallet-to-wallet transfers carry no platform fee, VAT or stamp duty. The two statement lines (TRANSFER_OUT, TRANSFER_IN) are for the exact amount.

Where the bank has set a fee on a virtual-account band, it is withheld from the inflow: the settlement account is credited net, and the credit’s metadata carries grossAmount, feeAmount and the net amount. There is no separate fee line. See Virtual accounts.

Per-call charges for using the API are recorded against your client and collected nightly from your designated fee account as one FEE line per day. They never attach to a customer transaction. See API access and billing.

The Transactions register shows FEE, TAX and STAMP_DUTY lines beside the principal they belong to, and the Overview page’s money-out breakdown shows fees, tax and stamp duty as their own slices.