Endpoint
POST:https://sandboxapi.me-cash.com/v2/payout
Request Details
Headers
Include these headers in your request:| Header | Value | Required |
|---|---|---|
Content-Type | application/json | β Yes |
x-api-key | YOUR_API_KEY | β Yes |
meCash supports two Payment Channels for CAD Payouts:
- Bank Transfer: Bank Transfer is the traditional way to send money directly into a recipientβs bank account.
- Interac: The Interac E-Transfer is a popular Canadian payment service that lets you send money using an email address or mobile phone number.
Sample Request for Bank Transfer
curl --location --request POST 'https://sandboxapi.me-cash.com/v2/payout' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"recipient": {
"name": "John Chuks",
"address": "12 blue street",
"account": {
"bankName": "Bank of Test",
"accountNumber": "23099XXXXX",
"address": "bank address",
"sortCode": "890",
"swiftCode": "SWIFT1234",
"transitNumber": "12345"
},
"paymentChannel": "BANK_TRANSFER", // INTERAC
"currency": "CAD",
"country": "CA"
},
"quoteId": "f1474828-6a2e-4ee8-8598-xxxxxxxxxxxx",
"reason": "Gift",
"invoice": "4b9b6d30-a2ed-421a-bd69-xxxxxxxxxxxx",
"remark": "test"
}'
const url = 'https://sandboxapi.me-cash.com/v2/payout';
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
},
body: JSON.stringify({
recipient: {
name: "John Chuks",
address: "12 blue street",
account: {
bankName: "Bank of Test",
accountNumber: "230999******",
address: "bank address",
sortCode: "890",
swiftCode": "SWIFT1234",
transitNumber: "12345"
},
paymentChannel: "BANK_TRANSFER",
currency: "CAD",
country: "CA"
},
quoteId: "f1474828-6a2e-4ee8-8598-xxxxxxxxxxx",
reason: "Gift",
invoice: "4b9b6d30-a2ed-421a-bd69-xxxxxxxxxxxx",
remark: "test"
})
};
fetch(url, options)
.then(res => {
if (!res.ok) {
throw new Error(`HTTP error! status: ${res.status}`);
}
return res.json();
})
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
import requests
import json
url = "https://sandboxapi.me-cash.com/v2/payout"
payload = {
"recipient": {
"name": "John Chuks",
"address": "12 blue street",
"account": {
"bankName": "Bank of Test",
"accountNumber": "230999******",
"address": "bank address",
"sortCode": "890",
"swiftCode": "SWIFT1234",
"transitNumber": "12345"
},
"paymentChannel": "BANK_TRANSFER",
"currency": "CAD",
"country": "CA"
},
"quoteId": "f1474828-6a2e-4ee8-8598-xxxxxxxxxx",
"reason": "Gift",
"invoice": "4b9b6d30-a2ed-421a-bd69-xxxxxxxxxxxx",
"remark": "test"
}
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
}
try:
response = requests.post(url, headers=headers, data=json.dumps(payload))
response.raise_for_status()
print(response.json())
except requests.exceptions.HTTPError as err:
print(f"HTTP Error: {err}")
const axios = require('axios');
const url = 'https://sandboxapi.me-cash.com/v2/payout';
const data = {
recipient: {
name: "John Chuks",
address: "12 blue street",
account: {
bankName: "Bank of Test",
accountNumber: "230999******",
address: "bank address",
sortCode: "890",
swiftCode: "SWIFT1234",
transitNumber: "12345"
},
paymentChannel: "BANK_TRANSFER",
currency: "CAD",
country: "CA"
},
quoteId: "f1474828-6a2e-4ee8-8598-xxxxxxxxxx",
reason: "Gift",
invoice: "4b9b6d30-a2ed-421a-bd69-xxxxxxxxxxxx",
remark: "test"
};
const config = {
headers: {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
}
};
axios.post(url, data, config)
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error:', error.response ? error.response.data : error.message);
});
Sample Request: Interac E-Transfer
Here are examples of how to make a CAD payout request via Interac, using the recipientβs email or mobile number.curl --location --request POST 'https://sandboxapi.me-cash.com/v2/payout' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"recipient": {
"name": "Nettie Wuckert",
"mobileNumber": "613700****",
"email": "Guiseppe_Wisoky77@example.net",
"type": "BUSINESS",
"account": {},
"paymentChannel": "INTERAC",
"currency": "CAD",
"country": "CA",
"stored": true
},
"quoteId": "5392890f-cab6-40ee-8db2-xxxxxxxxxx",
"reason": "Gift",
"invoice": "4b9b6d30-a2ed-421a-bd69-xxxxxxxxxxxx",
"remark": "Testing"
}'
const url = 'https://sandboxapi.me-cash.com/v2/payout';
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
},
body: JSON.stringify({
recipient: {
name: "Nettie Wuckert",
mobileNumber: "613700****",
email: "Guiseppe_Wisoky77@example.net",
type: "BUSINESS",
account: {},
paymentChannel: "INTERAC",
currency: "CAD",
country: "CA",
stored: true
},
quoteId: "5392890f-cab6-40ee-8db2-9de2532b2de0",
reason: "Gift",
invoice: "4b9b6d30-a2ed-421a-bd69-xxxxxxxxxxxx",
remark: "Testing"
})
};
fetch(url, options)
.then(res => {
if (!res.ok) {
throw new Error(`HTTP error! status: ${res.status}`);
}
return res.json();
})
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
import requests
import json
url = "https://sandboxapi.me-cash.com/v2/payout"
payload = {
"recipient": {
"name": "Nettie Wuckert",
"mobileNumber": "613700****",
"email": "Guiseppe_Wisoky77@example.net",
"type": "BUSINESS",
"account": {},
"paymentChannel": "INTERAC",
"currency": "CAD",
"country": "CA",
"stored": true
},
"quoteId": "5392890f-cab6-40ee-8db2-xxxxxxxxxx",
"reason": "Gift",
"invoice": "4b9b6d30-a2ed-421a-bd69-xxxxxxxxxxxx",
"remark": "Testing"
}
headers = {
"x-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
}
try:
response = requests.post(url, headers=headers, data=json.dumps(payload))
response.raise_for_status()
print(response.json())
except requests.exceptions.HTTPError as err:
print(f"HTTP Error: {err}")
const axios = require('axios');
const url = 'https://sandboxapi.me-cash.com/v2/payout';
const data = {
recipient: {
name: "Nettie Wuckert",
mobileNumber: "613700****",
email: "Guiseppe_Wisoky77@example.net",
type: "BUSINESS",
account: {},
paymentChannel: "INTERAC",
currency: "CAD",
country: "CA",
stored: true
},
quoteId: "5392890f-cab6-40ee-8db2-xxxxxxxxxx",
reason: "Gift",
invoice: "4b9b6d30-a2ed-421a-bd69-xxxxxxxxxxxx",
remark: "Testing"
};
const config = {
headers: {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY'
}
};
axios.post(url, data, config)
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error:', error.response ? error.response.data : error.message);
});
Request Body Breakdown
| Field | Type | Description | Required |
|---|---|---|---|
quoteId | String | The unique ID of the quote for this payout. | β Yes |
reason | String | The purpose of the transfer (e.g., Payment for services). | β Yes |
invoice | String | Optional identifier for the invoice (returned from file upload). | β No |
remark | String | An optional, additional note about the transaction. | β No |
recipient | Object | An object containing all details about the person receiving the funds. | β Yes |
recipient.name | String | The full name of the recipient or business. | β Yes |
recipient.paymentChannel | String | The payment method. Can be BANK_TRANSFER or INTERAC for CAD payouts. | β Yes |
recipient.currency | String | The ISO currency code. Must be CAD. | β Yes |
recipient.country | String | The recipientβs two-letter ISO country code. Must be CA. | β Yes |
recipient.mobileNumber | String | (Interac Only) The recipientβs mobile number. Either mobileNumber or email is required for Interac. | β Yes |
recipient.email | String | (Interac Only) The recipientβs email address. Either mobileNumber or email is required for Interac. | β Yes |
recipient.type | String | (Interac Only) The recipient type. Can be INDIVIDUAL or BUSINESS. | β Yes |
recipient.stored | Boolean | (Interac Only) Set to true if the recipient is a saved beneficiary. | β Yes |
recipient.address | String | (Bank Transfer Only) The recipientβs full residential or business address. | β Yes |
recipient.account | Object | (Bank Transfer Only) An object containing the recipientβs bank account details. | β Yes |
recipient.account.accountNumber | String | (Bank Transfer Only) The recipientβs bank account number. | β Yes |
recipient.account.bankName | String | (Bank Transfer Only) The name of the recipientβs bank. | β Yes |
recipient.account.address | String | (Bank Transfer Only) The address of the recipientβs bank branch. | β Yes |
recipient.account.sortCode | String | (Bank Transfer Only) The 3-digit institution number for the Canadian bank. | β Yes |
recipient.account.swiftCode | String | (Bank Transfer Only) The recipient bankβs SWIFT/BIC code. | β Yes |
recipient.account.transitNumber | String | (Bank Transfer Only) The 5-digit number identifying the recipientβs bank branch in Canada. | β Yes |
Success Response (Bank Transfer) (200 OK)
If the payout is successfully created, the API returns the following response:copy
{
"message": "Transaction created successfully",
"status": "success",
"data": {
"id": "d4e5f6a7-b8c9-1234-abcd-xxxxxxxxxxxxx",
"invoice": "4b9b6d30-a2ed-421a-bd69-xxxxxxxxxxxx",
"reason": "Gift",
"referenceNumber": "CADXFER5ABCFG",
"type": "SEND",
"state": "COMPLETED",
"quote": {
"id": "f1474828-6a2e-4ee8-xxxxxxxxxxxx",
"source": {
"currency": "NGN",
"country": "NG",
"amount": 125000
},
"target": {
"currency": "CAD",
"country": "CA",
"amount": 100
},
"rate": 1250,
"fee": {
"amount": 500
}
},
"recipient": {
"name": "John Chuks",
"address": "12 blue street",
"account": {
"accountNumber": "2309...XXX",
"bankName": "Bank Test",
"sortCode": "890",
"swiftCode": "SWIFT1234",
"transitNumber": "12345"
},
"paymentChannel": "BANK_TRANSFER",
"currency": "CAD",
"country": "CA"
},
"created": "2025-09-23T08:10:15.123456Z",
"processed": "2025-09-23T08:12:30.789101Z"
}
}
Success Response for Interac (200 OK)
If the payout is successfully created, the API returns the following response:copy
{
"message": "Transaction created successfully",
"status": "success",
"data": {
"id": "a1b2c3d4-e5f6-7890-abcd-xxxxxxxxxx",
"invoice": "4b9b6d30-a2ed-421a-bd69-xxxxxxxxxxxx",
"reason": "Gift",
"referenceNumber": "CADINT5ZYXWV",
"type": "SEND",
"state": "COMPLETED",
"quote": {
"id": "5392890f-cab6-40ee-8db2-xxxxxxxxxx",
"source": {
"currency": "NGN",
"country": "NG",
"amount": 150000
},
"target": {
"currency": "CAD",
"country": "CA",
"amount": 120
},
"rate": 1250,
"fee": {
"amount": 500
}
},
"recipient": {
"name": "Nettie Wuckert",
"email": "Guiseppe_Wisoky77@example.net",
"account": {},
"paymentChannel": "INTERAC",
"currency": "CAD",
"country": "CA"
},
"created": "2025-10-03T15:10:15.123456Z",
"processed": "2025-10-03T15:10:16.789101Z"
}
}
Response Breakdown
This table explains each field in the success response payload. Note that some fields in therecipient object are specific to the payment channel used.
| Field | Type | Description |
|---|---|---|
message | String | A confirmation message indicating the result of the request. |
status | String | The overall status of the request, e.g., success. |
data | Object | A container for all the transaction data. |
data.id | String | The unique identifier for this payout transaction. |
data.reason | String | The reason for the payout that was provided in the request. |
data.invoice | String | Optional identifier for the invoice provided in the request. |
data.referenceNumber | String | A unique reference number generated for the payout. |
data.state | String | The current state of the payout (COMPLETED, PENDING, etc.). |
data.quote | Object | An object containing the details of the quote used for this transaction. |
data.quote.target.amount | Number | The converted amount that the recipient is scheduled to receive. |
data.recipient | Object | An object containing details of the recipient. |
data.recipient.name | String | The full name of the recipient. |
data.recipient.email | String | (Interac Only) The recipientβs email address that the e-Transfer notification was sent to. |
data.recipient.paymentChannel | String | The payment channel used for the payout, either BANK_TRANSFER or INTERAC. |
data.recipient.account.accountNumber | String | (Bank Transfer Only) The recipientβs masked bank account number. |
data.recipient.account.bankName | String | (Bank Transfer Only) The name of the recipientβs bank. |
data.recipient.account.sortCode | String | (Bank Transfer Only) The 3-digit institution number of the recipientβs bank. |
data.recipient.account.transitNumber | String | (Bank Transfer Only) The 5-digit transit number of the recipientβs bank branch. |
data.created | String | ISO 8601 timestamp of when the transaction was created. |
data.processed | String | ISO 8601 timestamp of when the transaction was successfully processed. |
Payout Transaction States
The payout transaction can have one of the following states:| State | Description |
|---|---|
COMPLETED | The payout was successfully processed. |
PENDING | The payout is still being processed. |
FAILED | The payout failed to process. |
REFUNDED | The payout has been sent back to sender. |
Error Handling
| Status Code | Meaning | Example Response |
|---|---|---|
400 | Insufficient Balance | Insufficient Balance |
401 | Unauthorized | Invalid API key provided. |
403 | Forbidden | IP not whitelisted |
404 | Not Found | The requested endpoint does not exist. |
422 | Unprocessable Entity | Invalid quote ID provided. |
500 | Internal Server Error | An internal error occurred. |
Best Practices
β EnsurequoteId is valid and linked to an existing quote.β Confirm that the recipientβs account number, transit number, and institution number are correct.
β Use a valid API key in the headers.
β Handle error responses correctly in your integration.

