Si alguna vez has intentado aceptar pagos a nivel global, conoces el dolor. Stripe cubre tarjetas en 46 países. PayPal funciona en más de 200, pero excluye la mayor parte de África. El dinero móvil -- el método de pago dominante para más de 500 millones de personas -- requiere integraciones separadas con MTN MoMo, Orange Money, Wave, M-Pesa y docenas de proveedores regionales. Cada proveedor tiene su propia API, su propio flujo de autenticación, su propio formato de webhook y su propio calendario de liquidación.
Construimos 0fee.dev para resolver este problema de una vez por todas: una API, un SDK, un panel de control -- y cubres el mundo.
El problema: fragmentación de pagos
Considera este escenario. Estás construyendo un producto SaaS en 2026. Tus clientes están en Estados Unidos, Francia, Nigeria, Kenia y Costa de Marfil. Así es como se ve tu integración de pagos sin un orquestador:
| País | Método preferido | Proveedor | Esfuerzo de integración |
|---|---|---|---|
| Estados Unidos | Tarjetas de crédito/débito | Stripe | 1-2 días |
| Francia | Tarjetas + SEPA | Stripe | 1-2 días |
| Nigeria | Tarjetas + transferencia bancaria | Paystack | 3-5 días |
| Kenia | M-Pesa | PawaPay o Safaricom | 5-7 días |
| Costa de Marfil | Orange Money, Wave | Hub2 o PaiementPro | 5-7 días |
Son cinco integraciones separadas, cinco contratos de API diferentes, cinco manejadores de webhooks, cinco procesos de conciliación. Y solo estamos cubriendo cinco países. Escala eso a 50 países en cuatro continentes y estarás ante meses de trabajo de integración, un equipo completo dedicado al mantenimiento de pagos y un sistema frágil donde el cambio de API de un proveedor puede romper tu flujo de checkout.
Qué hace un orquestador de pagos
Un orquestador de pagos se sitúa entre tu aplicación y los proveedores de pago. Expone una API única y unificada que abstrae la complejidad de enrutar transacciones al proveedor correcto según país, moneda, método de pago y disponibilidad.
Tu aplicación
|
v
API de 0fee.dev (una sola integración)
|
+---> Stripe (tarjetas, global)
+---> PayPal (billeteras, global)
+---> Hub2 (dinero móvil, África francófona)
+---> PawaPay (dinero móvil, 21+ países africanos)
+---> Paystack (Nigeria, Ghana)
+---> Flutterwave (30+ países africanos)
+---> BUI (África Occidental)
+---> PaiementPro (África Occidental + tarjetas)
+---> ... 45+ proveedores másCuando tu cliente en Costa de Marfil quiere pagar con Orange Money, 0fee enruta la transacción a Hub2 o PaiementPro. Cuando tu cliente en EE. UU. paga con una tarjeta Visa, 0fee enruta a Stripe. Tu código no cambia. Tu manejador de webhooks no cambia. Tu panel de conciliación muestra todo en un solo lugar.
La visión: cinco líneas de código
Desde el principio, queríamos que la experiencia del desarrollador fuera absurdamente simple. Instala el SDK, configura tu clave de API y comienza a aceptar pagos en todo el mundo:
typescriptimport { ZeroFee } from 'zerofee';
const zf = new ZeroFee({ apiKey: 'zf_live_...' });
const payment = await zf.payments.create({
amount: 5000, // $50.00 en centavos
currency: 'USD',
country: 'US',
method: 'PAYIN_CARD',
customer: {
email: '[email protected]'
},
returnUrl: 'https://yourapp.com/thank-you'
});
// payment.checkoutUrl -> redirige al cliente
// payment.id -> rastrea el estado mediante webhooksLa misma estructura de código funciona ya sea que el cliente pague con tarjeta de crédito en Nueva York, una transferencia bancaria en Lagos u Orange Money en Abiyán. Lo único que cambia es country, currency y method.
Para pagos con dinero móvil en África, se ve así:
typescriptconst payment = await zf.payments.create({
amount: 10000, // 10.000 XOF
currency: 'XOF',
country: 'CI', // Costa de Marfil
method: 'PAYIN_ORANGE_CI',
customer: {
phone: '+2250700000000'
},
returnUrl: 'https://yourapp.com/thank-you'
});El cliente recibe una notificación push en su teléfono, confirma el pago con su PIN y la transacción se liquida. Tu webhook se dispara con un payload estandarizado independientemente de qué proveedor procesó el pago.
Arquitectura multi-inquilino
0fee no es solo una pasarela de pago -- es una plataforma de orquestación multi-inquilino. Cada aplicación registrada en 0fee obtiene:
- Credenciales aisladas: tus claves de Stripe, tus claves de PawaPay, tus claves de Hub2 -- almacenadas cifradas, nunca compartidas entre inquilinos.
- Reglas de enrutamiento personalizadas: define qué proveedores manejan qué países para tu caso de uso específico.
- Endpoints de webhook separados: cada app configura sus propias URLs de callback.
- Límites de tasa independientes: un pico de tráfico de un inquilino no afecta a otro.
- Analíticas por app: ingresos, tasas de éxito, rendimiento del proveedor -- todo limitado a tu aplicación.
La arquitectura soporta esto a través de un modelo de datos jerárquico:
Organización (tu empresa)
└── Aplicación (tu producto)
├── Credenciales del proveedor (cifradas)
├── Reglas de enrutamiento
├── Endpoints de webhook
├── Claves de API (live + test)
└── Transacciones
├── Pagos
├── Desembolsos
└── ReembolsosEsto significa que una sola organización puede ejecutar múltiples aplicaciones -- un producto SaaS, un marketplace y una tienda de comercio electrónico -- cada una con su propia configuración de pagos, todo gestionado desde un solo panel de control.
¿Por qué no usar una solución existente?
Evaluamos cada plataforma importante de orquestación de pagos antes de construir 0fee. Esto es lo que encontramos:
| Plataforma | Soporte África | Dinero móvil | Precios | Autoservicio |
|---|---|---|---|---|
| Stripe | 46 países, África limitada | No | 2,9% + $0,30 | Sí |
| PayPal | Soporte limitado en África | No | 3,49% + tarifa fija | Sí |
| Adyen | Algunos mercados africanos | Limitado | Precios personalizados | Solo empresas |
| Checkout.com | Nigeria, Kenia, Egipto | Limitado | Precios personalizados | Solo empresas |
| Spreedly | Bóveda + enrutamiento | Sin dinero móvil nativo | $500+/mes | Sí |
| 0fee.dev | 50+ países africanos | MTN, Orange, Wave, M-Pesa | 0,99% | Sí |
La brecha era clara. Ningún orquestador existente trataba África como un mercado de primera clase. El dinero móvil no estaba soportado o estaba añadido como algo secundario. Y las soluciones empresariales requerían llamadas de ventas, incorporación prolongada y precios que excluían a startups y pequeñas empresas.
Las cifras
Después de 86 sesiones de desarrollo abarcando 80 días, esto es lo que 0fee cubre:
- 53+ proveedores de pago integrados y probados
- 200+ países con al menos un método de pago disponible
- 117 métodos de pago incluyendo tarjetas, dinero móvil, transferencias bancarias, billeteras y cripto
- 40+ monedas incluyendo XOF, XAF, KES, NGN, GHS, TZS, UGX, ZAR y todas las principales monedas fiat
- 7 SDKs disponibles: TypeScript/JavaScript, Python, PHP, Ruby, Go, Java y C#
- 90+ endpoints de API cubriendo pagos, desembolsos, reembolsos, webhooks, analíticas y administración
El motor de enrutamiento
En el corazón de 0fee está el motor de enrutamiento. Cuando llega una solicitud de pago, el motor evalúa:
- País: ¿qué proveedores están disponibles en el país del cliente?
- Método de pago: ¿qué proveedores soportan el método solicitado (tarjeta, dinero móvil, transferencia bancaria)?
- Moneda: ¿qué proveedores pueden procesar la moneda dada?
- Salud del proveedor: ¿cuál es la tasa de éxito actual y la latencia de cada proveedor?
- Costo: ¿qué proveedor ofrece la tarifa de procesamiento más baja para esta transacción?
- Preferencias de la app: ¿el comerciante ha configurado prioridades o exclusiones de proveedores?
El motor puntúa cada proveedor elegible y selecciona el óptimo. Si el proveedor principal falla, el motor reintenta automáticamente con el siguiente mejor proveedor -- esto se llama failover inteligente.
python# Lógica de enrutamiento simplificada
async def route_payment(request: PaymentRequest, app: Application) -> Provider:
eligible = await get_eligible_providers(
country=request.country,
method=request.method,
currency=request.currency,
app_id=app.id
)
scored = []
for provider in eligible:
score = calculate_score(
success_rate=provider.metrics.success_rate_24h,
latency=provider.metrics.avg_latency_ms,
cost=provider.fee_schedule.get_fee(request.amount),
priority=app.routing_rules.get_priority(provider.id)
)
scored.append((provider, score))
scored.sort(key=lambda x: x[1], reverse=True)
return scored[0][0]Este motor de enrutamiento es lo que transforma 53 proveedores de pago separados en una plataforma de pagos cohesiva.
Qué viene a continuación en esta serie
Este artículo establece el escenario. En los artículos que siguen, profundizaremos en:
- El problema de pagos en África -- por qué el dinero móvil es fundamentalmente diferente de los pagos con tarjeta y por qué la mayoría de los orquestadores se equivocan.
- El mapa completo de proveedores -- cada proveedor, cada país, cada método de pago, con ejemplos de código.
- Decisiones de arquitectura -- por qué elegimos Python, FastAPI, SolidJS y SQLite (y qué cambiaríamos).
- Construyendo desde Abiyán -- la historia de 86 sesiones, un CEO, un CTO de IA y cero ingenieros humanos.
La brecha en infraestructura de pagos es real, especialmente para negocios que necesitan operar tanto en África como en el resto del mundo simultáneamente. Construimos 0fee para cerrar esa brecha.
Este artículo es parte de la serie "Cómo construimos 0fee.dev". 0fee.dev es un orquestador de pagos que cubre más de 53 proveedores en más de 200 países, construido por Juste A. GNIMAVO y Claude desde Abiyán sin ningún ingeniero humano. Sigue la serie para conocer la historia completa de construcción.