edge+ Multi-Merchant “Pay Now → Xero Paid” (NMI + Xero)
Upwork

Remoto
•5 days ago
•No application
About
We need a developer to build a small multi-merchant backend integration that connects NMI payment webhooks to Xero. When a customer pays an invoice via NMI, the system should automatically mark the correct Xero invoice as PAID for that merchant. Project Summary Multi-merchant setup Each merchant has their own NMI gateway credentials Each merchant connects their own Xero organisation via OAuth2 A single webhook endpoint receives all NMI payment notifications The system identifies which merchant the payment belongs to Extracts the invoice number (from order_id) Creates a Payment in Xero Xero marks the invoice as PAID Logs all events for troubleshooting Simple admin UI to manage merchants and view logs No reconciliation required — only marking invoices paid. ⭐ Core Requirements Build a lightweight backend (Node.js preferred) Database with 4 tables: merchants xero_connections nmi_configs payment_events Xero OAuth2 integration (connect + refresh tokens) Secure NMI webhook endpoint Webhook must: Validate authenticity Identify merchant (via gateway ID) Extract invoice number from order_id Log payment Call Xero API to mark invoice as PAID Basic admin UI: Add/edit merchants Configure NMI credentials Connect to Xero View payment event logs System must be idempotent (no duplicate payments if webhook is sent twice). ⭐ What We Provide NMI test account Xero developer app Xero test organisation Clear field mappings and test scenarios ⭐ Deliverables Fully working backend deployed to our environment Admin UI for internal use Clean, well-documented code Short README explaining: Environment variables Xero setup NMI webhook setup How to test end-to-end ⭐ Ideal Developer Strong experience with Node.js / API development Has built webhook handlers before Comfortable with OAuth2 (bonus if familiar with Xero) Experience with Postgres or MySQL Able to deliver clean, secure, reliable code ⭐ Budget $1,800 USD fixed-price Project size: small but technically important. Estimated time: 5–8 days.




