₦12,000 added by Adekunle Ogundimu. Balance: ₦12,000.That’s what the rest of this page is about.
Your wallet
Every Job Seeker has a wallet. It’s a balance row in our payments schema, denominated in kobo, with an append-only transaction log behind it. When an employer pays you, the money lands here first. Two things to know about the wallet:- It’s not a bank account. It’s a Guild-owned balance. Useful for receiving payments and queuing up your next move (withdraw, save, pay a bill). For long-term storage, you withdraw to your bank.
- It funds your savings rules and your bills. If you’ve told Guild “save ₦500 every Friday,” we pull it from your wallet the moment your wallet has the balance.
How the employer’s payment reaches you
Walking through the ten seconds.1
Adekunle taps Pay
In his dashboard, next to your row, he taps Pay Musa ₦12,000. His browser sends a signed request to core-api. HMAC-SHA256 over the request body and a ULID idempotency key.
2
The backend triggers a OPay mandate debit
Adekunle linked his Access Bank account weeks ago through a direct-debit mandate. (He sent the ₦50 confirmation transfer OPay asks for, the Mandate ready notification fired, and the mandate’s been sitting on his account since.) Now we trigger OPay to debit that mandate for ₦12,000.
3
OPay debits Adekunle's bank
OPay pulls ₦12,000 from his Access Bank account and fires a
charge_successful webhook to webhooks.guild.com.ng/opay.4
We verify the webhook signature
HMAC-SHA512 over the raw body.
crypto.timingSafeEqual. Three signature schemes handled — we accept the one the webhook used. If it doesn’t match, we reject the request before it touches anything else.5
The reconcile guard runs
Hold on — this is the part most platforms skip 👀.Before we credit your wallet, we re-verify the transaction directly against OPay’s authoritative verify service. Status must match success. Amount must match the webhook body to the kobo. If anything is off, we refuse to credit.This is the defence against an attacker who somehow knew our webhook secret and tried to replay a mutated payload. Even with the secret, they can’t fake a OPay transaction.
6
Wallet credit + ledger row
Your wallet goes from ₦0 to ₦12,000. A row writes to
payments_audit — append-only, no UPDATE or DELETE allowed, immutable for the life of the database.7
SMS notification
OPay SMS fires. Your phone buzzes inside the same second. “₦12,000 added by Adekunle Ogundimu. Balance: ₦12,000.”
Withdraw to your bank
You don’t have to withdraw immediately. The wallet is fine for short-term hold. But when you do, here’s the path.From WhatsApp
Send withdraw. The intent engine routes you to the withdrawal flow.Guild: How much you wan withdraw? You get ₦12,000 for wallet.
₦10,000
Guild: Send to Access Bank ••••3911? Reply YES.
YESTwenty seconds later you get the confirmation: “₦10,000 sent to Access Bank ••••3911.”
From the web dashboard
guild.com.ng/wallet. Tap Withdraw. Pick the amount. Pick the destination. Confirm. Same path.
From a Tola call
“Tola, withdraw ₦10,000 to my bank.”She’ll read back the amount and the destination, ask you to confirm verbally, and fire the request. “Done. ₦10,000 sent to Access Bank ••••3911.”
What happens under the hood when you withdraw
1
core-api looks up your payout destination
The bank account you verified during Tier 2 KYC. We resolved it through OPay’s account-name-lookup service to get the official beneficiary name, and we won’t pay out to a name that doesn’t match what you have on file.
2
core-api calls OPay's payout endpoint
NIBSS-backed transfer via OPay’s payout service. The reference carries our merchant suffix automatically.
3
Synchronous success path when OPay signals it
If OPay returns
response_description matching /approved|completed|success/i and a nip_transaction_reference, we mark the payout SUCCESS immediately. No need to wait for the webhook.4
Webhook fallback if the response is pending
If OPay returns pending, the payout sits in PENDING state until the
payout_successful (or payout_failed) webhook arrives. Same signature verification path as inbound debits.5
Wallet debit + ledger row
Your wallet goes down by ₦10,000. An audit row writes. An SMS confirms.
A note on speed
OPay is fast. NIBSS is fast on the mornings when banks aren’t rotating servers. Most withdrawals land in your bank in seven to fifteen seconds. Some take up to a minute when the receiving bank is slow. None should take more than five minutes — if a payout sits PENDING for longer, we ping you with a status SMS and you’ll see it resolved in your transaction history.Bank coverage
Withdraw to any Nigerian bank account that NIBSS resolves. That’s effectively all of them — every commercial bank, every microfinance bank with NIBSS membership, plus the fintech players (OPay, PalmPay, Kuda, Moniepoint, etc.). The bank list inside the dashboard is sourced from OPay’s bank-code registry. We refresh it on a schedule so new banks appear automatically.What does it cost you
Nothing on inbound. Receiving a payment from an employer is free. Payouts to your bank are also free at v1. We may introduce a small fee in v2 for high-frequency withdrawals — but the core promise (get paid same-day, no fees) holds for normal use.Next
Standing score
Each payment, each completed job, each five-star review nudges your tier upward.
Savings
Automatic rules that pull from your wallet before the money has a chance to disappear.