Skip to main content
Bank transfers are how Nigerian corporate finance teams operate. They don’t swipe cards — they log into their banking app, initiate a transfer, and attach a reference. Transfer billing handles this automatically: every customer gets a dedicated account number, and any transfer to that account is matched to their open invoice.

The Bob scenario

Imagine Bob runs a 50-person logistics company. He signs up for your ₦12,000/month Max plan but his finance team doesn’t do card payments — they do bank transfers from their corporate account. Here’s how you handle Bob.
1

Create Bob as a customer

2

Provision a virtual account

Give Bob a dedicated bank account number. Transfers to this account will be matched to his invoices automatically.
Response
This account number is Bob’s forever. Every transfer he sends to it will be matched to his account — even if his invoice changes or he changes plans.
3

Show Bob his account details

Display the account number and bank name in your customer portal or email. Bob’s finance team sends their transfers here.
No reference number needed — the dedicated account handles matching.
4

Create the subscription on transfer rail

Response
On a transfer subscription, next_bill_at is when we open the invoice and start waiting. No card is charged.
5

Bob pays — we match automatically

Bob’s finance team sends ₦12,000 (1200000 kobo) to account 0123456789 at Nomba MFB.Nomba sees the inbound transfer → matches it to Bob’s open invoice → marks the invoice paid → subscription renews.You receive:
  • transfer.matched — transfer received and matched
  • invoice.paid — invoice settled
  • subscription.renewed — billing period advanced
6

If Bob pays the wrong amount

Underpayment (₦11,000 on a ₦12,000 invoice):The invoice moves to partially_paid. Bob still owes ₦1,000 (100000 kobo). The transfer.partial webhook fires. His subscription stays active — access isn’t cut — but the open balance stays on his account. The next transfer from his virtual account clears it.
transfer.partial payload
Overpayment (₦13,000 on a ₦12,000 invoice):Invoice is marked paid. The extra ₦1,000 goes to Bob’s customer balance. It offsets his next invoice automatically.Unknown transfer (no open invoice):If a transfer arrives and there’s no open invoice — maybe Bob paid early — it goes into suspense. You resolve it via POST /admin/suspense/:id/resolve. See the admin API.