Retraits

Request and track withdrawals from your merchant balance to your bank, mobile money or PayPal account.

Create a payout

POST https://api.germinopay.com/v1/retraits

Parameters

Field Type Required Description
montant number Yes Amount to withdraw.
devise string Yes Currency of the balance (XOF, EUR, USD...).
methode string Yes mobile_money, bank_transfer, paypal
destination object Yes Recipient details (varies by method).

Destination by method

Mobile Money
{
  "methode": "mobile_money",
  "destination": {
    "operateur": "orange",
    "telephone": "+22890000000",
    "nom": "Kossi Amegan"
  }
}
Bank transfer
{
  "methode": "bank_transfer",
  "destination": {
    "iban": "FR7612345678901234567890123",
    "bic": "BNPAFRPPXXX",
    "titulaire": "Ma Société SARL"
  }
}
PayPal
{
  "methode": "paypal",
  "destination": {
    "email": "paiement@masociete.com"
  }
}

Full example

curl -X POST https://api.germinopay.com/v1/retraits \
  -H "Content-Type: application/json" \
  -H "X-Public-Key: pk_live_xxxx" \
  -H "X-Timestamp: 1730000000" \
  -H "X-Signature: hmac_sha256_signature" \
  -d '{
    "montant": 25000,
    "devise": "XOF",
    "methode": "mobile_money",
    "destination": {
      "operateur": "orange",
      "telephone": "+22890000000",
      "nom": "Kossi Amegan"
    }
  }'
<?php
$payload = [
    "montant" => 25000,
    "devise" => "XOF",
    "methode" => "mobile_money",
    "destination" => [
        "operateur" => "orange",
        "telephone" => "+22890000000",
        "nom" => "Kossi Amegan",
    ],
];

$body = json_encode($payload);
$timestamp = time();
$signature = hash_hmac("sha256", "POST/v1/retraits" . $body . $timestamp, $secretKey);

$ch = curl_init("https://api.germinopay.com/v1/retraits");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POSTFIELDS => $body,
    CURLOPT_HTTPHEADER => [
        "Content-Type: application/json",
        "X-Public-Key: " . $publicKey,
        "X-Timestamp: " . $timestamp,
        "X-Signature: " . $signature,
    ],
]);

$data = json_decode(curl_exec($ch), true);
200 OK
{
  "success": true,
  "message": "Payout request created",
  "data": {
    "retrait_id": "po_5f4e3d2c1b",
    "montant": 25000,
    "devise": "XOF",
    "methode": "mobile_money",
    "frais": 250,
    "montant_net": 24750,
    "statut": "demande",
    "destination": {
      "operateur": "orange",
      "telephone": "+228****0000"
    },
    "created_at": "2025-10-01T15:00:00Z",
    "estimated_arrival": "2025-10-03T15:00:00Z"
  }
}
400 Bad Request Insufficient balance
{
  "success": false,
  "error": {
    "code": "INSUFFICIENT_BALANCE",
    "message": "Your XOF balance is 15000. Requested: 25000",
    "available": 15000,
    "requested": 25000
  }
}

Track a payout

GET https://api.germinopay.com/v1/retraits/{id}
curl https://api.germinopay.com/v1/retraits/po_5f4e3d2c1b \
  -H "X-Public-Key: pk_live_xxxx" \
  -H "X-Timestamp: 1730000000" \
  -H "X-Signature: hmac_sha256_signature"

Statuts

Status Meaning
demandePayout request received, pending review.
valideApproved by our team, being processed.
payeMoney has been sent to your destination account.
rejeteRejected. Amount has been refunded to your balance.

Timing

Payout fees A fixed fee is applied per payout (e.g. 1% or 250 XOF minimum). The exact fee is shown before confirming.