Migration guides

Migrating from Convera

If you use Convera GlobalPay for Students (formerly Western Union Business Solutions), your students already pay in their home currency through a portal with a payment reference. Qualy works the same way for the student. What changes for you is that every payment is a record you create and track through an API, and you can pay agents and partners from it.

Convera doesn't publish a public developer API for its student payments, so this guide maps workflows rather than API calls.


Concept map

Convera GlobalPay for StudentsQualyNotes
Payer (student with a student id)ContactKeep your student id in a custom field.
Payment instructions + unique referencePayment intent + its linkThe payment carries its own reference, so nothing is matched by hand.
Institution payer portalPayment portal on your subdomain or custom domainOne-off links per student, or reusable links for set fees.
Paying in home currency with a held quotesettlementCurrency, or the student chooses on the portalLocal methods appear by currency.
Card, eWallet, local bank transferMethods on the portalSee Collecting payments.
Agent pays, or sends the student a linkThe agent shares the payment link; payment splits pay the agent's commission—
Tracking emails and textsNotifications and dunningReminders before and after the due date.
Refund with its own referenceRefund—
Reconciliation data into financeWebhooks + queriespaymentIntents.update, transactions.create, splitIntents.update.

Issuing a payment

Where a student would start on Convera's portal and pick your institution, you create the payment and send them straight to it:

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',
    number: 'STU-88231-T1',
    contact: 'chen.wei@example.com',
    currency: 'AUD',
    dueAt: '2027-01-15T00:00:00.000Z',
    items: [{ name: 'Tuition fee — Term 1', category: 'Course', amount: 820000 }],
  }),
});

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

For fees anyone can pay without being invoiced first (application fees, deposits), use a reusable link instead.


Reconciliation

You don't import a file. Listen for:

  • paymentIntents.update — status moves to paid-partial or paid-full.
  • transactions.create — money arrived, with amount, currency and method.

Bank transfers to Qualy are matched by the payment's reference (QLY-PYMT-<number>), shown to the student on the portal.


Cutting over

  • Switch by intake or term. Payments already sent to Convera, and refunds on them, finish with Convera.
  • Import open balances as contacts and payment intents, and send the new links.
  • Update your payment pages and agent instructions to point to Qualy links, so no one pays the same fee twice.
Previous
From PagBank