Référence des endpoints
Chaque route, ce qu'elle attend et ce qu'elle renvoie.
Tous les chemins ci-dessous sont relatifs à https://api.ecloudserv.fr/api/v1 et demandent l'en-tête Authorization: Bearer …. Voir la vue d'ensemble pour les codes d'erreur.
À noter
Compte#
/meportée readcurl https://api.ecloudserv.fr/api/v1/me \
-H "Authorization: Bearer $ECLOUD_API_KEY"{
"id": "usr_1a2b3c",
"username": "lucas",
"email": "lucas@exemple.fr"
}Services#
/serversportée read[
{
"id": "srv_9f8e7d",
"name": "mon-bot",
"status": "RUNNING",
"runtime": "nodejs"
}
]/servers/:idportée read/servers/:id/resourcesportée read{
"cpu_percent": 3.4,
"memory_bytes": 148897792,
"disk_bytes": 512000000,
"network": { "rx_bytes": 91234, "tx_bytes": 44120 },
"uptime_ms": 864000
}/servers/:id/startupportée read/servers/:id/variables/:keyportée write{ "value": "..." }. La plupart des services doivent redémarrer pour en tenir compte./servers/:id/backupsportée read/servers/:id/backupsportée write{ "name": "avant-migration" }./servers/:id/backups/:uuidportée write/servers/:id/activityportée read/servers/:idportée write/serversportée writecurl -X POST https://api.ecloudserv.fr/api/v1/servers \
-H "Authorization: Bearer $ECLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "mon-service",
"runtime": "nodejs",
"ram": 512,
"disk": 2048,
"cpu": 100
}'La réponse est un 201 avec le service créé. Sa création n'est pas instantanée : interrogez /servers/:id jusqu'à ce que son état passe d'installation à démarré.
/servers/:id/powerportée writecurl -X POST https://api.ecloudserv.fr/api/v1/servers/srv_9f8e7d/power \
-H "Authorization: Bearer $ECLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "signal": "restart" }'| Signal | Effet |
|---|---|
start | Démarre un service arrêté. |
stop | Demande un arrêt propre au programme. |
restart | Arrêt puis démarrage. |
kill | Arrêt brutal, sans laisser le programme se fermer. |
Attention
kill coupe le processus net. Si votre programme écrivait un fichier ou une base à cet instant, les données peuvent être laissées à moitié écrites. Réservez-le aux cas où stop ne répond plus.Attendre qu'un service soit prêt
Une action d'alimentation renvoie immédiatement, avant que l'état ait changé. Le bon réflexe est d'interroger l'état, avec un délai qui s'allonge :
async function attendreEtat(id, attendu, timeoutMs = 120000) {
const base = "https://api.ecloudserv.fr/api/v1";
const debut = Date.now();
let delai = 1000;
while (Date.now() - debut < timeoutMs) {
const res = await fetch(`${base}/servers/${id}`, {
headers: { Authorization: `Bearer ${process.env.ECLOUD_API_KEY}` },
});
if (res.ok && (await res.json()).status === attendu) return true;
await new Promise((r) => setTimeout(r, delai));
delai = Math.min(delai * 1.5, 10000); // on ralentit au lieu de marteler
}
throw new Error(`${id} n'a pas atteint l'état ${attendu} à temps`);
}Redimensionner, réinstaller, dépanner
/servers/:id/resourcesportée write{ "ram": 1024 }. Chaque champ est optionnel — seuls ceux fournis sont modifiés./servers/:id/startup/docker-imageportée write/servers/:id/settingsportée read/servers/:id/settings/renameportée write{ "name": "...", "description": "..." }./servers/:id/settings/auto-restartportée write/servers/:id/settings/alertsportée read/servers/:id/settings/alertsportée write{ "ram": 90, "cpu": null }. null désactive l'alerte pour cette ressource./servers/:id/allocationsportée read/servers/:id/allocations/firewallportée write{ "port": 25565, "active": true, "rateLimit": 200 }./servers/:id/reinstallportée write/servers/:id/retryportée write/servers/:id/db-connectionportée read/servers/:id/consoleportée readTerminal (exécuter une commande dans le conteneur)
À la différence de la console, qui n'écrit que sur l'entrée standard du processus, ces routes exécutent une vraie commande DANS le conteneur (docker exec). Le résultat n'est pas immédiat : la commande part en file d'attente vers l'agent du node, on interroge son état ensuite.
/servers/:id/execportée write{ "command": "ls -la /home/container" }. Renvoie un identifiant de tâche./servers/:id/exec/:jobIdportée read/servers/:id/execportée readTâches planifiées
/servers/:id/schedulesportée read/servers/:id/schedulesportée writeminute, hour, day_of_month, day_of_week, month)./servers/:id/schedules/:sidportée write/servers/:id/schedules/:sidportée write/servers/:id/schedules/:sid/executeportée write/servers/:id/schedules/:sid/tasksportée write{ "action": "backup" }, { "action": "power", "payload": "restart" }, ou { "action": "command", "payload": "say Redémarrage dans 5 min" }./servers/:id/schedules/:sid/tasks/:tidportée writeConteneurs LXC#
Des machines Linux complètes (Incus), à côté des services applicatifs — pour tout ce qui a besoin d'un vrai système : un accès SSH, plusieurs processus, un pare-feu à soi.
/lxcportée read/lxc/:idportée read/lxcportée writecurl -X POST https://api.ecloudserv.fr/api/v1/lxc \
-H "Authorization: Bearer $ECLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "build-runner",
"image": "debian-12",
"cpu": 100,
"ramMb": 1024,
"diskGb": 10,
"sshKey": "ssh-ed25519 AAAA... moi@poste"
}'/lxc/:id/power/:actionportée write:action vaut start, stop ou restart./lxc/:id/retryportée write/lxc/:idportée write/lxc/:id/portsportée write{ "targetPort": 8080, "protocol": "tcp" }. Sans publicPort, un port libre est choisi automatiquement./lxc/:id/ports/:portIdportée writeÀ noter
Pages (sites statiques)#
Hébergement de sites déjà compilés (HTML/CSS/JS) : vous envoyez une archive, elle est publiée sur le domaine du site, avec un historique de déploiements et un retour en arrière possible à tout moment.
/pagesportée read/pages/:idportée read/pages/:id/deploymentsportée read/pagesportée writecurl -X POST https://api.ecloudserv.fr/api/v1/pages \
-H "Authorization: Bearer $ECLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "mon-site", "domain": "exemple.fr", "spa": false }'/pages/:idportée write/pages/:idportée write/pages/:id/deployportée writemultipart/form-data avec un champ fichier portant l'archive ZIP (30 Mo maximum, compressée).curl -X POST https://api.ecloudserv.fr/api/v1/pages/pg_4d5e6f/deploy \
-H "Authorization: Bearer $ECLOUD_API_KEY" \
-F "file=@dist.zip"/pages/:id/rollback/:deployIdportée writeStockage objet (buckets)#
Des seaux de fichiers, façon S3 — un bucket privé se lit avec la même clé d'API ; un bucket public expose ses objets sans authentification, à une URL stable.
/storage/summaryportée read/storage/bucketsportée read/storage/bucketsportée write{ "name": "avatars", "isPublic": false }./storage/buckets/:idportée write{ "isPublic": true }./storage/buckets/:idportée write/storage/buckets/:id/objectsportée read?prefix= pour filtrer par dossier, ?cursor= pour paginer./storage/buckets/:id/objectportée read?key=chemin/du/fichier./storage/buckets/:id/objectsportée write?key=chemin/du/fichier.curl -X PUT "https://api.ecloudserv.fr/api/v1/storage/buckets/bkt_7a8b9c/objects?key=logo.png" \
-H "Authorization: Bearer $ECLOUD_API_KEY" \
-H "Content-Type: image/png" \
--data-binary @logo.png/storage/buckets/:id/downloadportée read?key=chemin/du/fichier./storage/buckets/:id/objectsportée write?key=chemin/du/fichier.Astuce
https://cdn.ecloudserv.fr/storage/public/:bucketId/:cle — pratique pour des images ou des fichiers téléchargeables directement depuis un site.Bases de données#
Les bases MySQL provisionnées avec vos services (voir withDatabase à la création d'un service).
/databasesportée read/databases/:id/tablesportée read/databases/:id/queryportée writewrite est exigée même pour un SELECT : l'API ne peut pas savoir avant exécution qu'une requête ne modifie rien.curl -X POST https://api.ecloudserv.fr/api/v1/databases/db_2c3d4e/query \
-H "Authorization: Bearer $ECLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "sql": "SELECT id, email FROM users LIMIT 10" }'/databases/:id/importportée write.sql (dump), envoyé comme texte dans le corps : { "sql": "..." }. 8 Mo maximum.Attention
DROP TABLE envoyé par erreur s'exécute tel quel. Testez vos requêtes sur une base secondaire avant de les rejouer en production.