Products
Remittance
For remittance companies, that is licensed international money transfer operators (IMTOs): pay out remittances to beneficiaries' bank accounts with the sender and beneficiary details that regulators require.
When to use it
Use remittance instead of Create a transfer when the money comes from an individual sender abroad and you must record who sent it. A remittance always pays from your own business's account; it can't be sent on behalf of a customer.
Before you start
MG_BASE_URL,MG_API_KEYandMG_(an account number of your source account, from List accounts) are set, as in the Quickstart.ACCOUNT_ NUMBER - NGN remittances are paid from a remittance collection account that Multigate sets up for your business. Ask your Multigate contact before you go live. Without it, NGN remittances are accepted and then fail.
- Fund the source account for the amount plus the fee.
- Check the beneficiary's account with Look up an account name. A remittance doesn't check it for you.
- Your API user needs the initiate payment or approve payment permission.
How it works
sequenceDiagram
autonumber
participant You as Your backend
participant MG as Multigate
participant Bank as Beneficiary bank
You->>MG: POST /transfer/name-enquiry (beneficiary account)
MG-->>You: Account name
You->>MG: POST /transfer/remittance (sender, beneficiary, uniqueRequestId)
MG-->>You: 200, data.status pending, pending_approval or processing
MG->>Bank: Payment
Bank-->>MG: Result
MG-)You: transfer / transfer_completed or transfer_failed
A remittance follows the same rules as a payout: balance check, fees, screening, your approval rules, the same statuses and the same webhooks. The differences:
| Remittance | Transfer | |
|---|---|---|
| Sender details | Required (sender., sender., more recommended) |
None |
| Beneficiary check and saving | Not checked, not saved | Looked up and saved |
| On behalf of a customer | No | Yes, with onBehalfOf |
| Large NGN amounts | Refused above the per-payment maximum | Split into several transfers |
| Supporting documents | Can't be sent, so third-party USD remittances are refused | assets |
| Response | Nested under data |
Top level |
| Emails | Only "Transaction Declined" | "Transfer Notification" too |
Send a remittance
Generate a unique (unique across Multigate, with your own prefix) and store it before you call. Then send the remittance:
export MG_REQUEST_ID="acme_rm_$(uuidgen | tr 'A-Z' 'a-z')"
curl -s -X POST "$MG_BASE_URL/payment-service/api/v1/transfer/remittance" \
-H "mp-api-key: $MG_API_KEY" \
-H "Content-Type: application/json" \
-d @- <<EOF
{
"uniqueRequestId": "$MG_REQUEST_ID",
"sourceAccountNumber": "$MG_ACCOUNT_NUMBER",
"currencyIso3Code": "NGN",
"amount": 180000,
"narration": "Family support Oct",
"sender": {
"firstName": "John", "lastName": "Mensah",
"emailAddress": "john.mensah@example.com", "phoneNumber": "+447700900123",
"address": "10 High Street", "city": "London", "countryIso3Code": "GBR"
},
"beneficiary": {
"firstName": "Ama", "lastName": "Mensah",
"accountName": "Ama Mensah", "accountNumber": "0123456789",
"bankBicOrCode": "058", "bankName": "Guaranty Trust Bank", "countryIso3Code": "NGA"
}
}
EOF
{
"message": "Successful",
"data": {
"transactionId": "PMT-261010-170000903311",
"uniqueRequestId": "acme_rm_5c2e8f10-7a4b-4d3e-9f21-6b0c1d2e3f4a",
"status": "processing",
"amount": "180000.00",
"currencyIso3Code": "NGN",
"sourceAccountNumber": "1029384756",
"narration": "Family support Oct",
"sender": { "firstName": "John", "lastName": "Mensah", "countryIso3Code": "GBR" },
"beneficiary": { "accountName": "Ama Mensah", "accountNumber": "0123456789", "bankBicOrCode": "058", "countryIso3Code": "NGA" }
}
}
The remittance is nested under data, unlike single transfers. failureReason appears when status is failed. Store data. with your unique, then follow Payouts › After you send: the webhooks, polling and timeout handling are the same.
- Required:
unique,Request Id source,Account Number currency,Iso3 Code amount,narration,sender.,first Name sender.,last Name beneficiary.,account Number beneficiary.,account Name beneficiary.,bank Bic Or Code beneficiary..country Iso3 Code - Send all the sender details you hold (address, phone, email, country, and BVN for Nigerian senders). They're used for compliance screening.
- Beneficiary fields are limited to those in Initiate a remittance. Others, such as
address(useaddressLine1) orbank, are silently dropped.Country Iso3 Code - Narration is shortened to 36 characters. When Multigate sends the payment to the bank, it adds its own
transactionIdafter your narration (Family support Oct PMT-…), so every payout can be matched to the bank's records during reconciliation. Some banks show only the start of a long narration, so put what the beneficiary must see first. - Track it with Get a remittance by
transactionIdorunique, or with Find transfers.Request Id
Statuses
| Status | Final | Webhook | Meaning |
|---|---|---|---|
pending |
No | — | Being screened. |
pending_ |
No | — | Waiting for an approver in your business. |
processing |
No | — | Sent for payment. Some banks confirm hours later: Multigate keeps asking the bank for the outcome for up to 24 hours (often at first, then less often), so a remittance can complete long after you sent it. |
completed |
Yes | transfer_ |
Paid. |
failed |
Yes | transfer_ (not always) |
Not paid; any debit reversed. Unlike other payouts, a remittance the bank refuses fails straight away, without waiting for Multigate's operations team to confirm it. |
rejected |
Yes | — | Declined by an approver; "Transaction Declined" email to the creator. |
stateDiagram-v2
direction LR
[*] --> pending
[*] --> pending_approval
[*] --> processing
pending --> processing
pending --> failed
pending_approval --> pending
pending_approval --> rejected
processing --> completed
processing --> failed
Emails
Remittances send no "Transfer Notification" emails. The only email is "Transaction Declined", if an approver in your business declines one.
Errors
The 400 errors are the same as payout errors, plus:
| Message | When | Fix |
|---|---|---|
| Maximum amount exceeded | An amount above the per-payment maximum. Remittances aren't split. | Send several remittances, each with its own unique. |
| Supporting documents are required for 3rd party USD transfers. | A USD remittance to someone other than the account holder. | Not possible through this endpoint today; contact Multigate. |
Unable to process remittance transaction (in failureReason, after a transfer_ webhook) |
No remittance collection account is set up for your business (NGN). | Ask Multigate to set it up, then send again with a new unique. |
| Remittance payment not found (Get a remittance) | No transfer of your business has that ID. | Check the ID. |
After a timeout or 5xx, look the remittance up by unique before retrying. See Idempotency.
Next
- Remittance companies (IMTOs): the end-to-end flow.
- Event catalogue for the transfer webhooks.