Skip to content

Choosing a Provider

Sanwo supports five payment providers. Each one is a separate package you install alongside the core SDK. Swapping providers is a one-line change.

Provider Package Regions Currencies Minor units natively?
Paystack @sanwohq/paystack Africa NGN, GHS, ZAR, USD, KES Yes
Flutterwave @sanwohq/flutterwave Africa + Global 12+ (NGN, USD, GHS, KES, ZAR, GBP, EUR, …) No (Sanwo converts)
Razorpay @sanwohq/razorpay India INR, USD, EUR + more Yes
Monnify @sanwohq/monnify Nigeria NGN No (Sanwo converts)
Interswitch @sanwohq/interswitch Nigeria NGN Yes

You always pass amounts in minor units (kobo, cents, paise). Sanwo handles conversion for providers that expect major units.

// You always write this — regardless of provider:
const options = {
amount: 500000, // 5,000.00 NGN in kobo
currency: "NGN",
customer: { email: "customer@example.com" },
};
  • Paystack, Razorpay, Interswitch accept minor units natively, so Sanwo passes the value through.
  • Flutterwave, Monnify expect major units, so Sanwo divides by 100 before sending to the provider.

You never need to think about this. Just pass minor units.

Best for businesses in Africa. Supports cards, bank transfers, mobile money, and USSD.

Terminal window
npm i @sanwohq/paystack
import { paystack } from "@sanwohq/paystack";
const provider = paystack({ publicKey: "pk_test_xxx" });

Supported currencies: NGN, GHS, ZAR, USD, KES

Payment methods: Cards, bank transfer, mobile money, USSD, QR

Broad coverage across Africa with global reach. Supports 12+ currencies and multiple payment methods.

Terminal window
npm i @sanwohq/flutterwave
import { flutterwave } from "@sanwohq/flutterwave";
const provider = flutterwave({ publicKey: "FLWPUBK_TEST-xxx" });

Supported currencies: NGN, USD, GHS, KES, ZAR, GBP, EUR, TZS, UGX, RWF, XAF, XOF, and more

Payment methods: Cards, bank transfer, mobile money, USSD, Mpesa, bank account

The go-to provider for India. Supports UPI, net banking, wallets, and international cards.

Terminal window
npm i @sanwohq/razorpay
import { razorpay } from "@sanwohq/razorpay";
const provider = razorpay({ keyId: "rzp_test_xxx" });

Supported currencies: INR, USD, EUR, GBP, SGD, and more

Payment methods: UPI, cards, net banking, wallets, EMI, pay later

Nigeria-focused provider with strong bank transfer support.

Terminal window
npm i @sanwohq/monnify
import { monnify } from "@sanwohq/monnify";
const provider = monnify({
apiKey: "MK_TEST_xxx",
contractCode: "1234567890",
});

Supported currencies: NGN

Payment methods: Cards, bank transfer, USSD, phone number

One of Nigeria’s oldest payment processors. Used widely in enterprise and government.

Terminal window
npm i @sanwohq/interswitch
import { interswitch } from "@sanwohq/interswitch";
const provider = interswitch({
merchantCode: "MX_TEST_xxx",
payItemID: "Default_Payable_MX_xxx",
});

Supported currencies: NGN

Payment methods: Cards, Verve, bank transfer

The whole point of Sanwo is that switching providers is trivial. Your checkout code stays the same — only the import changes.

// Before: Paystack
import { paystack } from "@sanwohq/paystack";
const provider = paystack({ publicKey: "pk_test_xxx" });
// After: Flutterwave
import { flutterwave } from "@sanwohq/flutterwave";
const provider = flutterwave({ publicKey: "FLWPUBK_TEST-xxx" });

Everything else — CheckoutOptions, CheckoutResult, your UI code — remains untouched.