Vue d’ensemble

Chaque compte revendeur possède deux wallets :
  • Wallet live : débité pour les opérations réelles (hébergement, domaines, VPS, email)
  • Wallet sandbox : débité pour les simulations de test (rechargeable librement)
Scope requis : reseller:wallet

Consulter les soldes

GET /api/v1/reseller/wallet
curl "https://kennhosting.com/api/v1/reseller/wallet" \
  -H "Authorization: Bearer kh_live_YOUR_TOKEN" \
  -H "Accept: application/json"
Réponse :
{
  "success": true,
  "data": {
    "live": {
      "balance": 250000,
      "currency": "XAF"
    },
    "sandbox": {
      "balance": 500000,
      "currency": "XAF"
    }
  }
}

Historique des transactions

GET /api/v1/reseller/wallet/transactions?mode=live
Paramètres :
ParamètreValeurDescription
modelive | sandboxWallet à consulter (défaut : live)
pageintegerPage (défaut : 1)
Réponse :
{
  "success": true,
  "data": [
    {
      "id": 4,
      "type": "debit",
      "amount": "45000.00",
      "balance_after": "205000.00",
      "description": "VPS VPS START — client #1",
      "reference": null,
      "created_at": "2026-06-12T19:58:36.000000Z"
    }
  ],
  "meta": {
    "pagination": {
      "total": 1,
      "per_page": 50,
      "current_page": 1,
      "last_page": 1,
      "mode": "live"
    }
  }
}

Recharger le wallet live

POST /api/v1/reseller/wallet/topup
Corps :
{
  "amount": 100000
}
Réponse :
{
  "success": true,
  "data": {
    "payment_url": "https://pay.notchpay.co/...",
    "reference": "kh_topup_xxxxxx",
    "amount": 100000,
    "currency": "XAF"
  }
}
Redirigez l’utilisateur vers payment_url. Une fois le paiement confirmé, votre wallet live est crédité automatiquement.

Créditer le wallet sandbox (gratuit)

POST /api/v1/reseller/wallet/sandbox/credit
Cette route est uniquement accessible avec un token sandbox (kh_test_). Un token live retourne {"code": "sandbox_only"}.
Corps :
{
  "amount": 500000
}
Réponse :
{
  "success": true,
  "data": {
    "balance": 600000,
    "credited": 100000,
    "transaction_id": 1
  }
}

Protection anti double-débit

Les débits sont atomiques : si deux requêtes concurrentes tentent de débiter le même wallet simultanément, une seule passe — l’autre reçoit insufficient_balance.