# Migrating from TransferMate

> Migrate a TransferMate Education or TransferMate Corporate API integration to Qualy: MakeAPayment, FXConversion, global accounts, beneficiaries, payment requests and webhooks mapped to Qualy.

If you built on TransferMate Education (payer payments, FX conversion, payer documents) or TransferMate Corporate (global accounts, beneficiaries, payment requests, outgoing payments), this guide shows where each piece lives in Qualy's API.

---

## Concept map

| TransferMate | Qualy | Notes |
| --- | --- | --- |
| Education: payer payment (`MakeAPayment`) | [Payment intent](/docs/guides/creating-payment-intents.md) + its payment link | The student pays on Qualy's portal in their own currency. |
| Education: FX conversion | `settlementCurrency` on the payment | Qualy prices FX at checkout. |
| Education: payer documents / ID checks | Built into the portal | Over the API, sign returns `424` with the missing fields. See [Collecting payments](/docs/guides/collecting-payments.md#handling-424-errors-missing-information). |
| Corporate: Global / Virtual Accounts | Bank transfer methods on the payment | Each payment shows the account and reference to pay to. |
| Corporate: payment requests | [Payment links](/docs/guides/payment-links.md) | One-off links per student, or reusable links per service. |
| Corporate: clients, banks and beneficiaries | [Partnerships](https://v1-spec.qualyhq.com/#post-/v1/partnerships/create) + their [bank accounts](/docs/guides/creating-bank-accounts.md) | Set beneficiaries up again: bank details held by TransferMate don't come across. |
| Corporate: outgoing payments | [Payment splits](/docs/guides/creating-payment-splits.md) | Declared on the payment; paid out by Qualy once the student's money settles. |
| Payment / credit webhooks | [Qualy webhooks](/docs/webhooks/events.md) | `paymentIntents.update`, `transactions.create`, `splitIntents.update`. |
| Statements | Transactions + [queries](/docs/queries.md) | — |

---

## Payment references

Bank transfers to Qualy are matched by the payment's reference, `QLY-PYMT-<number>`, shown to the payer on the portal. Ask payers to quote it exactly. If you set your own `number` on a payment it can't start with `QLY-PYMT-`, which is reserved.

Payers who saved your TransferMate bank details should use the details shown on their Qualy payment instead.

---

## Moving a payment flow

**Before (TransferMate Education):** quote with `FXConversion`, create with `MakeAPayment`, wait for the status webhook.

**After (Qualy):** create one payment and send its link. The student picks their currency and method on the portal; you get a webhook when it's paid.

```javascript
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: 'priya.shah@example.com',
    currency: 'AUD', // what you invoice; the student can pay in INR, EUR…
    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);
```

**Before (TransferMate Corporate):** receive into a Global Account, then send an outgoing payment to the school's beneficiary.

**After (Qualy):** attach a [payment split](/docs/guides/creating-payment-splits.md) to the payment. Qualy pays the school (and any agent) after the student's payment settles, and sends remittance advice.

---

## What doesn't carry over

* **TransferMate ids** (transaction, order, beneficiary, account) stay on old records only.
* **Beneficiary bank details** — add each school or agent as a partnership with its bank account.
* **Booked FX deals and rates** — new payments are quoted at checkout.
* **Card payments** — payers enter their card on Qualy's portal.
* **Webhook handlers** — rebuild them on Qualy's events.
