Migration guides

Using Qualy with NexPay

NexPay and Qualy are independent companies in the same group. They're built to work side by side:

  • NexPay moves money across borders — regulated international transfers for education agents, schools and the students and parents paying them, with a person to talk to when it matters.
  • Qualy runs the back office around those payments — invoicing, payment plans, local payment methods, reconciliation, commission payouts, chasing, and syncing with Xero, QuickBooks and HubSpot.

Qualy already uses NexPay for cross-border FX. So if you use NexPay today, you don't have to leave it. This guide is for teams who want to manage payments in Qualy, or move a NexPay workflow onto Qualy's API.


Concept map

NexPayQualyNotes
Student / payerContactThe student is the contact; whoever pays (a parent, a sponsor) is the payer on the payment.
Payment intent / pay pagePayment intent + links.short—
Public or reusable payment linkService + template—
Portioned links / instalmentsOrders or subscriptions—
Payee / recipientPartnership + bank accountSchools, agents and suppliers you pay.
CommissionsPayment splitskeep-percentage keeps your commission and sends the rest to the school.
Settlements / remittance advicePayouts + remittance adviceCreated when a split is paid out.
Inbound payments / receiptsTransactions + payment receiptstransactions.create webhook.
ReturnsRefunds—
FX quotessettlementCurrency on the paymentQualy prices FX at checkout; NexPay is one of the rails behind it.
Zapier triggersWebhookspaymentIntents.update, transactions.create, splitIntents.update.

API differences

—NexPayQualy
Base URLhttps://api.nexpay.com.auhttps://api.qualyhq.com/v1
AuthX-API-Key: <clientId>:<secret>Authorization: ApiKey <key> + X-TENANT-ID
AmountsDecimal strings ("1350.00")Integers in minor units (135000)
Who sets the amountamountMode (payer-fixed, recipient-fixed…)You invoice in currency; the payer's amount in their currency is worked out at checkout.

A NexPay payment, in Qualy

const res = await fetch('https://api.qualyhq.com/v1/payment-intents/create', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'ApiKey your-api-key-here',
    'X-TENANT-ID': 'your-tenant-id-here',
  },
  body: JSON.stringify({
    intentType: 'ad-hoc',
    contact: 'minh.nguyen@example.com',
    currency: 'AUD',
    settlementCurrency: 'VND', // optional: fix the payer's currency
    items: [{ name: 'Tuition fee', amount: 820000 }],
  }),
});

const { data: payment } = await res.json();
console.log(payment.links.short);

Then add the school as a payment split so Qualy pays them once the student's money arrives.


What stays in NexPay

  • Your NexPay account, its compliance onboarding and its wallet balances. Qualy has its own onboarding.
  • NexPay rate alerts and rate history.
  • Existing NexPay pay-page links. Issue new Qualy links for new payments; let open NexPay links finish where they are.
Previous
From Edvisor & EdWallet