Créer un payout
curl --request POST \
--url https://sandbox-api.caurisflux.com/api/v1/payouts/initiate \
--header 'X-API-Key: <api-key>'import requests
url = "https://sandbox-api.caurisflux.com/api/v1/payouts/initiate"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://sandbox-api.caurisflux.com/api/v1/payouts/initiate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox-api.caurisflux.com/api/v1/payouts/initiate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sandbox-api.caurisflux.com/api/v1/payouts/initiate"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox-api.caurisflux.com/api/v1/payouts/initiate")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.caurisflux.com/api/v1/payouts/initiate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_bodyPayouts (Décaissements)
Créer un payout
Initier un décaissement (Mobile Money, Virement Bancaire, SWIFT)
POST
/
payouts
/
initiate
Créer un payout
curl --request POST \
--url https://sandbox-api.caurisflux.com/api/v1/payouts/initiate \
--header 'X-API-Key: <api-key>'import requests
url = "https://sandbox-api.caurisflux.com/api/v1/payouts/initiate"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://sandbox-api.caurisflux.com/api/v1/payouts/initiate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox-api.caurisflux.com/api/v1/payouts/initiate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sandbox-api.caurisflux.com/api/v1/payouts/initiate"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://sandbox-api.caurisflux.com/api/v1/payouts/initiate")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.caurisflux.com/api/v1/payouts/initiate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_bodyCrée un payout (décaissement) pour envoyer de l’argent vers un compte Mobile Money ou bancaire.
Objet
Objet
Objet
Objet
Objet
Objet
Flux recommandé : Obtenez d’abord un devis avec
POST /payouts/quote, puis confirmez avec POST /payouts/initiate en passant le quoteId. Le marchand sait exactement combien sera débité avant de confirmer.Authentification
X-API-Key: pk_test_xxx:sk_test_xxx
Avec un devis (recommandé)
QuandquoteId est fourni, les montants, taux, frais et méthode sont verrouillés. Seuls les détails du bénéficiaire sont requis.
Mobile Money (avec quote)
curl -X POST https://sandbox-api.caurisflux.com/api/v1/payouts/initiate \
-H "X-API-Key: pk_test_xxx:sk_test_xxx" \
-H "Content-Type: application/json" \
-d '{
"quoteId": "QT-MOBILE-001",
"externalReference": "PAY-2024-001",
"recipient": {
"phone": "+221771234567",
"firstName": "Amadou",
"lastName": "Diallo"
},
"description": "Paiement fournisseur"
}'
201 - Réponse
{
"transactionId": "POMLWYG1W59FDCEA",
"externalReference": "PAY-2024-001",
"status": "pending",
"amount": 50000,
"currency": "XOF",
"fees": 750,
"netAmount": 49250,
"method": "mobile_money",
"recipient": {
"name": "Amadou Diallo",
"firstName": "Amadou",
"lastName": "Diallo",
"phone": "+221771234567"
},
"mobileWallet": {
"provider": "wave"
},
"createdAt": "2024-01-15T14:00:00.000Z",
"updatedAt": "2024-01-15T14:00:00.000Z"
}
Virement Bancaire Local (avec quote)
curl -X POST https://sandbox-api.caurisflux.com/api/v1/payouts/initiate \
-H "X-API-Key: pk_test_xxx:sk_test_xxx" \
-H "Content-Type: application/json" \
-d '{
"quoteId": "QT-BANK-001",
"externalReference": "PAY-2024-002",
"recipient": {
"name": "SARL Mon Entreprise",
"email": "finance@monentreprise.sn"
},
"bankAccount": {
"bankName": "BICIS",
"bankCode": "SN048",
"accountNumber": "SN08SN000101015000001234567",
"accountName": "SARL Mon Entreprise",
"swiftBic": "BICISNDAXXX"
},
"description": "Virement mensuel"
}'
201 - Réponse
{
"transactionId": "POMLWYG2X6AGDCEB",
"externalReference": "PAY-2024-002",
"status": "pending",
"amount": 500000,
"currency": "XOF",
"fees": 2500,
"netAmount": 497500,
"method": "bank_transfer",
"recipient": {
"name": "SARL Mon Entreprise",
"email": "finance@monentreprise.sn"
},
"bankAccount": {
"bankName": "BICIS",
"bankCode": "SN048",
"accountNumber": "SN08SN000101015000001234567",
"accountName": "SARL Mon Entreprise",
"swiftBic": "BICISNDAXXX"
},
"createdAt": "2024-01-15T14:30:00.000Z",
"updatedAt": "2024-01-15T14:30:00.000Z"
}
International C2C (avec quote)
curl -X POST https://sandbox-api.caurisflux.com/api/v1/payouts/initiate \
-H "X-API-Key: pk_test_xxx:sk_test_xxx" \
-H "Content-Type: application/json" \
-d '{
"quoteId": "QT-A1B2C3D4E5F6",
"externalReference": "PAY-C2C-2024-001",
"purpose": "family_support",
"sender": {
"firstName": "John",
"lastName": "Smith",
"phone": "+447911123456",
"email": "john@email.com",
"address": "123 High Street, London",
"dateOfBirth": "1985-06-15",
"nationality": "GB",
"sourceOfIncome": "salary",
"relationWithRecipient": "family",
"identity": {
"type": "passport",
"number": "GB123456789",
"issuingCountry": "GB",
"issueDate": "2018-01-01",
"expiryDate": "2028-01-01"
}
},
"recipient": {
"firstName": "Raj",
"lastName": "Kumar",
"phone": "+919876543210",
"nationality": "IN",
"address": {
"line1": "456 MG Road",
"city": "Mumbai",
"postalCode": "400001",
"country": "IN"
}
},
"bankAccount": {
"bankName": "HDFC BANK",
"bankCode": "HDFC0001234",
"accountNumber": "12345678901234",
"accountName": "Raj Kumar"
},
"description": "Transfert familial"
}'
201 - Réponse
{
"transactionId": "POMNIY89ABC1D234",
"externalReference": "PAY-C2C-2024-001",
"status": "pending",
"amount": 500,
"currency": "USD",
"fees": 10,
"netAmount": 490,
"method": "bank_transfer",
"recipient": {
"name": "Raj Kumar",
"firstName": "Raj",
"lastName": "Kumar",
"phone": "+919876543210"
},
"bankAccount": {
"bankName": "HDFC BANK",
"bankCode": "HDFC0001234",
"accountNumber": "12345678901234",
"accountName": "Raj Kumar"
},
"international": {
"destinationCountry": "IN",
"destinationCurrency": "INR",
"destinationAmount": 42170,
"fxRate": 84.34,
"purpose": "family_support"
},
"createdAt": "2026-04-03T14:00:00.000Z",
"updatedAt": "2026-04-03T14:00:00.000Z"
}
B2B SWIFT (avec quote)
Le champ
sender.company est requis pour les transferts B2B.curl -X POST https://sandbox-api.caurisflux.com/api/v1/payouts/initiate \
-H "X-API-Key: pk_test_xxx:sk_test_xxx" \
-H "Content-Type: application/json" \
-d '{
"quoteId": "QT-B2B-001",
"externalReference": "PAY-B2B-001",
"purpose": "trade_payment",
"sender": {
"firstName": "Amadou",
"lastName": "Diallo",
"email": "amadou@cauris.com",
"phone": "+221770001234",
"address": "Dakar, Sénégal",
"nationality": "SN",
"dateOfBirth": "1980-05-20",
"identity": {
"type": "passport",
"number": "A12345678",
"issuingCountry": "SN",
"issueDate": "2020-01-01",
"expiryDate": "2030-01-01"
},
"company": {
"name": "Cauris Technologies SARL",
"legalForm": "LLC",
"businessType": "Trading",
"countryOfTrade": "SN",
"currencies": ["USD", "EUR"]
}
},
"recipient": {
"name": "TechCorp GmbH",
"email": "finance@techcorp.de",
"nationality": "DE",
"address": {
"line1": "Friedrichstraße 100",
"city": "Berlin",
"postalCode": "10117",
"country": "DE"
}
},
"bankAccount": {
"bankName": "Deutsche Bank",
"accountNumber": "DE89370400440532013000",
"accountName": "TechCorp GmbH",
"swiftBic": "DEUTDEFFXXX",
"bankBranch": "Berlin Main",
"bankAddress": "Taunusanlage 12, 60325 Frankfurt"
},
"correspondentBank": {
"bankName": "JPMorgan Chase",
"swiftBic": "CHASUS33XXX",
"accountNumber": "400-123-456"
},
"description": "Paiement fournisseur Q1 2024"
}'
201 - Réponse
{
"transactionId": "POMLWYG5A9DJGFHI",
"externalReference": "PAY-B2B-001",
"status": "pending",
"amount": 5000,
"currency": "USD",
"fees": 15000,
"netAmount": 4975,
"method": "bank_transfer",
"recipient": {
"name": "TechCorp GmbH",
"email": "finance@techcorp.de"
},
"bankAccount": {
"bankName": "Deutsche Bank",
"accountNumber": "DE89370400440532013000",
"accountName": "TechCorp GmbH",
"swiftBic": "DEUTDEFFXXX",
"bankBranch": "Berlin Main",
"bankAddress": "Taunusanlage 12, Frankfurt"
},
"correspondentBank": {
"bankName": "JPMorgan Chase",
"swiftBic": "CHASUS33XXX",
"accountNumber": "400-123-456"
},
"international": {
"destinationCountry": "DE",
"destinationCurrency": "EUR",
"destinationAmount": 4580,
"fxRate": 0.916
},
"createdAt": "2024-01-15T16:30:00.000Z",
"updatedAt": "2024-01-15T16:30:00.000Z"
}
Sans devis (legacy)
Vous pouvez aussi créer un payout sans devis en spécifiant tous les paramètres directement.curl -X POST https://sandbox-api.caurisflux.com/api/v1/payouts/initiate \
-H "X-API-Key: pk_test_xxx:sk_test_xxx" \
-H "Content-Type: application/json" \
-d '{
"externalReference": "PAY-2024-001",
"amount": 50000,
"country": "SN",
"currency": "XOF",
"method": "MOBILE_MONEY",
"recipient": {
"phone": "+221771234567",
"firstName": "Amadou",
"lastName": "Diallo"
},
"mobileWallet": {
"provider": "wave"
},
"description": "Paiement fournisseur"
}'
Paramètres
Avec quote (recommandé)
| Champ | Type | Requis | Description |
|---|---|---|---|
quoteId | string | Oui | ID du devis obtenu via POST /payouts/quote |
externalReference | string | Non | Votre référence unique |
purpose | string | International | Motif du transfert |
sender | object | International | Informations sur l’expéditeur |
recipient | object | Oui | Informations sur le bénéficiaire |
bankAccount | object | Virement | Coordonnées bancaires |
correspondentBank | object | SWIFT | Banque correspondante |
description | string | Non | Commentaire |
Sans quote
| Champ | Type | Requis | Description |
|---|---|---|---|
amount | number | Oui | Montant du payout |
method | string | Oui | MOBILE_MONEY ou BANK_TRANSFER |
country | string | Non | Code ISO du pays (défaut: SN) |
currency | string | Non | Devise (défaut: XOF) |
externalReference | string | Non | Votre référence unique |
callbackUrl | string | Non | URL de callback |
metadata | object | Non | Données personnalisées |
Objet sender (international/B2B)
| Champ | Type | Requis | Description |
|---|---|---|---|
firstName | string | Oui | Prénom |
lastName | string | Oui | Nom |
phone | string | Non | Numéro de téléphone |
email | string | Non | |
address | string | Oui | Adresse |
dateOfBirth | string | Oui | Date de naissance (YYYY-MM-DD) |
nationality | string | Oui | Code ISO du pays |
sourceOfIncome | string | Non | Source de revenus |
relationWithRecipient | string | Non | Relation avec le bénéficiaire |
identity | object | Oui | Pièce d’identité |
company | object | B2B | Informations entreprise |
Objet sender.identity
| Champ | Type | Requis | Description |
|---|---|---|---|
type | string | Oui | passport, national_id, driving_license |
number | string | Oui | Numéro du document |
issuingCountry | string | Oui | Pays d’émission (ISO 2) |
issueDate | string | Oui | Date d’émission (YYYY-MM-DD) |
expiryDate | string | Oui | Date d’expiration (YYYY-MM-DD) |
Objet sender.company (B2B)
| Champ | Type | Requis | Description |
|---|---|---|---|
name | string | Oui | Raison sociale |
legalForm | string | Non | Forme juridique (LLC, SA, SARL…) |
businessType | string | Non | Secteur d’activité |
countryOfTrade | string | Non | Pays d’activité |
currencies | array | Non | Devises utilisées |
Objet recipient
| Champ | Type | Requis | Description |
|---|---|---|---|
phone | string | Mobile Money | Numéro (format E.164) |
firstName | string | International | Prénom |
lastName | string | International | Nom |
name | string | Non | Raison sociale ou nom complet |
email | string | Non | |
nationality | string | International | Code ISO du pays |
address | object | Certains corridors | Adresse structurée |
Objet bankAccount
| Champ | Type | Requis | Description |
|---|---|---|---|
accountNumber | string | Oui | Numéro de compte ou IBAN |
swiftBic | string | International | Code SWIFT/BIC |
bankName | string | SWIFT | Nom de la banque |
bankCode | string | Non | Code de la banque |
accountName | string | Non | Nom du titulaire |
bankBranch | string | SWIFT | Agence/branche |
bankAddress | string | SWIFT | Adresse de la banque |
Objet correspondentBank (SWIFT, optionnel)
| Champ | Type | Requis | Description |
|---|---|---|---|
bankName | string | Non | Nom de la banque correspondante |
swiftBic | string | Non | SWIFT/BIC correspondant |
accountNumber | string | Non | Numéro de compte correspondant |
Providers Mobile Money
| Code | Nom |
|---|---|
wave | Wave |
orange_money | Orange Money |
mtn_money | MTN Mobile Money |
moov_money | Moov Money |
free_money | Free Money |
Erreurs
| Code | Message | Solution |
|---|---|---|
400 | Quote expiré | Demandez un nouveau devis |
400 | Corridor non supporté | Vérifiez /payouts/reference/corridors |
400 | Purpose requis | Ajoutez le champ purpose |
400 | Solde insuffisant | Rechargez votre compte |
400 | Limite dépassée | Vérifiez /payouts/limits |
400 | Company requis pour B2B | Ajoutez sender.company |
⌘I