The core promise of 0fee.dev is radical simplicity: one API integration replaces dozens of provider-specific implementations. Behind that simplicity is a routing engine that maps every payment request to the optimal provider based on country, currency, payment method, cost, and real-time performance metrics. This article walks through the complete provider map, the routing logic, the SDK experience, and the code you actually write.
The Complete Provider Map
0fee integrates with 53+ payment providers organized by region and capability:
Global Providers
| Provider | Coverage | Methods | Strengths |
|---|---|---|---|
| Stripe | 46+ countries | Cards, wallets (Apple Pay, Google Pay), SEPA, ACH | Best card processing globally |
| PayPal | 200+ countries | PayPal balance, cards via PayPal | Ubiquitous buyer trust |
| Wise (TransferWise) | 80+ countries | Bank transfers, multi-currency | Low-cost cross-border transfers |
| Adyen | 60+ countries | Cards, wallets, local methods | Enterprise-grade, omnichannel |
| Square | US, CA, UK, AU, JP, IE, FR, ES | Cards, Cash App | In-person + online |
Africa -- Mobile Money
| Provider | Countries | Key Methods |
|---|---|---|
| PawaPay | 21+ countries | M-Pesa, MTN MoMo, Airtel Money, Orange Money, Tigo Pesa, Vodacom |
| Hub2 | Ivory Coast, Senegal, Mali, Burkina Faso, Togo, Benin, Guinea, Cameroon | Orange Money, MTN MoMo, Moov Money, Wave |
| PaiementPro | Ivory Coast, Senegal, Burkina Faso, Togo, Benin | Mobile money + Visa/Mastercard |
| BUI | Ivory Coast, Senegal, Mali, Burkina Faso | Mobile money, cards |
| Paystack | Nigeria, Ghana, South Africa, Kenya | Cards, bank transfer, USSD, mobile money |
| Flutterwave | 30+ African countries | Cards, mobile money, bank transfers, USSD |
| Cellulant (Tingg) | 35+ African countries | Mobile money, cards, bank transfers |
| CinetPay | 15+ Francophone African countries | Mobile money, cards |
| Campay | Cameroon | MTN MoMo, Orange Money |
| NotchPay | Cameroon, Ivory Coast, Senegal | Mobile money, cards |
Asia-Pacific
| Provider | Countries | Key Methods |
|---|---|---|
| Razorpay | India | UPI, cards, wallets, net banking |
| PhonePe | India | UPI |
| GCash | Philippines | E-wallet |
| GrabPay | Southeast Asia | E-wallet |
| PromptPay | Thailand | Bank transfer |
| LINE Pay | Japan, Taiwan, Thailand | E-wallet |
| Alipay | China, global | E-wallet |
| WeChat Pay | China, global | E-wallet |
Latin America
| Provider | Countries | Key Methods |
|---|---|---|
| MercadoPago | Argentina, Brazil, Mexico, Chile, Colombia, Uruguay | Cards, Pix, Boleto, wallets |
| PagSeguro | Brazil | Pix, Boleto, cards |
| OXXO | Mexico | Cash voucher |
| Conekta | Mexico | Cards, OXXO, SPEI |
Middle East and North Africa
| Provider | Countries | Key Methods |
|---|---|---|
| Tap Payments | UAE, Saudi Arabia, Kuwait, Bahrain, Qatar, Oman, Egypt, Jordan | Cards, Apple Pay, wallets |
| Fawry | Egypt | Cash, wallets, cards |
| HyperPay | Saudi Arabia, UAE, Jordan, Egypt | Cards, mada, Apple Pay |
Country Coverage
The following table shows a representative sample of country coverage. The full list encompasses 200+ countries:
| Region | Countries | Primary Methods | Primary Providers |
|---|---|---|---|
| North America | US, CA | Cards, ACH, wallets | Stripe, PayPal, Square |
| Western Europe | UK, FR, DE, ES, IT, NL, BE | Cards, SEPA, iDEAL, Bancontact | Stripe, Adyen, PayPal |
| Eastern Europe | PL, CZ, RO, HU | Cards, local transfers | Stripe, Adyen |
| West Africa (Francophone) | CI, SN, ML, BF, TG, BJ, GN, CM | Orange Money, MTN MoMo, Wave, Moov | Hub2, PaiementPro, PawaPay |
| West Africa (Anglophone) | NG, GH | Cards, bank transfer, MTN MoMo | Paystack, Flutterwave |
| East Africa | KE, TZ, UG, RW | M-Pesa, MTN MoMo, Airtel Money | PawaPay, Flutterwave |
| Southern Africa | ZA, MZ, ZM, MW | Cards, mobile money | Paystack, PawaPay |
| Central Africa | CM, CD, CG | MTN MoMo, Orange Money, Airtel | PawaPay, Hub2 |
| South Asia | IN | UPI, cards, wallets | Razorpay |
| Southeast Asia | PH, TH, SG, MY, ID | E-wallets, cards, bank transfer | GrabPay, various local |
| East Asia | CN, JP | Alipay, WeChat Pay, cards | Alipay, LINE Pay |
| Latin America | BR, MX, AR, CO, CL | Pix, Boleto, OXXO, cards | MercadoPago, Conekta |
| MENA | AE, SA, EG, JO | Cards, mada, wallets | Tap Payments, Fawry |
How Routing Works
When your application sends a payment request to 0fee, the routing engine executes a multi-step decision process:
Step 1: Country Detection
The country field in the request (ISO 3166-1 alpha-2) determines which providers are eligible. Each provider has a registered list of supported countries.
Step 2: Method Matching
The method field (e.g., PAYIN_ORANGE_CI, PAYIN_CARD) filters providers to those that support the requested payment method in the given country.
Step 3: Credential Verification
The engine checks whether the merchant's application has valid, active credentials for each eligible provider. A provider without configured credentials is excluded.
Step 4: Provider Scoring
Each remaining provider receives a composite score based on:
pythondef calculate_provider_score(
provider: Provider,
app_config: AppRoutingConfig
) -> float:
# Real-time success rate (last 24 hours)
success_weight = 0.35
success_score = provider.metrics.success_rate_24h
# Average latency (lower is better)
latency_weight = 0.20
latency_score = 1.0 - min(provider.metrics.avg_latency_ms / 10000, 1.0)
# Transaction cost (lower is better)
cost_weight = 0.25
cost_score = 1.0 - min(provider.fee_percent / 5.0, 1.0)
# Merchant priority (configured in dashboard)
priority_weight = 0.20
priority_score = app_config.get_priority(provider.id) / 10.0
return (
success_weight * success_score +
latency_weight * latency_score +
cost_weight * cost_score +
priority_weight * priority_score
)Step 5: Selection and Failover
The highest-scoring provider is selected as the primary. The second and third are queued as failover targets. If the primary returns a non-retryable error (provider down, maintenance, rate limit), the engine automatically retries with the next provider.
Request: Pay 5,000 XOF via Orange Money in CI
|
+-> Score: Hub2 (0.92) -- PRIMARY
+-> Score: PaiementPro (0.87) -- FAILOVER 1
+-> Score: PawaPay (0.81) -- FAILOVER 2
|
Hub2 processes successfully -> done
Hub2 fails (503) -> retry PaiementPro -> successThis failover mechanism is invisible to the merchant. They send one request and receive one response. The routing and retry logic is entirely internal.
The SDK Experience
0fee provides SDKs in seven languages. Each SDK wraps the REST API with type-safe models, automatic retries, and idiomatic patterns for each language.
Installation
bash# Node.js / TypeScript
npm install zerofee
# Python
pip install zerofee
# PHP
composer require zerofee/zerofee-php
# Ruby
gem install zerofee
# Go
go get github.com/zerofee/zerofee-go
# Java
// Maven
<dependency>
<groupId>dev.zerofee</groupId>
<artifactId>zerofee-java</artifactId>
<version>1.0.0</version>
</dependency>
# C#
dotnet add package ZeroFeeTypeScript Example: Full Payment Flow
typescriptimport { ZeroFee } from 'zerofee';
const zf = new ZeroFee({
apiKey: process.env.ZEROFEE_API_KEY!,
environment: 'live' // or 'test'
});
// 1. Create a payment
const payment = await zf.payments.create({
amount: 25_00, // $25.00 in cents
currency: 'USD',
country: 'US',
method: 'PAYIN_CARD',
customer: {
email: '[email protected]',
name: 'John Doe'
},
metadata: {
orderId: 'order_12345',
productName: 'Pro Plan'
},
returnUrl: 'https://yourapp.com/payment/success',
cancelUrl: 'https://yourapp.com/payment/cancel'
});
console.log(payment.checkoutUrl);
// -> https://checkout.0fee.dev/pay_abc123
// 2. Check payment status
const status = await zf.payments.get(payment.id);
console.log(status.status);
// -> 'pending' | 'completed' | 'failed' | 'expired'
// 3. Issue a refund
const refund = await zf.refunds.create({
paymentId: payment.id,
amount: 25_00, // full refund
reason: 'Customer requested cancellation'
});Python Example: Mobile Money Payment
pythonfrom zerofee import ZeroFee
zf = ZeroFee(api_key="zf_live_...")
# Create an Orange Money payment in Ivory Coast
payment = zf.payments.create(
amount=10000, # 10,000 XOF
currency="XOF",
country="CI",
method="PAYIN_ORANGE_CI",
customer={"phone": "+2250700112233"},
metadata={"invoice_id": "INV-2026-001"},
return_url="https://yourapp.com/callback"
)
print(f"Payment ID: {payment.id}")
print(f"Status: {payment.status}")
# Customer receives USSD push on their phone
# List recent payments with filtering
payments = zf.payments.list(
country="CI",
status="completed",
limit=50,
offset=0
)
for p in payments.data:
print(f"{p.id}: {p.amount} {p.currency} - {p.status}")Webhook Handling (Express.js)
typescriptimport express from 'express';
import { ZeroFee } from 'zerofee';
const app = express();
const zf = new ZeroFee({ apiKey: process.env.ZEROFEE_API_KEY! });
app.post('/webhooks/zerofee', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.headers['x-zerofee-signature'] as string;
try {
const event = zf.webhooks.verify(req.body, signature);
switch (event.type) {
case 'payment.completed':
// Fulfill the order
fulfillOrder(event.data.metadata.orderId);
break;
case 'payment.failed':
// Notify the customer
notifyPaymentFailed(event.data.customer.email);
break;
case 'refund.completed':
// Update order status
markOrderRefunded(event.data.paymentId);
break;
}
res.status(200).json({ received: true });
} catch (err) {
console.error('Webhook verification failed:', err);
res.status(400).json({ error: 'Invalid signature' });
}
});Available Payment Methods by Category
0fee supports 117 payment methods organized into five categories:
Cards (Global)
| Method | Description |
|---|---|
| PAYIN_CARD | Visa, Mastercard, Amex, Discover, JCB, UnionPay |
| PAYIN_CARD_3DS | Cards with mandatory 3D Secure authentication |
Mobile Money (Africa)
| Method | Countries |
|---|---|
| PAYIN_ORANGE_* | CI, SN, ML, BF, CM |
| PAYIN_MTN_* | GH, CM, UG, CI, BJ |
| PAYIN_MPESA_* | KE, TZ |
| PAYIN_WAVE_* | SN, CI |
| PAYIN_MOOV_* | CI, BJ, TG |
| PAYIN_AIRTEL_* | UG, TZ, KE |
| PAYIN_VODACOM_* | TZ, MZ |
| PAYIN_TIGO_* | TZ |
Bank Transfers
| Method | Countries |
|---|---|
| PAYIN_SEPA | EU/EEA |
| PAYIN_ACH | US |
| PAYIN_WIRE | Global |
| PAYIN_PIX | BR |
| PAYIN_SPEI | MX |
| PAYIN_IDEAL | NL |
| PAYIN_BANCONTACT | BE |
| PAYIN_UPI | IN |
Digital Wallets
| Method | Availability |
|---|---|
| PAYIN_APPLE_PAY | US, UK, EU, AU, CA, SG, HK, JP |
| PAYIN_GOOGLE_PAY | US, UK, EU, AU, CA, SG, IN |
| PAYIN_PAYPAL | 200+ countries |
| PAYIN_ALIPAY | CN, global |
| PAYIN_WECHAT_PAY | CN, global |
| PAYIN_GRABPAY | SG, MY, PH, TH |
| PAYIN_GCASH | PH |
Cash and Vouchers
| Method | Countries |
|---|---|
| PAYIN_OXXO | MX |
| PAYIN_BOLETO | BR |
| PAYIN_FAWRY | EG |
Pricing
0fee charges a flat 0.99% per successful transaction. That is it.
| Feature | 0fee.dev | Typical Competitors |
|---|---|---|
| Transaction fee | 0.99% | 2.5% - 3.5% |
| Monthly fee | $0 | $0 - $500+ |
| Setup fee | $0 | $0 - custom |
| Provider markup | Pass-through | Often marked up |
| Minimum commitment | None | Often annual |
| Africa coverage | 50+ countries | Limited or none |
The 0.99% fee is the orchestration layer cost. Provider fees (Stripe's 2.9%, PawaPay's variable rates, etc.) are passed through at cost. The merchant sees a transparent breakdown: orchestration fee + provider fee = total cost per transaction.
Getting Started: Five Minutes to Global Payments
bash# 1. Install the SDK
npm install zerofee
# 2. Get your API key at dashboard.0fee.dev
# 3. Start accepting paymentstypescriptimport { ZeroFee } from 'zerofee';
const zf = new ZeroFee({ apiKey: 'zf_test_...' });
// Accept a payment from anywhere in the world
const payment = await zf.payments.create({
amount: 1000,
currency: 'USD',
country: 'US',
method: 'PAYIN_CARD',
customer: { email: '[email protected]' },
returnUrl: 'https://localhost:3000/success'
});
console.log(`Checkout: ${payment.checkoutUrl}`);Test mode uses simulated providers that mirror real provider behavior -- including asynchronous mobile money flows with configurable delays and failure scenarios. When you are ready to go live, swap zf_test_ for zf_live_, configure your provider credentials in the dashboard, and your integration is production-ready.
One API. Fifty-three providers. Two hundred countries. Zero monthly fees.
This article is part of the "How We Built 0fee.dev" series. 0fee.dev is a payment orchestrator covering 53+ providers across 200+ countries, built by Juste A. GNIMAVO and Claude from Abidjan with zero human engineers. Follow the series for the complete build story.