La couche de cycle de vie. Une API.
api.hoody.com est là où les conteneurs prennent existence. Créer, mettre en pause, capturer, copier entre serveurs, isoler par realm, facturer — tout en HTTP.
100+ endpoints. Specs OpenAPI par service. Tokens scopés par realm. Pause, snapshot, copie, sync — tout sur la même surface.
# create a container
$ curl -X POST https://api.hoody.com/api/v1/projects/ID/containers \
-H "Authorization: Bearer hdy_..." \
-H "Content-Type: application/json" \
-d '{"name":"dev-box","container_image":"debian/13","cpu":2,"memory":4}'
<< 201 Created
{ "id": "67e89abc…", "status": "creating", "urls": ["terminal-1…", "files…", "display-1…", …] }
Six états. Transitions explicites.
Les conteneurs progressent dans une machine à états définie. Chaque transition a un endpoint, et chaque transition est un événement enregistré dans l'historique du conteneur.
Provisionnement du système de fichiers et des ressources
En ligne et servant ses URLs
Éteint · stockage facturé
RAM gelée · reprise instantanée
Erreur lors d'une opération
Duplication asynchrone en cours
POST/containers/ID/start
POST/containers/ID/stop
POST/containers/ID/force-stop
POST/containers/ID/restart
POST/containers/ID/pause
POST/containers/ID/resume
POST/containers/ID/network/start
POST/containers/ID/network/stop
Mettez en pause le travail en cours. Capturez des machines entières.
Gelez la RAM avec pause/resume. Capturez le système de fichiers, les processus et la mémoire avec des snapshots avec état. Restaurez un conteneur à un moment antérieur sans réinitialiser quoi que ce soit.
Mise en veille du conteneur, pas arrêt
- —État RAM gelé en place ; fichiers ouverts et pools de connexion DB conservés
- —Mettez en pause un LLM en milieu d'inférence — reprenez sans re-chauffer le contexte
- —Mettez en pause un job d'automatisation la nuit — reprenez le matin
- —POST /containers/ID/pause · POST /containers/ID/resume
Git pour les machines
- —Créer en cours d'exécution = avec état (système de fichiers + processus + mémoire)
- —Créer à l'arrêt = sans état (système de fichiers seulement)
- —Alias de snapshot jusqu'à 100 caractères, expiration auto optionnelle en jours
- —POST /containers/ID/snapshots · PATCH /containers/ID/snapshots/NAME pour restaurer
Branchez un conteneur. Gardez-le synchronisé.
Copiez l'état complet d'un conteneur — historique des snapshots inclus — vers un autre serveur ou région. Sync propage les changements incrémentiels de la source vers la copie.
container-67e89abc…
server: node-us-east-1
container-abc1234d…
server: node-eu-west-1
target_project_id pour la copie inter-projet
source_snapshot pour copier un état spécifique
Durée typique : 3 à 5 min même serveur (50 Go), 10 à 15 min inter-serveur (50 Go)
Sync écrase les modifications locales sur la copie. Elle n'est pas bidirectionnelle — les changements de la source s'écoulent vers la copie, jamais en sens inverse.
L'isolation et la facturation sont des primitives API
Les realms scopent l'hôte API lui-même. La séparation du portefeuille empêche une compromission de vider votre budget d'infrastructure.
Multi-tenancy au niveau API
- —Les agents IA dans le realm A ne peuvent littéralement pas voir les ressources du realm B
- —Les tokens sont scopés à des realms spécifiques via realm_ids
- —L'isolation par realm se situe au-dessus du RBAC de projet — elle change l'hôte API
Soldes général et IA
- —Une charge de travail IA compromise ne peut pas vider le budget infra
- —Stripe (conforme PCI), 100+ cryptos (NOWPayments), virement bancaire
- —Factures PDF auto-générées · historique de transactions paginé
La surface API complète
Groupé par ressource. Chaque endpoint a une spec OpenAPI.
Auth & Tokens
25+ endpoints
OAuth, inscription, connexion/refresh/déconnexion JWT, 2FA avec codes de secours, tokens hdy_ longue durée avec whitelist IP CIDR et scoping par realm
Conteneurs & Cycle de vie
20+ endpoints
CRUD, stats, start/stop/pause/resume/restart, règles de firewall, démarrage/arrêt réseau
Snapshots, copie & sync
10+ endpoints
CRUD snapshot avec alias et expiration, copie asynchrone inter-serveur, sync incrémentielle unidirectionnelle
Portefeuille & Facturation
20+ endpoints
Soldes, transactions, méthodes de paiement (Stripe + crypto + banque), paiements, factures avec PDF, transferts général→IA
Realms & Projets
5+ endpoints
Liste des realms avec stats d'usage optionnelles, CRUD de projet, liste de conteneurs scopée par projet
Alias proxy · permissions · logs
31 endpoints
Servi par le Control Plane mais documenté sur /platform/proxy — alias (6), permissions (17), logs (8)
Chaque service publie sa propre spec OpenAPI (p. ex. Hoody SQLite, Hoody Terminal, Hoody Cron) — générez des clients typés dans n'importe quel langage.
Ce que l'orchestration traditionnelle vous demande d'assembler
Terraform, kubectl, le SDK AWS et les APIs Docker daemon couvrent chacun une partie de ce que le Control Plane couvre sur une seule surface. Voici une répartition honnête.
| Capacité | Control Plane | Stack traditionnelle |
|---|---|---|
| CRUD de conteneur | POST /projects/ID/containers | Fournisseur Terraform + module + apply |
| Mise en pause de l'état RAM | POST /containers/ID/pause · /resume | Pas d'analogue direct (suspension VMware) |
| Snapshot en cours d'exécution + RAM | POST /containers/ID/snapshots | Scripts personnalisés + snapshots VM |
| Copie inter-serveur | POST /containers/ID/copy + /sync | rsync + bootstrap manuel + re-enregistrement |
| Isolation API multi-tenant | realm_ids[] · REALM.api.hoody.com | Couches RBAC + discipline de namespace |
| Facturation unifiée + crédits LLM | general → AI transfer (one-way) | Stripe + facture fournisseur LLM séparée |
| Réponses API signées | X-Hoody-Signature (ED25519) | TLS seulement (contenu non signé) |
| Client typé depuis la spec | GET /api/v1/openapi.json | Écrire votre propre SDK |
Quand vous avez besoin du modèle plan/apply de Terraform, de la planification de kubectl, ou des services gérés d'AWS, utilisez-les. Le Control Plane trouve sa place quand les conteneurs sont la primitive et que vous voulez tout le cycle de vie — y compris pause et snapshot — dans une seule API.
Votre premier conteneur nécessite un seul POST.
Obtenez un token API, choisissez une image, et votre conteneur a chaque URL de service Kit avant que le HTTP 201 n'arrive.
Voir aussi — /platform/proxy pour comment ces URLs routent et s'authentifient.