PayPal AI Hackathon 2026 · Live demo page
Nortex Pay AI is a Spanish-speaking agent that lets small businesses in Nicaragua charge their customers and family in the United States through PayPal — and reconciles every payment into their books automatically.
A merchant asks in her own words — «cobrale $50 a mi hijo por la factura A-000123» — and the agent creates the PayPal order, sends the payment link, captures on approval, and posts a balanced double-entry reconciliation: the collection, the PayPal fee booked separately as a cost, and the exchange rate on the payment. Duplicate webhooks are ignored; forged ones are rejected (401). When an instruction is ambiguous, the agent stops and asks — with money, it never guesses.
View the code on GitHub Watch the demo video
Actual output of npm run demo from the public repository — PayPal sandbox, synthetic data, no credentials needed:
═══ NORTEX PAY AI — demo diáspora (sandbox, datos sintéticos) ═══ 1) Doña Carmen (Estelí) cobra desde Nortex: «cobrale $50 a mi hijo por la factura A-000123». ✓ orden creada (FAKE-ORDER-1) → link de pago para el familiar en EE. UU.: https://www.sandbox.paypal.com/checkoutnow?token=FAKE-ORDER-1 ✓ la venta sigue PENDIENTE tras crear la orden 2) El hijo aprueba el pago en PayPal (USD) y Nortex captura: ✓ captura FAKE-CAPTURE-1 COMPLETED → bruto 50.00 USD, comisión PayPal 2.24 USD (costo aparte), neto 47.76 USD 3) Conciliación automática en Nortex: ✓ la factura quedó PAGADA ✓ exactamente UNA fila de pago ✓ dos asientos: cobro + comisión por separado ✓ partida doble balanceada (débitos = créditos = C$1925.04) → pago registrado con tasa FX 36.85 (C$1842.50 brutos) 4) PayPal reenvía el MISMO webhook (pasa seguido): debe ser no-op. ✓ duplicado ignorado ✓ sigue habiendo UN solo pago (sin doble cobro) 5) Webhook con firma inválida: fail closed, no se aplica nada. ✓ rechazado con 401 y registrado en auditoría 6) F2 — Agente conversacional de cobro y cobranza (voseo, sandbox): 🧑 Doña Carmen: cobrale $75 a Juan por la factura A-124 🤖 Listo, creé el link de pago de $75.00 para Juan Pérez (Miami) (factura A-000124). Copiá este mensaje y mandáselo: 🤖 🤖 Hola Juan Pérez, ¿cómo estás? 👋 🤖 Te paso el link para pagar la factura A-000124 por $75.00 (USD): 🤖 https://www.sandbox.paypal.com/checkoutnow?token=FAKE-ORDER-1 🤖 Podés pagar con tu cuenta PayPal o con tarjeta, cuando te quede cómodo. 🤖 Cualquier duda, escribime. ¡Muchas gracias! ✓ cobro: orden creada + link + mensaje listo 🧑 Doña Carmen: cobrale $75 a Juan por la factura A-124 🤖 Ya tenías el link de pago de $75.00 para Juan Pérez (Miami) (factura A-000124). Copiá este mensaje y mandáselo: 🤖 🤖 Hola Juan Pérez, ¿cómo estás? 👋 🤖 Te paso el link para pagar la factura A-000124 por $75.00 (USD): 🤖 https://www.sandbox.paypal.com/checkoutnow?token=FAKE-ORDER-1 🤖 Podés pagar con tu cuenta PayPal o con tarjeta, cuando te quede cómodo. 🤖 Cualquier duda, escribime. ¡Muchas gracias! ✓ repetir el comando reusa la orden (no duplica) 🧑 Doña Carmen: cobrale a María 🤖 Encontré más de una factura pendiente para María: 🤖 1. A-000125 — María López (Houston) — $1,200.50 🤖 2. A-000126 — María López (Houston) — $35.25 🤖 ¿Cuál querés cobrar? Decime el número de factura (ejemplo: «cobrale a María la factura A-000125»). ✓ ambigüedad: lista opciones y NO crea orden 🧑 Doña Carmen: ¿quién me debe? 🤖 Te deben $1,360.75 en 4 facturas: 🤖 • Familia Pineda (EE. UU.) — factura A-000123 — $50.00 🤖 • Juan Pérez (Miami) — factura A-000124 — $75.00 🤖 • María López (Houston) — factura A-000125 — $1,200.50 🤖 • María López (Houston) — factura A-000126 — $35.25 ✓ resumen de pendientes 🧑 Doña Carmen: mandale un recordatorio a María por la A-125 🤖 Acá tenés el recordatorio para María López (Houston) (factura A-000125, $1,200.50): 🤖 🤖 Hola María López, ¿cómo estás? 👋 🤖 Te escribo para recordarte, con mucho cariño, que la factura A-000125 por $1,200.50 (USD) sigue pendiente. 🤖 Si te queda cómodo, la podés pagar acá: 🤖 https://www.sandbox.paypal.com/checkoutnow?token=FAKE-ORDER-2 🤖 Si ya la pagaste, ignorá este mensaje y disculpá la molestia. 🤖 Cualquier cosa, avisame. ¡Gracias por tu apoyo! ✓ recordatorio educado con monto y link 🧑 Doña Carmen: cobrale a Pedro 🤖 No hay nada por cobrarle a Pedro: esa factura ya está pagada. 🎉 ✓ factura pagada: no se cobra 🧑 Doña Carmen: cobrale $1,5 a Juan 🤖 No te entendí bien y con plata prefiero no adivinar. ¿Me lo decís de nuevo? Por ejemplo: «cobrale $50 a Juan por la factura A-123», «recordale a María su factura» o «¿quién me debe?». ✓ monto ambiguo: pide aclaración, no adivina ═══ DEMO OK: flujo completo conciliado ═══
PayPal does not operate inside Nicaragua, so the buyer is in the US on the rail they already have. This demo runs entirely on the PayPal sandbox with synthetic data; no real money moves. The agent today produces ready-to-send messages — the WhatsApp Business API transport is the next step.
Built with: TypeScript, PayPal Orders v2 + Webhooks (sandbox), Model Context Protocol, Zod, Vitest — 65 automated tests. Built for the PayPal AI Hackathon 2026.