Bora PesaBora Pesa

Overview

A unified, open-source payments SDK for Tanzania — one API, all providers.

Quick Start

pnpm add @borapesa/pesa @borapesa/clickpesa
import { createPesa } from '@borapesa/pesa';
import { ClickPesaProvider } from '@borapesa/clickpesa';
import { retryPlugin, loggingPlugin } from '@borapesa/pesa/plugins';

const pesa = createPesa({
  provider: new ClickPesaProvider({
    baseUrl:  'https://api.clickpesa.com',
    clientId: process.env.CLICKPESA_CLIENT_ID!,
    apiKey:   process.env.CLICKPESA_API_KEY!,
  }),
  plugins: [
    retryPlugin({ maxAttempts: 3 }),
    loggingPlugin({ level: 'info' }),
  ],
});

// Initiate a payment
const order = await pesa.createOrder({
  amount:    15000, // TZS 15,000
  currency:  'TZS',
  reference: 'order_abc123',
  customer:  { name: 'Juma Ali', phone: '255712345678' },
});

// React to events
pesa.on('PAYMENT_SUCCESS', async (event) => {
  await db.orders.update({
    id:     event.reference,
    status: 'paid',
  });
});

Providers

ProviderPackageAuth
ClickPesa@borapesa/clickpesaBearer token
Selcom@borapesa/selcomHMAC-SHA256
AzamPay@borapesa/azampayBearer token
DPO@borapesa/dpoPlanned
Pesapal@borapesa/pesapalPlanned

Mount on your server

pesa.mountWebhook is a standard fetch handler — mount it anywhere:

Bun.serve({ fetch: pesa.mountWebhook });

See Integrations for one-liners across frameworks.

On this page