Bora Pesa

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/azampayOAuth2
DPO@borapesa/dpoToken redirect
Pesapal@borapesa/pesapalOAuth2 + IPN

Frameworks

FrameworkPackage
Next.js@borapesa/nextjs
Express / Fastify@borapesa/express
ElysiaJS@borapesa/elysia
NestJS@borapesa/nestjs

Raw HTTP

No adapter needed — mount directly on any fetch-compatible server:

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

On this page