## 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 ```http GET /api/v1/reseller/wallet ``` ```bash curl "https://kennhosting.com/api/v1/reseller/wallet" \ -H "Authorization: Bearer kh_live_YOUR_TOKEN" \ -H "Accept: application/json" ``` **Réponse :** ```json { "success": true, "data": { "live": { "balance": 250000, "currency": "XAF" }, "sandbox": { "balance": 500000, "currency": "XAF" } } } ``` ## Historique des transactions ```http GET /api/v1/reseller/wallet/transactions?mode=live ``` **Paramètres :** | Paramètre | Valeur | Description | |-----------|--------|-------------| | `mode` | `live` \| `sandbox` | Wallet à consulter (défaut : `live`) | | `page` | integer | Page (défaut : 1) | **Réponse :** ```json { "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 ```http POST /api/v1/reseller/wallet/topup ``` **Corps :** ```json { "amount": 100000 } ``` **Réponse :** ```json { "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) ```http 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 :** ```json { "amount": 500000 } ``` **Réponse :** ```json { "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`.