La capa de ciclo de vida. Una API.
api.hoody.com es donde los contenedores cobran vida. Crea, pausa, haz snapshot, copia entre servidores, aísla en realm, factura: todo HTTP.
100+ endpoints. Specs OpenAPI por servicio. Tokens con ámbito de realm. Pausa, snapshot, copia, sincroniza — todo en la misma superficie.
# 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…", …] }
Seis estados. Transiciones explícitas.
Los contenedores se mueven a través de una máquina de estados definida. Cada transición tiene un endpoint y cada transición es un evento registrado en el historial del contenedor.
Aprovisionando sistema de archivos y recursos
Activo y sirviendo sus URLs
Apagado · almacenamiento facturado
RAM congelada · reanudación instantánea
Error durante una operación
Duplicación asíncrona en curso
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
Pausa el trabajo en curso. Snapshot de máquinas completas.
Congela la RAM con pause/resume. Captura sistema de archivos, procesos y memoria con snapshots con estado. Restaura un contenedor a un momento anterior sin reinicializar nada.
Suspensión del contenedor, no apagado
- —Estado de RAM congelado en su lugar; archivos abiertos y pools de conexión DB mantenidos
- —Pausa un LLM a media inferencia: reanuda sin recondicionar el contexto
- —Pausa un trabajo de automatización por la noche: reanuda por la mañana
- —POST /containers/ID/pause · POST /containers/ID/resume
Git para ordenadores
- —Crear en ejecución = con estado (sistema de archivos + procesos + memoria)
- —Crear detenido = sin estado (solo sistema de archivos)
- —Alias de snapshot hasta 100 caracteres, expiración automática opcional en días
- —POST /containers/ID/snapshots · PATCH /containers/ID/snapshots/NAME para restaurar
Crea una rama de un contenedor. Mantenla sincronizada.
Copia el estado completo de un contenedor —incluyendo el historial de snapshots— a otro servidor o región. La sincronización propaga cambios incrementales del origen a la copia.
container-67e89abc…
server: node-us-east-1
container-abc1234d…
server: node-eu-west-1
target_project_id para copia entre proyectos
source_snapshot para copiar un estado específico
Tiempo típico: 3-5 min mismo servidor (50GB), 10-15 min entre servidores (50GB)
La sincronización sobreescribe los cambios locales de la copia. No es bidireccional: los cambios del origen fluyen a la copia, nunca al revés.
El aislamiento y la facturación son primitivas de la API
Los realms acotan el propio host de la API. La separación del monedero evita que una vulnerabilidad drene tu presupuesto de infraestructura.
Multi-tenancy a nivel de API
- —Los agentes de IA en el realm A literalmente no pueden ver los recursos del realm B
- —Los tokens tienen ámbito en realms específicos vía realm_ids
- —El aislamiento de realm está por encima del RBAC de proyecto: cambia el host de la API
Saldos general e IA
- —Una carga de trabajo IA comprometida no puede vaciar el presupuesto de infraestructura
- —Stripe (cumplimiento PCI), más de 100 criptomonedas (NOWPayments), transferencia bancaria
- —Facturas PDF generadas automáticamente · historial de transacciones paginado
La superficie completa de la API
Agrupado por recurso. Cada endpoint tiene una spec OpenAPI.
Auth y tokens
25+ endpoints
OAuth, registro, login/refresh/logout JWT, 2FA con códigos de respaldo, tokens hdy_ de larga duración con lista blanca de IP CIDR y ámbito de realm
Contenedores y ciclo de vida
20+ endpoints
CRUD, estadísticas, start/stop/pause/resume/restart, reglas de firewall, start/stop de red
Snapshots, copia y sincronización
10+ endpoints
CRUD de snapshots con alias y expiración, copia asíncrona entre servidores, sincronización incremental unidireccional
Monedero y facturación
20+ endpoints
Saldos, transacciones, métodos de pago (Stripe + crypto + banco), pagos, facturas con PDF, transferencias general→IA
Realms y proyectos
5+ endpoints
Listado de realms con estadísticas de uso opcionales, CRUD de proyectos, listado de contenedores con ámbito de proyecto
Alias de proxy · permisos · logs
31 endpoints
Servidos por el Control Plane pero documentados en /platform/proxy: aliases (6), permisos (17), logs (8)
Cada servicio publica su propia especificación OpenAPI (p. ej. Hoody SQLite, Hoody Terminal, Hoody Cron) — genera clientes tipados en cualquier lenguaje.
Lo que la orquestación tradicional te pide montar tú mismo
Terraform, kubectl, AWS SDK y las APIs del daemon Docker cubren cada uno parte de lo que el Control Plane cubre en una sola superficie. Aquí está la división honesta.
| Capacidad | Control Plane | Stack tradicional |
|---|---|---|
| CRUD de contenedores | POST /projects/ID/containers | Proveedor Terraform + módulo + apply |
| Pausar estado de RAM | POST /containers/ID/pause · /resume | Sin análogo directo (suspensión VMware) |
| Snapshot en ejecución + RAM | POST /containers/ID/snapshots | Scripts personalizados + snapshots de VM |
| Copia entre servidores | POST /containers/ID/copy + /sync | rsync + bootstrap manual + re-registro |
| Aislamiento de API multi-tenant | realm_ids[] · REALM.api.hoody.com | Capas RBAC + disciplina de namespace |
| Facturación unificada + créditos LLM | general → AI transfer (one-way) | Stripe + factura separada del proveedor LLM |
| Respuestas de API firmadas | X-Hoody-Signature (ED25519) | Solo TLS (contenido sin firmar) |
| Cliente tipado desde spec | GET /api/v1/openapi.json | Escribe tu propio SDK |
Cuando necesitas el modelo plan/apply de Terraform, la programación de kubectl o los servicios gestionados de AWS, úsalos. El Control Plane gana su lugar cuando los contenedores son el primitivo y quieres todo el ciclo de vida —incluyendo pause y snapshot— en una sola API.
Tu primer contenedor toma un solo POST.
Obtén un token de API, elige una imagen y tu contenedor tendrá todas las URLs de servicio Kit antes de que llegue el HTTP 201.
Ver también — /platform/proxy para saber cómo esas URLs enrutan y autentican.