One API. Every payment provider.
Billing without borders.
NovaBilling is an open billing platform inspired by Stripe's developer experience and Lago's flexibility -- purpose-built for Africa and the world. Connect Stripe, Flutterwave, Paystack, and M-Pesa through a single, unified API. Manage customers, subscriptions, invoices, and payments across 17 currencies.
Why NovaBilling?
Borderless by Default
Support 17 currencies across 40+ countries. Automatic currency matching routes payments to the right provider -- from mobile money in Nairobi to card payments in New York.
Multi-Tenant Architecture
Every tenant gets an isolated database with encrypted credentials. Built for SaaS platforms that need to offer billing to their own customers.
Ship in Minutes
Type-safe TypeScript and Python SDKs generated from our OpenAPI spec. Full autocomplete, comprehensive error handling, and always in sync with the API.
4 Payment Providers
Stripe for global cards. Flutterwave & Paystack for West Africa. M-Pesa for East Africa. Automatic failover between providers when one is unavailable.
Smart Subscriptions
Free trials, plan upgrades, downgrades, pausing, resuming, and automated renewals. Proration and dunning handled automatically.
Invoices & Checkout
Auto-generate PDF invoices. Create hosted checkout URLs for any invoice. Email delivery on every billing event with automatic retries.
Revenue Analytics
Track revenue, subscriptions, churn, and payment success rates. Filter by date range, currency, and provider with daily, weekly, or monthly grouping.
Get Started in 60 Seconds
Install an SDK and create your first subscription.
npm install novabilling
pip install novabilling
import { NovaBillingClient } from 'novabilling';
const nova = new NovaBillingClient({
token: process.env.NOVA_API_KEY,
});
// Create a customer
const customer = await nova.customers.create({
externalId: 'usr_001',
email: 'amina@kampaltech.ug',
name: 'Amina Nakato',
currency: 'UGX',
});
// Subscribe them to a plan
const sub = await nova.subscriptions.create({
customerId: customer.id,
planId: 'plan_growth',
currency: 'UGX',
});
console.log(sub.status); // "ACTIVE"
import os
from novabilling import NovaBilling
nova = NovaBilling(token=os.environ["NOVA_API_KEY"])
# Create a customer
customer = nova.customers.create(
external_id="usr_001",
email="amina@kampaltech.ug",
name="Amina Nakato",
currency="UGX",
)
# Subscribe them to a plan
sub = nova.subscriptions.create(
customer_id=customer.id,
plan_id="plan_growth",
currency="UGX",
)
print(sub.status) # "ACTIVE"
# Create a customer
curl -X POST http://localhost:3000/api/customers \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"externalId": "usr_001",
"email": "amina@kampaltech.ug",
"name": "Amina Nakato",
"currency": "UGX"
}'
# Create a subscription
curl -X POST http://localhost:3000/api/subscriptions \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"customerId": "cust_abc123",
"planId": "plan_growth",
"currency": "UGX"
}'
Ready to dive deeper? Follow the full Quickstart Guide for a complete walkthrough -- from registration to your first payment.
Supported Currencies
NovaBilling supports 17 currencies across Africa and internationally.
| Region | Currencies |
|---|---|
| West Africa | NGN GHS XOF |
| East Africa | KES UGX TZS RWF ETB |
| North Africa | EGP MAD DZD |
| Central Africa | XAF |
| Southern Africa | ZAR ZMW |
| International | USD EUR GBP |