Vue d’ensemble

Les plans personnalisés vous permettent de définir vos propres offres commerciales : vous choisissez le plan KennHosting de base, lui donnez votre nom et fixez votre prix client. Scope requis : reseller:plans

Créer un plan

POST /api/v1/reseller/plans
Corps de la requête :
ChampTypeRequisDescription
service_plan_idintegerOuiID du plan KennHosting de base (depuis le catalogue)
labelstringOuiNom commercial de votre offre
client_pricedecimalOuiPrix que vous facturez à vos clients (XAF)
descriptionstringNonDescription de votre offre
is_activebooleanNonPlan visible/actif (défaut : true)
curl -X POST "https://kennhosting.com/api/v1/reseller/plans" \
  -H "Authorization: Bearer kh_live_YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "service_plan_id": 1,
    "label": "Pack Démarrage",
    "client_price": 30000,
    "description": "Idéal pour les petits projets web"
  }'
Réponse (201) :
{
  "success": true,
  "data": {
    "id": 1,
    "reseller_profile_id": 1,
    "service_plan_id": 1,
    "label": "Pack Démarrage",
    "description": "Idéal pour les petits projets web",
    "client_price": "30000.00",
    "is_active": true,
    "created_at": "2026-06-12T...",
    "service_plan": {
      "id": 1,
      "slug": "starter",
      "name": "STARTER",
      "category": "essential",
      "price": "25000.00",
      "reseller_price": null,
      "billing_period": "annual"
    }
  }
}
service_plan.price est le prix normal. service_plan.reseller_price est votre prix de gros (si configuré). Votre marge = client_price - (reseller_price ?? price).

Lister vos plans

GET /api/v1/reseller/plans
{
  "success": true,
  "data": [
    {
      "id": 1,
      "label": "Pack Démarrage",
      "client_price": "30000.00",
      "is_active": true,
      "service_plan": { "slug": "starter", "name": "STARTER" }
    }
  ]
}

Modifier un plan

PUT /api/v1/reseller/plans/{id}
{
  "label": "Pack Démarrage Plus",
  "client_price": 35000,
  "is_active": true
}

Supprimer un plan

DELETE /api/v1/reseller/plans/{id}
{
  "success": true,
  "data": { "deleted": true }
}