Checkout
A payment page in your colours, ready in one call.
Create the payment, redirect your customer: Wajub shows the available operators, guides the confirmation and notifies you of the result. No payment page to build or maintain.
- Mobile money and cards
- French and English
They get paid with Wajub
Why Wajub Checkout
Built for mobile money, from choice to receipt.
Your customer picks a payment method, confirms on their phone and comes back to your site. The page handles every step; you have nothing to build.
Mobile money first
Mobile Money shows at the top, marked Recommended, with the operators available in your customer's country. Bank card sits right below.
Operator detected from the number
Your customer types their number: the page selects the operator from the prefix. They can pick another one at any time.
Guided confirmation
Depending on the operator, your customer approves a notification on their phone or dials the code shown. The page moves to the result on its own, without reloading.
Cards and wallets
Bank card with 3-D Secure, plus Apple Pay or Google Pay where available.
French or English
Based on your account setting or the device language. Your customer can switch language on the page.
Always up to date
New operators, new instructions: the page keeps up, your integration stays the same.
Coverage
69 payment channels in 24 countries.
Checkout shows your customer the mobile money operators open in their country. Every channel listed here is available in the API, with the connections able to carry it.
Benin
MTN MoMo, Moov Money
Burkina Faso
Orange Money, Moov Money, Wave
Cameroon
MTN MoMo, Orange Money, Wave, Express Union
Congo - Brazzaville
MTN MoMo, Airtel Money
Congo - Kinshasa
MTN MoMo, Orange Money, Airtel Money, M-Pesa, Africell Money, Vodacom M-Pesa
Côte d’Ivoire
MTN MoMo, Orange Money, Moov Money, Wave, Djamo
Gabon
Airtel Money, Moov Money
Ghana
MTN MoMo, Telecel Cash, AirtelTigo Money
Guinea
MTN MoMo, Orange Money
Kenya
Airtel Money, M-Pesa
Liberia
MTN MoMo
Malawi
Airtel Money, TNM Mpamba
Mali
Orange Money, Moov Money
Mozambique
M-Pesa
Niger
Airtel Money, Moov Money
Nigeria
MTN MoMo, Bank account debit, Bank transfer, Transfer to a dedicated account, USSD
Rwanda
MTN MoMo, Airtel Money
Senegal
Orange Money, Wave, Djamo, Free Money
Sierra Leone
Orange Money
South Africa
Capitec Pay, EFT, QR
Tanzania
Airtel Money, M-Pesa, HaloPesa, Tigo Pesa, Vodacom M-Pesa, Zantel
Togo
Moov Money, T-Money, Togocel
Uganda
MTN MoMo, Airtel Money, Wave
Zambia
MTN MoMo, Airtel Money, Zamtel Money
Branding
The page takes on your brand's colours.
In the Dashboard's Brand studio, you set your logo, colours, font and corner radius once. The live preview shows the page before your customers see it.
- Icon and logo, eight ready-made palettes or your own colours, 20 fonts and five corner styles, from the Growth plan.
- One setting for the whole account, in sandbox and production alike, with a preview on mobile, tablet and desktop.
- The page on your own domain, with the Scale plan or the custom domain add-on: add two DNS records and the SSL certificate is set up for you.
For developers
One call to create the payment, one webhook to confirm it.
You create the payment on your server and redirect your customer to the returned URL. Wajub sends you a signed webhook as soon as the payment succeeds, and you can read the payment back through the API at any time.
POST /paymentsCreate the payment- Amount, currency, customer email, your reference and the return URL. An idempotency key prevents a duplicate if the call is replayed.
authorization_urlRedirect your customer- The response holds the hosted page URL. Your customer pays there, then lands back on your return URL.
payment.succeededReceive the webhook- A signed event reaches your server, even if your customer closed the page. If it is not received, Wajub retries for 72 hours.
GET /payments/{id}Read the payment back- Before you deliver, read the payment by its ID: its status is the one that counts.
import { Wajub } from '@wajub/node'
const wajub = new Wajub({ secretKey: process.env.WAJUB_SECRET_KEY! })
const payment = await wajub.payments.create(
{
amount: 15000,
currency: 'XAF',
email: '[email protected]',
reference: 'order-4172',
callback: 'https://shop.example.com/checkout/return',
},
{ idempotencyKey: 'order-4172' },
)
res.redirect(payment.authorization_url)
// Webhook
const event = wajub.webhooks.constructEvent(rawBody, signature, timestamp)
const paid = await wajub.payments.retrieve(String(event.data.id))
if (paid.status === 'succeeded') await fulfil(paid.reference)Response201 Created
{"code": 201,"authorization_url": "https://pay.wajub.com/tok_5f3a9c21","transaction": {"id": "trx_8Kd2","reference": "order-4172","status": "pending"}}
WebhookX-Wajub-Signature
{"event": "payment.succeeded","data": {"id": "trx_8Kd2","reference": "order-4172","amount": 15000,"currency": "XAF","status": "succeeded"},"livemode": true}
Response201 Created
{"code": 201,"authorization_url": "https://pay.wajub.com/tok_5f3a9c21","transaction": {"id": "trx_8Kd2","reference": "order-4172","status": "pending"}}
WebhookX-Wajub-Signature
{"event": "payment.succeeded","data": {"id": "trx_8Kd2","reference": "order-4172","amount": 15000,"currency": "XAF","status": "succeeded"},"livemode": true}
Protections
Protections on by default.
No box to tick: these measures apply to every account, on every plan.
- Cards handled by your providers
- Card numbers are typed into the card providers' own fields or payment windows: they never reach Wajub.
- Secret key refused in a browser
- A secret key is meant for your server. Sent from a browser, the request is refused and the key's owner is notified by email.
- Idempotency
- An idempotency key ensures a repeated call on a payment or transfer runs only once.
- Signed webhooks
- Every delivery carries an HMAC-SHA256 signature over the timestamp and the body, with a secret per endpoint. The SDKs reject a delivery older than 300 seconds.
Pricing
No subscription to start, in your colours from Growth.
Pay as you go has no subscription and no setup fee. Checkout appearance opens with Growth; your own domain, with Scale or the Custom domain add-on.
| Feature | Pay as you go$0You only pay for usage beyond the quota | GrowthRecommended$17/ monthBilled monthly, no commitment | Scale$52/ monthBilled monthly, no commitment | EnterpriseCustom |
|---|---|---|---|---|
| Checkout appearance | Not included | Included | Included | Included |
| Custom domain | Add-on$17 / month | Add-on$17 / month | Included | Included |
| Payments included per month | 200 | 1,000 | 5,000 | Unlimited |
| Wajub rail commission | from 2% | from 1.7% | from 1.5% | from 1.2% |
Pay as you go
$0
You only pay for usage beyond the quota
pay.wajub.com/tok_5f3a9c21
- Checkout appearance
- Not included
- Custom domain
- Add-on$17 / month
- Payments included per month
- 200
- Wajub rail commission
- from 2%
Growth
Recommended
$17
/ month
Billed monthly, no commitment
pay.wajub.com/tok_5f3a9c21
- Checkout appearance
- Included
- Custom domain
- Add-on$17 / month
- Payments included per month
- 1,000
- Wajub rail commission
- from 1.7%
Scale
$52
/ month
Billed monthly, no commitment
pay.nkolo.cm/tok_5f3a9c21
- Checkout appearance
- Included
- Custom domain
- Included
- Payments included per month
- 5,000
- Wajub rail commission
- from 1.5%
Enterprise
Custom
pay.nkolo.cm/tok_5f3a9c21
- Checkout appearance
- Included
- Custom domain
- Included
- Payments included per month
- Unlimited
- Wajub rail commission
- from 1.2%
Subscriptions and add-ons are billed in CFA francs, or in euros by card at the fixed rate of 655.957 CFA francs. Amounts in your currency are indicative, at today's rate.
Other ways to get paid
Get paid in your app and by link too.
The Payments API and Link open the same payment methods and report to the same Dashboard as your checkout.
Payments
Accept mobile money and cards with a single integration.
- Signed webhooks
- Built-in idempotency
- SDKs in 7 languages
Link
Get paid with a simple link: product, event, fundraising, donation.
- 25 links included, no subscription
- Mobile money and cards
Frequently asked questions
Another question? Talk to the team
- How do I customise the payment page?
- In the Dashboard, under Branding, from the Growth plan: icon and logo, eight ready-made palettes or six colours of your choice, 20 fonts and the corner radius, with a live preview. The setting applies to the whole account.
- Can I change the look per payment?
- Appearance is defined at account level, in the Dashboard: all your payments share the same visual identity.
- What happens if my customer closes the page before the end?
- The payment carries on at the operator. If it succeeds, the webhook still reaches your server, and GET /payments/{id} returns the current status. Deliver on the webhook or on that read, never on the browser's return alone.
- How do I test the page without real money?
- With your sandbox keys, the page shows a TEST MODE banner. The last six digits of the phone number decide the outcome: a number ending in 000000 succeeds. Every case is described in the documentation, on the Test scenarios page.
- Can I serve the page from my own domain?
- Yes, with the Scale plan or the custom domain add-on. You add a TXT record that proves the domain is yours and a CNAME to connect.wajub.com; the SSL certificate is set up automatically.
Put your payment page live today.
Create your account, test the page in sandbox with test numbers, then go live with your live keys.










