Principe

Le mode sandbox vous permet de développer et tester votre intégration sans créer de ressources réelles ni débiter votre wallet live. Un token kh_test_* active automatiquement le mode sandbox pour toutes les requêtes.

Comportement par mode

OpérationMode Live (kh_live_)Mode Sandbox (kh_test_)
Création clientCompte utilisateur créé (is_reseller_client=true)Enregistrement fictif, user_id=null
Hébergement webCompte cPanel réel crééSimulation — aucune ressource créée
DomaineEnregistrement réel effectuéSimulation — 5 000 XAF débité du wallet sandbox
VPSServeur cloud provisionnéSimulation — server_id: sb_xxxx, ipv4: 0.0.0.0
Email ProBoîtes email crééesSimulation — status: active immédiat
Wallet débitéWallet liveWallet sandbox
WebhooksEnvoyés normalementEnvoyés avec "sandbox": true
TicketsVrais tickets KennHostingVrais tickets (pas de simulation)

Créer un token sandbox

Depuis votre espace revendeur → API, cochez “Token sandbox (kh_test_)” lors de la création.

Créditer le wallet sandbox

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

Isolation des données

Les clients créés en sandbox ont "sandbox": true et ne sont jamais visibles depuis un token live. Un token live ne voit que ses clients live, un token sandbox ne voit que ses clients sandbox.
# Token SANDBOX → liste uniquement les clients sandbox
GET /api/v1/reseller/clients
# → ["sandbox": true, "user_id": null, ...]

# Token LIVE → liste uniquement les clients live
GET /api/v1/reseller/clients
# → ["sandbox": false, "user_id": 42, ...]

Exemple de flow sandbox complet

# 1. Créditer le wallet sandbox
curl -X POST ".../wallet/sandbox/credit" \
  -H "Authorization: Bearer kh_test_YOUR_TOKEN" \
  -d '{"amount": 500000}'

# 2. Créer un client fictif
curl -X POST ".../clients" \
  -H "Authorization: Bearer kh_test_YOUR_TOKEN" \
  -d '{"name": "Jean Test", "email": "jean@test.cm"}'
# → {"sandbox": true, "user_id": null}

# 3. Enregistrer un domaine (simulé, 5000 XAF débité)
curl -X POST ".../clients/1/domains" \
  -H "Authorization: Bearer kh_test_YOUR_TOKEN" \
  -d '{"domain": "jean-test.cm", "years": 1}'
# → {"sandbox": true, "amount_debited": 5000}

# 4. Provisionner un hébergement (simulé)
curl -X POST ".../clients/1/hosting" \
  -H "Authorization: Bearer kh_test_YOUR_TOKEN" \
  -d '{"domain": "jean-test.cm", "whm_package": "starter"}'
# → {"sandbox": true, "username": "sb_xxxxx"}