Cards
01Visa, Mastercard and Verve. PIN, OTP and 3-D Secure all happen inside the checkout, so customers never get sent to another site.
NGN Hosted checkout for Nigerian businesses
Create a payment with a single API call, send your customer to a fast, secure checkout page, and get a signed webhook once Squad confirms the money. Settled to your Paybeta wallet the next business day.
Opens the real checkout for a live ₦100 payment. Your card will be charged.
Accept every major Nigerian payment method
Payment methods
Every payment method on one page. You choose which ones each payment offers with the channels field.
Visa, Mastercard and Verve. PIN, OTP and 3-D Secure all happen inside the checkout, so customers never get sent to another site.
Customers dial a code from any phone, with no data or smartphone needed. Works with 22 banks, including microfinance banks.
GTBank customers pay straight from their account and confirm with the token their bank sends.
Offer every method, or only the ones that suit an order. Customers see just the methods you allowed.
Integration
Both use the same payment you create on your server. Pick per page.
Send the customer to checkout_url. When they've paid, we bring them back to your redirect_url. No front-end code at all.
// After creating the payment return redirect($payment['data']['checkout_url']);
Keep the customer on your site. Add paybeta.js and open the checkout over your page from a button.
<script src="https://checkout.paybeta.ng/v1/paybeta.js"></script> new PaybetaPop().resumeTransaction('pay_k3j9x2…', { onSuccess: (tx) => confirmOnServer(tx.reference), onCancel: () => {}, });
How it works
Your server calls POST /api/v1/payments with the amount, your reference and the customer's email.
pendingThey open the checkout, choose a payment method and finish in seconds, on desktop or mobile.
pendingThe payment is marked paid only when Squad confirms the full amount in naira. Then we send your webhook.
successfulThe amount, less our fee, lands in your Paybeta wallet on the next business day.
settledDevelopers
Two endpoints, predictable JSON and amounts in naira. Use the live API key from your Paybeta console.
curl https://checkout.paybeta.ng/api/v1/payments \ -H "P-API-KEY: $PAYBETA_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "mode": "test", "reference": "ORDER-1001", "amount": 25000, "description": "Pro plan, monthly", "customer": { "email": "ada@example.com" }, "redirect_url": "https://shop.example/thanks" }'
// Laravel $payment = Http::withHeaders(['P-API-KEY' => config('services.paybeta.key')]) ->post('https://checkout.paybeta.ng/api/v1/payments', [ 'mode' => 'test', 'reference' => $order->reference, 'amount' => 25000, 'customer' => ['email' => $order->email], 'redirect_url' => route('orders.thanks', $order), ]) ->throw(); return redirect($payment->json('data.checkout_url'));
const res = await fetch('https://checkout.paybeta.ng/api/v1/payments', { method: 'POST', headers: { 'P-API-KEY': process.env.PAYBETA_API_KEY, 'Content-Type': 'application/json', }, body: JSON.stringify({ mode: 'test', reference: order.reference, amount: 25000, customer: { email: order.email }, redirect_url: 'https://shop.example/thanks', }), }); const { data } = await res.json(); // Send the customer to data.checkout_url
// 201 Created { "status": "success", "data": { "id": "pay_k3j9x2…", "reference": "ORDER-1001", "status": "pending", "mode": "test", "amount": 25000, "fee": 350, "checkout_url": "https://checkout.paybeta.ng/pay/pay_k3j9x2…" } }
// Signature = HMAC SHA256 of data.reference, keyed with your secret key const expected = crypto .createHmac('sha256', process.env.PAYBETA_SECRET_KEY) .update(req.body.data.reference) .digest('hex'); const given = req.get('Signature') || ''; const valid = given.length === expected.length && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(given)); if (valid && req.body.eventType === 'transaction.successful') { await fulfil(req.body.data.reference); }
Pricing
You only pay on successful payments. The fee is fixed when the payment is created and shown in the API response.
1.4%
per payment,
capped at ₦2,000
| Customer pays | Fee | You receive |
|---|---|---|
| ₦5,000 | ₦70.00 | ₦4,930.00 |
| ₦25,000 | ₦350.00 | ₦24,650.00 |
| ₦100,000 | ₦1,400.00 | ₦98,600.00 |
| ₦1,000,000 | ₦2,000.00 cap | ₦998,000.00 |
With pass_charge, the customer pays the amount plus the fee and you receive the full amount.
Security
A payment is only marked paid after Squad confirms the full amount. Never because a browser or a callback says so.
Every payment is checked against Squad's records, in naira and for the full amount, before it counts.
Card numbers, CVV, PIN and OTP go straight to Squad and are never saved or logged.
Each webhook carries an HMAC signature. If your server is down, we keep retrying for hours.
Strict content security policy, no third-party scripts, no cookies and no caching of payment pages.
Any business with a Paybeta API account. You use the live API key you already have; there is nothing new to sign up for.
1.4% of each payment, capped at ₦2,000. You pay the fee by default, or pass it to the customer on any payment with pass_charge.
Successful payments settle into your Paybeta wallet on the next business day. Weekends and public holidays are skipped.
Visa, Mastercard and Verve cards with 3-D Secure, GTBank account debit and USSD on 22 Nigerian banks.
Yes. Send "mode": "test" with your live API key and pay with Squad's test cards. Test payments never move money. Switch to "mode": "live" when you are ready.
Yes. Add paybeta.js to your page and open the checkout in a popup with PaybetaPop. Or redirect them to the checkout_url and bring them back to your redirect_url.
We send a webhook signed with your secret key once Squad has confirmed the full amount. You can also check any payment with GET /api/v1/payments/{reference}.
No. Card numbers, CVV, PIN and OTP go straight to Squad and are never saved or logged. We keep only the card brand and last four digits.
Already on the Paybeta API? Use your live API key and start with "mode": "test".