API v1

Documentation API revendeur

Cette API sert à une chose : vendre nos VPS depuis votre site, sous votre marque. Vous commandez une machine par un appel HTTP, elle est livrée automatiquement, et vous la pilotez à distance — démarrage, arrêt, redémarrage, réinstallation — sans jamais passer par notre interface.

1. Obtenir une clé API

Rendez-vous dans votre espace client, onglet Revendeur → Mes clés API, et générez une clé. Elle n'est affichée qu'une seule fois : copiez-la immédiatement, nous n'en conservons que l'empreinte et personne — nous compris — ne peut la retrouver ensuite.

Vous pouvez maintenir jusqu'à 5 clés actives simultanément. En pratique, prenez-en une par environnement : une pour votre site en production, une pour vos tests. Si l'une fuite, vous la révoquez sans interrompre l'autre.

Traitez cette clé comme un mot de passe. Elle donne le droit de commander des machines facturées sur votre compte. Elle ne doit jamais apparaître dans du JavaScript, dans un dépôt Git ni dans une URL — uniquement côté serveur, dans une variable d'environnement ou un fichier de configuration hors du dossier web.

2. Authentification

Toutes les requêtes se font sur cette base :

https://oneheberge.fr/api/v1

La clé s'envoie au choix dans l'un des deux en-têtes suivants — les deux sont équivalents, prenez celui qui s'intègre le mieux à votre client HTTP :

# au choix
X-Api-Key: votre_cle
Authorization: Bearer votre_cle

Une requête sans clé valide reçoit un 401. Chaque appel met à jour la date de dernière utilisation de la clé, visible dans votre espace client : c'est le moyen le plus simple de repérer une clé oubliée mais toujours active.

3. Format des réponses et limites

Toutes les réponses sont en JSON et suivent la même enveloppe, succès comme erreur. Votre code n'a donc qu'un seul format à gérer :

{
  "success": true,
  "message": "Success",
  "data": { ... }
}

En cas d'erreur, success vaut false et message contient la raison en clair. Fiez-vous au code HTTP plutôt qu'au texte du message : celui-ci peut être reformulé, pas le code.

Limite de débit

60 requêtes par minute et par adresse IP. Au-delà, l'API répond 429. C'est largement suffisant pour un site marchand : ne bouclez pas sur l'API pour rafraîchir un tableau de bord, mettez les résultats en cache quelques minutes et n'appelez qu'à la demande ou sur événement.

4. Consulter le catalogue

MéthodeCheminDescription
GET/vpsListe les VPS que vous avez commandés via l'API.
GET/vps/{id}Détail d'une machine : état, IP, ressources.
GET/vps/osSystèmes d'exploitation installables.
GET/productsOffres disponibles à la revente, avec leurs identifiants.

Commencez toujours par /products : c'est lui qui vous donne le product_id à passer à la commande. Ne codez pas ces identifiants en dur dans votre site — une offre peut être retirée ou remplacée, et votre tunnel de vente doit suivre sans redéploiement.

5. Commander un VPS

MéthodeChemin
POST/vps/order

Corps de la requête :

ChampObligatoireDescription
product_idouiIdentifiant de l'offre, obtenu via /products.
labelouiVotre référence interne. C'est ce que vous verrez dans la liste : mettez-y l'identifiant de votre propre client, pas un nom générique.
billing_cyclenonmonthly par défaut.
hostnamenonNom d'hôte de la machine.
osnonSystème à installer, parmi /vps/os.
# commande d'un VPS
curl -X POST https://oneheberge.fr/api/v1/vps/order \
  -H "X-Api-Key: $ONEHEBERGE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id": 50, "label": "client-4821", "os": "debian12"}'
Le champ label est votre garde-fou. Mettez-y systématiquement l'identifiant du client final de votre côté. Le jour où vous devez rapprocher une facture, retrouver la machine d'un client ou nettoyer des commandes de test, c'est la seule information qui fera le lien entre votre base et la nôtre.

6. Piloter une machine

MéthodeCheminEffet
POST/vps/{id}/startDémarre la machine.
POST/vps/{id}/stopArrête la machine.
POST/vps/{id}/rebootRedémarre la machine.
POST/vps/{id}/reinstallRéinstalle le système. Efface tout le disque.
GET/vps/{id}/statsConsommation CPU, mémoire, disque et réseau.
La réinstallation est irréversible et immédiate. Il n'y a pas de confirmation côté API : l'appel part, le disque est effacé. Si vous exposez ce bouton à vos clients, mettez la confirmation dans votre interface — une modale explicite, pas un simple clic.

Ces actions sont asynchrones côté hyperviseur : un 200 signifie « ordre accepté », pas « machine déjà démarrée ». Pour afficher un état fiable, interrogez /vps/{id} quelques secondes plus tard plutôt que de supposer le résultat.

7. Codes d'erreur

CodeSignificationQue faire
400Paramètre manquant ou invalideCorrigez la requête, ne réessayez pas telle quelle.
401Clé absente, invalide ou désactivéeVérifiez l'en-tête et l'état de la clé dans votre espace client.
404Ressource introuvableOffre retirée, ou machine qui ne vous appartient pas.
429Limite de débit atteinteAttendez, puis espacez vos appels. Ne bouclez pas.
500Erreur de notre côtéRéessayez plus tard. Si ça persiste, ouvrez un ticket avec l'horodatage.

8. Exemple complet d'intégration

Le scénario type : votre client paie sur votre site, vous commandez la machine, vous stockez son identifiant, puis vous affichez son état dans votre propre interface.

<?php
// Cle lue depuis l'environnement, jamais ecrite dans le code
$key = getenv('ONEHEBERGE_KEY');

function oh_call($method, $path, $body = null) {
    global $key;
    $ch = curl_init('https://oneheberge.fr/api/v1' . $path);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST  => $method,
        CURLOPT_TIMEOUT        => 20,
        CURLOPT_HTTPHEADER     => [
            'X-Api-Key: ' . $key,
            'Content-Type: application/json',
        ],
        CURLOPT_POSTFIELDS => $body ? json_encode($body) : null,
    ]);
    $raw  = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    return [$code, json_decode($raw, true)];
}

// 1. commande, avec la reference de VOTRE client
list($code, $res) = oh_call('POST', '/vps/order', [
    'product_id' => 50,
    'label'      => 'client-' . $monClientId,
    'os'         => 'debian12',
]);

if ($code !== 200) {
    // On NE marque PAS la commande comme livree : on alerte et on garde
    // la trace, sinon le client a paye pour rien.
    error_log('OneHeberge: ' . ($res['message'] ?? 'echec'));
    return;
}

$vpsId = $res['data']['id'];
// 2. a enregistrer chez vous : c'est le lien entre vos deux bases
enregistrerVps($monClientId, $vpsId);

// 3. plus tard, redemarrage demande depuis votre interface
oh_call('POST', "/vps/$vpsId/reboot");
Le point le plus important de cet exemple est le if ($code !== 200). Une commande qui échoue silencieusement, c'est un client qui a payé et qui n'a rien reçu — et vous ne l'apprendrez que par son ticket. Journalisez l'échec, alertez-vous, et ne marquez jamais une commande comme livrée sans avoir reçu l'identifiant de la machine.

Besoin d'aide ?

Une question sur un endpoint, un comportement inattendu, un besoin non couvert ? Ouvrez un ticket depuis votre espace client en précisant l'horodatage de la requête : nos journaux d'API permettent de retrouver l'appel exact et de vous répondre précisément.