Virer entre deux soldes
curl --request POST \
--url https://mercy-pay.com/api/v1/wallet_transfers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"from_wallet": "wal_5e0c8a7b3d1f4a2e9c648b7f0d2e1a93",
"to_wallet": "wal_0b76919140c74c4c99d52f5c1734b743",
"amount": 25000
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://mercy-pay.com/api/v1/wallet_transfers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'from_wallet' => 'wal_5e0c8a7b3d1f4a2e9c648b7f0d2e1a93',
'to_wallet' => 'wal_0b76919140c74c4c99d52f5c1734b743',
'amount' => 25000
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
from_wallet: 'wal_5e0c8a7b3d1f4a2e9c648b7f0d2e1a93',
to_wallet: 'wal_0b76919140c74c4c99d52f5c1734b743',
amount: 25000
})
};
fetch('https://mercy-pay.com/api/v1/wallet_transfers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://mercy-pay.com/api/v1/wallet_transfers"
payload = {
"from_wallet": "wal_5e0c8a7b3d1f4a2e9c648b7f0d2e1a93",
"to_wallet": "wal_0b76919140c74c4c99d52f5c1734b743",
"amount": 25000
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"data": {
"id": "<string>",
"object": "wallet_transfer",
"livemode": true,
"created": "2023-11-07T05:31:56Z",
"from_wallet": "<string>",
"to_wallet": "<string>",
"amount": 123,
"currency": "<string>"
}
}{
"error": {
"type": "idempotency_error",
"code": "idempotency_key_missing",
"message": "L'en-tête Idempotency-Key est obligatoire.",
"param": null,
"doc_url": "https://docs.mercy-pay.com/developers/errors#idempotency_key_missing",
"request_id": "req_01jc8x4m2v7t9qk3n5w6y8z0ab"
}
}{
"error": {
"type": "authentication_error",
"code": "api_key_invalid",
"message": "Clé API invalide.",
"param": null,
"doc_url": "https://docs.mercy-pay.com/developers/errors#api_key_invalid",
"request_id": "req_01jc8x4m2v7t9qk3n5w6y8z0ab"
}
}{
"error": {
"type": "authentication_error",
"code": "live_mode_requires_kyc",
"message": "Le mode live demande un KYC approuvé.",
"param": null,
"doc_url": "https://docs.mercy-pay.com/developers/errors#live_mode_requires_kyc",
"request_id": "req_01jc8x4m2v7t9qk3n5w6y8z0ab"
}
}{
"error": {
"type": "invalid_request_error",
"code": "validation_failed",
"message": "Solde disponible insuffisant pour ce montant.",
"param": "amount",
"doc_url": "https://docs.mercy-pay.com/developers/errors#validation_failed",
"request_id": "req_01jc8x4m2v7t9qk3n5w6y8z0ab"
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limited",
"message": "Trop de requêtes.",
"param": null,
"doc_url": "https://docs.mercy-pay.com/developers/errors#rate_limited",
"request_id": "req_01jc8x4m2v7t9qk3n5w6y8z0ab"
}
}Virer entre deux soldes
Déplace un montant entre deux de vos soldes mobile money du même pays et de la même devise, par exemple de MTN vers Orange au Cameroun, pour qu’un retrait puisse partir vers l’un ou l’autre. Immédiat et sans frais. Un solde carte ne peut pas y prendre part. Le solde débité doit couvrir le montant, retraits déjà validés déduits.
POST
/
api
/
v1
/
wallet_transfers
Virer entre deux soldes
curl --request POST \
--url https://mercy-pay.com/api/v1/wallet_transfers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"from_wallet": "wal_5e0c8a7b3d1f4a2e9c648b7f0d2e1a93",
"to_wallet": "wal_0b76919140c74c4c99d52f5c1734b743",
"amount": 25000
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://mercy-pay.com/api/v1/wallet_transfers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'from_wallet' => 'wal_5e0c8a7b3d1f4a2e9c648b7f0d2e1a93',
'to_wallet' => 'wal_0b76919140c74c4c99d52f5c1734b743',
'amount' => 25000
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
from_wallet: 'wal_5e0c8a7b3d1f4a2e9c648b7f0d2e1a93',
to_wallet: 'wal_0b76919140c74c4c99d52f5c1734b743',
amount: 25000
})
};
fetch('https://mercy-pay.com/api/v1/wallet_transfers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://mercy-pay.com/api/v1/wallet_transfers"
payload = {
"from_wallet": "wal_5e0c8a7b3d1f4a2e9c648b7f0d2e1a93",
"to_wallet": "wal_0b76919140c74c4c99d52f5c1734b743",
"amount": 25000
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"data": {
"id": "<string>",
"object": "wallet_transfer",
"livemode": true,
"created": "2023-11-07T05:31:56Z",
"from_wallet": "<string>",
"to_wallet": "<string>",
"amount": 123,
"currency": "<string>"
}
}{
"error": {
"type": "idempotency_error",
"code": "idempotency_key_missing",
"message": "L'en-tête Idempotency-Key est obligatoire.",
"param": null,
"doc_url": "https://docs.mercy-pay.com/developers/errors#idempotency_key_missing",
"request_id": "req_01jc8x4m2v7t9qk3n5w6y8z0ab"
}
}{
"error": {
"type": "authentication_error",
"code": "api_key_invalid",
"message": "Clé API invalide.",
"param": null,
"doc_url": "https://docs.mercy-pay.com/developers/errors#api_key_invalid",
"request_id": "req_01jc8x4m2v7t9qk3n5w6y8z0ab"
}
}{
"error": {
"type": "authentication_error",
"code": "live_mode_requires_kyc",
"message": "Le mode live demande un KYC approuvé.",
"param": null,
"doc_url": "https://docs.mercy-pay.com/developers/errors#live_mode_requires_kyc",
"request_id": "req_01jc8x4m2v7t9qk3n5w6y8z0ab"
}
}{
"error": {
"type": "invalid_request_error",
"code": "validation_failed",
"message": "Solde disponible insuffisant pour ce montant.",
"param": "amount",
"doc_url": "https://docs.mercy-pay.com/developers/errors#validation_failed",
"request_id": "req_01jc8x4m2v7t9qk3n5w6y8z0ab"
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limited",
"message": "Trop de requêtes.",
"param": null,
"doc_url": "https://docs.mercy-pay.com/developers/errors#rate_limited",
"request_id": "req_01jc8x4m2v7t9qk3n5w6y8z0ab"
}
}Utile quand vos clients paient surtout par un opérateur et que vous voulez retirer vers un autre : le montant passe d’un solde à l’autre tout de suite, sans frais. Les deux soldes doivent être du même pays et de la même devise.
Authorizations
Headers
Obligatoire ici. Une clé unique par opération : la rejouer pendant 24 heures renvoie la même réponse sans rien créer de plus. Voir Idempotence.
Maximum string length:
255Body
application/json
Le solde à débiter (wal_…), voir Lister les soldes
Response
Le virement fait