Bank transfer to your virtual account
The most common path. You already have a static virtual account; you printed the ten digits on a card taped to the counter. The customer opens their bank app, enters the account number and bank name, types ₦5,000, hits send. Their bank app shows them the name — Adeyemi Bisi Provisions — and they confirm. OPay’s NIBSS layer carries the transfer. Webhook lands. Reconcile guard runs. Your wallet credits. Phone buzzes. Three to four seconds from their tap to your buzz. The receipt on your side shows the sender’s name and the masked account number. The receipt on their side shows your business name and the official transaction reference. Both can be retrieved later from the audit ledger.Wallet-to-wallet (Guild to Guild)
If your customer is also a Guild user (another trader, a Job Seeker, an employer paying for goods), they can pay you straight from their Guild wallet. No bank in the middle. They open WhatsApp, send something like “send ₦5,000 to Adeyemi Bisi” — the intent engine routes them to a transfer flow, asks them to confirm the recipient (by name or phone), and fires the transaction. Wallet-to-wallet is instant. We debit theirs, credit yours, write two audit rows. No OPay round-trip needed because the money never leaves the platform. This is rarer than bank transfer in the field, but it shows up in two places worth knowing:- Employers paying traders for materials. A site contractor paying his usual supplier for cement.
- Job Seekers paying for goods. A bricklayer in Ife buying lunch from a food vendor who’s on Guild.
Dynamic virtual account (for invoiced payments)
Use this when you want to enforce a specific amount. A wholesale customer wants to pay ₦15,000 for a bulk order; you create a dynamic VA for exactly ₦15,000 with a 30-minute window. Send them the ten-digit number. They transfer. The account expires. Why bother? Three reasons.- No underpayment confusion. If they transfer ₦12,000 by mistake, the webhook arrives with
transaction_status: MISMATCH. You see it in a review queue and decide whether to accept, refund, or message them for the balance. - No overpayment confusion. Same flow on the other side.
- Cleaner audit row. The transaction is tagged with the dynamic VA’s reference, so the ledger entry sits as its own line item — easier to reconcile against an invoice later.
create one-time account ₦15,000 30 minutes), from the web dashboard, or programmatically via the API if you’ve built integrations.
QR code (in person or printed)
Your virtual account details encode into a QR code we generate. You print it, tape it to the counter, or stick it on the back of a flyer. A customer with a smartphone scans the QR with their bank app — most Nigerian banks now support QR-based transfers — and the transfer fires with your account pre-filled. This is faster than reading ten digits out loud, and the customer can’t typo it.What happens after every payment
Same flow, every rail.1
OPay fires a webhook
Or, for wallet-to-wallet, our own internal handler fires.
2
We verify signatures, run reconcile guard
Detailed in Webhook security. The short version: even if an attacker had our webhook secret, they couldn’t fake an inflow — we re-verify against OPay’s authoritative endpoint before crediting anything.
3
Wallet credit
Your balance goes up. Audit row written. Append-only — that row stays for the life of the database.
4
Notification
SMS to your phone. WhatsApp message if you’re active there.
5
Standing model invalidates your tier cache
Next time your standing reads, the model recomputes from the fresh ledger.
Refunds
Sometimes a customer pays and then asks for their money back — wrong amount, changed mind, returned product. You initiate a refund from your dashboard or via WhatsApp:Refund ₦5,000 to Funmilayo Adeyinka for transaction TXN_01HMFB…We fire a OPay payout to the original sender’s account (we have it from the inflow webhook). The same NIBSS-backed transfer. Same name pre-validation. The customer’s phone buzzes inside a minute. Both the original inflow and the refund are separate audit rows. The refund doesn’t erase the inflow — they’re linked but distinct. This matters for your standing and for any later lender snapshot.
Failed payments
A few failure modes you’ll see occasionally.
The vast majority of payments land cleanly. Failures are noticeable when they happen but rare overall.
Daily summary
If you opted in during signup, you get a daily SMS at 8 PM:Guild: Today’s sales — ₦47,500 across 11 transactions. 9 transfers, 1 wallet, 1 dynamic VA. Top sender: Funmilayo Adeyinka (₦15,000). Tomorrow’s preview: 1 scheduled inflow.Same data is on the web dashboard at
guild.com.ng/sales, but the SMS is the version most traders actually read.
Next
Sales velocity
How your inflow patterns shape your standing tier and unlock inventory-advance offers.
Bills
Spend from your wallet — airtime, data, electricity.