Vue d’ensemble

Les clients revendeurs sont les utilisateurs finaux de votre plateforme. En mode live, KennHosting crée un compte utilisateur (is_reseller_client=true) — ce compte ne peut pas se connecter directement sur kennhosting.com. En mode sandbox, aucun compte réel n’est créé (user_id=null). Scope requis : reseller:clients

Créer un client

POST /api/v1/reseller/clients
Corps de la requête :
ChampTypeRequisDescription
namestringOuiNom complet du client
emailstringOuiEmail unique
passwordstringNonMot de passe (auto-généré si absent)
external_refstringNonRéférence dans votre système
curl -X POST "https://kennhosting.com/api/v1/reseller/clients" \
  -H "Authorization: Bearer kh_live_YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Jean Dupont",
    "email": "jean@exemple.cm",
    "external_ref": "client-001"
  }'
Réponse (201) :
{
  "success": true,
  "data": {
    "id": 1,
    "name": "Jean Dupont",
    "email": "jean@exemple.cm",
    "external_ref": "client-001",
    "sandbox": false,
    "user_id": 42
  }
}
En mode sandbox (kh_test_), "sandbox": true et "user_id": null. Aucun compte KennHosting n’est créé.
Erreurs possibles :
// Email déjà utilisé pour un de vos clients
{"code": "duplicate_email", "message": "Un client avec cet email existe déjà."}

// Email déjà utilisé sur KennHosting (live uniquement)
{"code": "email_taken", "message": "Cet email est déjà utilisé sur KennHosting."}

Lister les clients

GET /api/v1/reseller/clients
Retourne uniquement les clients correspondant au mode du token (live ou sandbox). Paramètres optionnels :
ParamètreDescription
pageNuméro de page (défaut : 1)
per_pageÉléments par page (défaut : 50)
Réponse :
{
  "success": true,
  "data": [
    {
      "id": 1,
      "reseller_profile_id": 1,
      "user_id": 42,
      "name": "Jean Dupont",
      "email": "jean@exemple.cm",
      "external_ref": "client-001",
      "sandbox": false,
      "created_at": "2026-01-15T10:00:00.000000Z",
      "user": {
        "id": 42,
        "name": "Jean Dupont",
        "email": "jean@exemple.cm"
      }
    }
  ],
  "meta": {
    "pagination": {
      "total": 1,
      "per_page": 50,
      "current_page": 1,
      "last_page": 1
    }
  }
}

Détail d’un client

GET /api/v1/reseller/clients/{id}
Inclut la liste des services actifs du client.
{
  "success": true,
  "data": {
    "id": 1,
    "name": "Jean Dupont",
    "email": "jean@exemple.cm",
    "user": { "id": 42, "name": "Jean Dupont", "email": "jean@exemple.cm", "created_at": "..." },
    "services": [
      { "id": 5, "uuid": "...", "domain": "jean.cm", "status": "active" }
    ]
  }
}

Modifier un client

PUT /api/v1/reseller/clients/{id}
ChampTypeDescription
namestringNouveau nom (synchronisé avec le compte KH en live)
external_refstringNouvelle référence externe
{
  "name": "Jean D. Modifié",
  "external_ref": "client-001-v2"
}

Supprimer un client

DELETE /api/v1/reseller/clients/{id}
La suppression est bloquée si le client possède des services actifs ou des commandes en cours (has_services). Supprimez d’abord tous ses services.
Réponse (200) :
{
  "success": true,
  "data": { "deleted": true }
}