Use Paymish dynamic virtual accounts so every incoming transfer is already tied to an order.
tags: fintech, api, backend, nigeria
If all customers pay into one account, you end up matching sender names and amounts by eye. Paymish can return a one-time dynamic virtual account for a transaction, straight from your backend with no hosted checkout redirect. Each order gets its own account number, so every incoming transfer is already tied to an order.
const BASE = 'https://api.paymish.com/api/transaction-service/external/v1'; async function createPaymentAccount(order) { const res = await fetch(`${BASE}/transaction-initialize/dva`, { method: 'POST', headers: { Authorization: `Bearer ${process.env.PAYMISH_SECRET_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ email: order.customerEmail, amount: String(order.amountKobo), // kobo reference: order.id, // optional, must be unique }), }); const data = await res.json(); if (!res.ok) throw new Error(`Paymish error ${res.status}: ${JSON.stringify(data)}`); return data; // { status, message, data } } What to know
-
emailandamountare required.referenceis optional and auto-generated if you leave it out, but pass your own order ID so the webhook maps straight back to the order. - The customer's email receives the account details and receipt notifications.
- A 400 means a missing email or amount, or that an account could not be issued. A 401 means a missing or invalid key.
- [CONFIRM: the docs show the response
datafield only as a placeholder. Fill in the real field names for account number, bank, and expiry before publishing.]
Need a permanent account per customer instead of per order? Look at the Dedicated Virtual Accounts collection.
Decide your rules before launch
What should happen in each case?
| Situation | Suggested handling |
|---|---|
| Exact amount | Mark paid and fulfil |
| Underpayment | Do not fulfil. Hold, then refund or ask for the balance |
| Overpayment | Fulfil only if policy allows, and refund the excess |
| Duplicate payment | Fulfil once, refund the extra |
| Payment after your order has expired | Do not auto-fulfil. Review manually |
Always reconcile by the order reference and your own records, never by the sender's name. Confirm each payment with a signed webhook before you fulfil the order.
Docs: docs.paymish.com
