One integration. Every payment provider.
Open-source infrastructure for integrating payment gateways.
import { createSanwo } from '@sanwohq/web'import { paystackProvider } from '@sanwohq/paystack' const sanwo = createSanwo({ provider: paystackProvider, publicKey: 'pk_test_...'}) await sanwo({ amount: 500000, currency: 'NGN' })import { SanwoReactProvider, useSanwoCheckout } from '@sanwohq/react'import { paystackProvider } from '@sanwohq/paystack' <SanwoReactProvider provider={paystackProvider} publicKey='pk_test_...'> <PayButton /></SanwoReactProvider> const { checkout, isLoading } = useSanwoCheckout()await checkout({ amount: 500000, currency: 'NGN' })import { SanwoPlugin, useSanwoCheckout } from '@sanwohq/vue'import { paystackProvider } from '@sanwohq/paystack' app.use(SanwoPlugin, { provider: paystackProvider, publicKey: 'pk_test_...'}) const { checkout, isLoading } = useSanwoCheckout()await checkout({ amount: 500000, currency: 'NGN' })import { createSanwoContext, createSanwoCheckout } from '@sanwohq/svelte'import { paystackProvider } from '@sanwohq/paystack' const ctx = createSanwoContext({ provider: paystackProvider, publicKey: 'pk_test_...'}) const { checkout, isLoading } = createSanwoCheckout()await checkout({ amount: 500000, currency: 'NGN' })import { createSanwo } from '@sanwohq/web'import { paystackProvider } from '@sanwohq/paystack' const sanwo = createSanwo({ provider: paystackProvider, publicKey: 'pk_test_...'}) await sanwo({ amount: 500000, currency: 'NGN' })import { SanwoProvider, useSanwoCheckout } from '@sanwohq/react-native'import { paystackProvider } from '@sanwohq/paystack' <SanwoProvider provider={paystackProvider} publicKey='pk_test_...'> <CheckoutScreen /></SanwoProvider> const { checkout, isLoading } = useSanwoCheckout()await checkout({ amount: 500000, currency: 'NGN' })import 'package:sanwo_flutter/sanwo_flutter.dart'import 'package:sanwo_paystack/sanwo_paystack.dart' final sanwo = Sanwo( provider: paystackProvider, publicKey: 'pk_test_...',); await sanwo.checkout(context, options)import Sanwoimport SanwoPaystack let sanwo = Sanwo( provider: paystackProvider, publicKey: "pk_test_...") sanwo.checkout(options) { result in }import com.sanwohq.android.Sanwoimport com.sanwohq.paystack.paystackProvider val sanwo = Sanwo( provider = paystackProvider, publicKey = "pk_test_...") sanwo(activity, options) { result -> }Why Sanwo
Why not just use the provider SDKs?
Provider SDKs
Sanwo
Providers
Growing list of providers, one interface
From Lagos to Mumbai to San Francisco. 5 providers today, with more on the way.
Paystack
Africa@sanwohq/paystackNGN, GHS, ZAR, USD
Flutterwave
Africa@sanwohq/flutterwaveNGN, GHS, KES, USD, +30
Razorpay
India@sanwohq/razorpayINR, USD
Monnify
Nigeria@sanwohq/monnifyNGN
Interswitch
Nigeria@sanwohq/interswitchNGN, USD
Your Provider
Don't see your provider? Build a custom one with a simple HTML template.
Read the GuideSDKs
Native SDKs for every platform
Same providers, same API pattern. Pick the SDK for your platform.
Go
Generate checkout HTML with net/http, Gin, Echo, or any Go framework
No-Code
No-code integration? We got you.
Add payments to your site without writing a single line of code. Drop in a script tag, configure with HTML attributes, done.
WordPress
Plugin with shortcodes, Gutenberg block, and WooCommerce gateway
Shopify
Liquid snippets and theme sections for Shopify stores
Webflow
Custom code embed for any Webflow site
Wix
HTML widget or Velo integration for Wix sites
Squarespace
Code injection and code blocks
Bubble
HTML element integration for Bubble.io apps
Framer
Code component with property controls
Carrd
Embed widget for single-page sites
Ghost
Code injection for blogs and publications
Notion Sites
Embed block for published Notion pages
Typedream
Custom code block for Typedream websites
Softr
Custom code block for Softr apps
Any HTML page
One script tag — works everywhere
Open Source
Contribute to Sanwo
Sanwo is community-driven. Add support for any payment provider by submitting a PR with an HTML template — no complex setup, no server-side code.
1. Copy the template
Each provider is a small folder with an HTML template and metadata. Start from our starter template.
2. Add your provider
Load the payment gateway's JS SDK, handle the checkout flow, and report results back to Sanwo.
3. Submit a PR
CI runs conformance tests automatically. Once merged, your provider is published to npm for everyone.
Quick start
Start accepting payments in minutes
Install the SDK, pick your provider, and start charging — on every platform.
Install
npm i @sanwohq/webPick a provider
npm i @sanwohq/paystackCharge
sanwo({ amount, customer })Install
npm i @sanwohq/reactPick a provider
npm i @sanwohq/paystackWrap with Provider
<SanwoReactProvider>Use the hook
useSanwoCheckout()Install
npm i @sanwohq/vuePick a provider
npm i @sanwohq/paystackRegister plugin
app.use(SanwoPlugin, { ... })Use composable
useSanwoCheckout()Install
npm i @sanwohq/sveltePick a provider
npm i @sanwohq/paystackCreate context
createSanwoContext({ ... })Use store
createSanwoCheckout()Install
npm i @sanwohq/webPick a provider
npm i @sanwohq/paystackCharge
sanwo({ amount, customer })Install
npm i @sanwohq/react-nativePick a provider
npm i @sanwohq/paystackWrap with Provider
<SanwoProvider>Use the hook
useSanwoCheckout()Install
flutter pub add sanwo_flutterAdd provider
flutter pub add sanwo_paystackCharge
sanwo.checkout(ctx, options)Add package
github.com/Sanwohq/iosImport
import SanwoPaystackCharge
sanwo.checkout(options)Add JitPack
maven { url 'jitpack.io' }Add SDK
Sanwohq.android:sanwo:0.1.1Charge
sanwo(activity, options)