One API for fiat + crypto payments. 14 fiat providers. 4 crypto on/off-ramp drivers. Multi-provider routing. Zero runtime deps. MIT.
npm install paybridge
Same createPayment call works against Stripe, PayStack, PayFast, Adyen, Mollie, Razorpay, Square, Mercado Pago, Pesapal, Flutterwave, Yoco, Ozow, Peach Payments, SoftyComp. Switch providers by changing one config line.
PayBridgeRouter picks the cheapest, fastest, or highest-success-rate provider per transaction. Circuit breaker. 429-aware fallback. Webhook idempotency.
The successRate strategy ranks providers using your actual transaction history from the ledger β not vendor rate cards. Static fee tables lie.
import { PayBridge } from 'paybridge'; const pay = new PayBridge({ provider: 'stripe', credentials: { apiKey: process.env.STRIPE_API_KEY }, sandbox: true, }); const payment = await pay.createPayment({ amount: 299, currency: 'ZAR', reference: 'INV-001', customer: { name: 'John Doe', email: 'john@example.com' }, urls: { success: 'https://example.com/success', cancel: 'https://example.com/cancel', webhook: 'https://example.com/webhook', }, }); console.log(payment.checkoutUrl);
| Provider | Region | One-time | Subscriptions | Refunds | Webhooks | Status |
|---|---|---|---|---|---|---|
| SoftyComp | South Africa | β | β | β | β | Production |
| Yoco | South Africa | β | β | β | β | Production |
| Ozow | South Africa | β | β | β | β | Production |
| PayFast | South Africa | β | β | β | β | Production |
| Peach Payments | South Africa | β | β | β | β | Production |
| PayStack | Africa | β | β | β | β | Production |
| Flutterwave | Africa | β | β | β | β | Production |
| Pesapal | East Africa | β | β | β | β | Production |
| Stripe | Global | β | β | β | β | Production |
| Adyen | Global | β | β | β | β | Production |
| Mollie | Europe | β | β | β | β | Production |
| Square | US/Canada/UK | β | β | β | β | Production |
| Razorpay | India | β | β | β | β | Production |
| Mercado Pago | Latin America | β | β | β | β | Production |
| Provider | On-ramp | Off-ramp | Quote | Webhooks | Status |
|---|---|---|---|---|---|
| MoonPay | β | β | β | β | Production |
| Transak | β | β | β | β | Production |
| Ramp Network | β | β | β | β | Production |
| Yellow Card | β οΈ | β οΈ | β οΈ | β οΈ | Experimental |
β Supported | β Not supported by upstream API | β οΈ Experimental (spec unverified)
βββββββββββββββββββββββββββ
β Your app β
ββββββββββββ¬βββββββββββββββ
β paybridge SDK
ββββββββββββ΄βββββββββββββββ
β PayBridgeRouter β
β cheapest/fastest/... β
β circuit breaker β
β webhook idempotency β
βββββββ¬ββββββ¬ββββββ¬ββββββββ
β β β
βββββββ΄ββ βββ΄ββββ ββ΄βββββββ
βStripe β βMollieβ βPayFastβ ...
βββββββββ βββββββ βββββββββ
Catches the moment a provider silently changes their API. The Square endpoint moved between releases β paybridge drift-check would have flagged it before production traffic broke.
paybridge drift-check --capture
# later
paybridge drift-check \
--webhook-url https://hooks.slack.com/...
Catches missed webhooks. Diff your DB's expected statuses against each provider's current state.
psql -t -c "SELECT provider, reference, \ status AS expected_status \ FROM payments WHERE status='pending'" \ | paybridge reconcile
Independent multi-provider monitoring at status.whatshubb.co.za. Vendor status pages + HTTP probes + sandbox health, three signals per provider, divergence detection surfaces "vendor says fine, our probes disagree" moments.
Source, issues, releases. Star the repo.
npmnpm install paybridge
DocsProvider reference, CLI, observability, webhooks
Live demoClick a button, get a real Stripe checkout URL
StatusIndependent payment-provider observability
DiscussionsQ&A, ideas, community
WhatsPayHosted SaaS layer on top of paybridge
Pinned DiscussionRoadmap, feedback, feature requests