## 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 ```http POST /api/v1/reseller/clients ``` **Corps de la requête :** | Champ | Type | Requis | Description | |-------|------|--------|-------------| | `name` | string | Oui | Nom complet du client | | `email` | string | Oui | Email unique | | `password` | string | Non | Mot de passe (auto-généré si absent) | | `external_ref` | string | Non | Référence dans votre système | ```bash 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) :** ```json { "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 :** ```json // 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 ```http GET /api/v1/reseller/clients ``` Retourne uniquement les clients correspondant au mode du token (live ou sandbox). **Paramètres optionnels :** | Paramètre | Description | |-----------|-------------| | `page` | Numéro de page (défaut : 1) | | `per_page` | Éléments par page (défaut : 50) | **Réponse :** ```json { "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 ```http GET /api/v1/reseller/clients/{id} ``` Inclut la liste des services actifs du client. ```json { "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 ```http PUT /api/v1/reseller/clients/{id} ``` | Champ | Type | Description | |-------|------|-------------| | `name` | string | Nouveau nom (synchronisé avec le compte KH en live) | | `external_ref` | string | Nouvelle référence externe | ```json { "name": "Jean D. Modifié", "external_ref": "client-001-v2" } ``` ## Supprimer un client ```http 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) :** ```json { "success": true, "data": { "deleted": true } } ```