Skip to main content
Saturday evening. You finished the Bodija job today. Last brick laid at 5:47 PM. You washed the dust off, walked to the danfo, and now you’re sitting in the back wondering if Adekunle is going to pay you tonight or make you come back on Monday. Your phone buzzes at 6:12 PM.
₦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:
  1. 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.
  2. 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.
You can see the wallet anywhere you’re logged in. WhatsApp message balance. The web dashboard. A voice call to Tola.

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.”
Total wall-clock time from Adekunle’s tap to your buzz: usually under ten seconds.

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.
YES
Twenty 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.
If you’re withdrawing the same amount on a schedule (e.g., ₦5,000 every Saturday after a typical week’s work), set up a savings rule instead. The rule pulls automatically the moment your wallet has the balance — no need to remember.

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.