Mobile money · Cards · Bank transfers · USSD

The payment rail for African builders

Accept MTN MoMo, Telecel Cash, M-PESA, cards and bank transfers with one clean API. Get paid, reconcile with a real-time ledger, and pay out to any wallet or bank — all from one dashboard.

initialize_payment.sh
curl https://klapa.pfeffernusstechnologies.dev/api/v1/transactions/initialize/ \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"email": "ama@example.com", "amount": "150.00", "currency": "GHS"}'

Everything a gateway should do

Built the way Paystack, Moolre and Hubtel work — collections, disbursements and reconciliation in one place.

Hosted checkout

One initialize call returns a payment page covering mobile money prompts, card + OTP and bank transfer.

Signed webhooks

Real-time events signed with HMAC-SHA512, automatic retries with backoff, full delivery logs and one-click replay.

Transfers & payouts

Disburse to any MoMo wallet or bank account with name-enquiry validation, balance checks and automatic reversals.

Real-time ledger

Every pesewa is tracked in an immutable ledger with balances, settlements, fees and CSV exports.

Payment links

No code? Share a link or QR and collect payments instantly — fixed amounts or customer-defined.

Test & live modes

A full sandbox with deterministic test wallets and cards, separate keys, and role-based team access with audit trails.

Designed for developers,
loved by finance teams

  • Clean REST API with predictable {"status": true, "data": ...} envelopes
  • Idempotent references — never double-charge a customer
  • Verify everything server-side with /transactions/verify
  • API request logs and webhook delivery logs in the dashboard
  • Misc data endpoints for banks & mobile money channels per country
Get your API keys
webhook_handler.py
# Verify the signature before trusting any event
signature = request.headers["X-Klapa-Signature"]
expected = hmac.new(
    WEBHOOK_SECRET.encode(),
    request.body,
    hashlib.sha512,
).hexdigest()

if hmac.compare_digest(expected, signature):
    event = json.loads(request.body)
    if event["event"] == "charge.success":
        fulfil_order(event["data"]["reference"])

Simple, local pricing

No setup fees. No monthly fees. Pay only when you get paid.

Mobile Money

1.95%

capped at GHS 10 per transaction

Cards

2.9% + 0.30

local & international cards

Bank Transfer

1.5%

capped at GHS 12 per transaction