LBPay payments API for Cameroon

Collect and disburse XAF with one integration. MTN Mobile Money, Orange Money, cards, and the LBPay wallet are rails. Developers integrate LBPay — not a single processor.

Wallet transfer vs disbursement

LBPay → LBPay is an internal ledger move. The sender’s wallet balance drops and the recipient’s wallet balance rises. No Mobile Money rail is involved. The recipient can withdraw later.

POST /api/wallet/transfer
{ "to": "@handle", "amount": 5000, "pin": "1234", "note": "Lunch" }

Withdrawals and “send to MTN / Orange” are disbursements. Cash leaves LBPay through PayUnit (POST /api/disbursement then /api/disbursement/confirmon https://gateway.payunit.net).

POST /api/wallet/disburse
{ "amount": 10000, "phone": "670112233", "network": "mtn", "pin": "1234" }

Deposits collect from MTN, Orange, or card via PayUnit initialize + makepayment, then credit the wallet when the rail reports success.

Account security

  • Signup sends a 6-digit email OTP (Nodemailer / SMTP).
  • After OTP, the user sets a 4-digit PIN.
  • Login is email + password, then PIN.
  • Sends, withdrawals, and deposits require the PIN on a confirmation sheet.
  • Mobile: the session lasts; returning to the app after it was inactive asks for the PIN again.
  • Web: no PIN lock overlay. Idle for ~18 minutes signs the user out.

Roles

  • Personal — wallet. Everyone starts here after signup.
  • Business — merchant console. Apply with KYC; an admin approves it.
  • Developer — sandbox keys immediately on apply; live keys after KYC approval.
  • Admin — platform operators. Entering /admin always requires a fresh email OTP.

Authentication

Send your secret key as a Bearer token.

Authorization: Bearer sk_test_...

Create a payment

curl https://your-lbpay-host/api/v1/payments \
  -H "Authorization: Bearer sk_test_YOUR_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 5000,
    "currency": "XAF",
    "customer": { "phone": "670112233" },
    "method": "mobile_money"
  }'

Sandbox amounts

  • Amount ending in 00 → SUCCESS
  • Amount ending in 13 → FAILED
  • Amount ending in 77 → PENDING

SDKs (planned)

npm i @lbpay/node · pip install lbpay · Flutter / React Native

Stored balances, cross-network transfers, custody, savings, lending, and merchant settlement can trigger licensing, KYC/AML, and safeguarding requirements. Confirm what can be offered directly versus through a licensed partner before enabling live money movement.