A camada de ciclo de vida. Uma API.
api.hoody.com é onde os contêineres ganham existência. Criar, pausar, tirar snapshot, copiar entre servidores, isolar por realm, cobrar — tudo via HTTP.
100+ endpoints. Specs OpenAPI por serviço. Tokens com escopo de realm. Pausar, snapshot, copiar, sincronizar — tudo na mesma superfície.
# 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. Transições explícitas.
Os contêineres se movem por uma máquina de estados definida. Cada transição tem um endpoint e é um evento registrado no histórico do contêiner.
Provisionando sistema de arquivos e recursos
Ativo e servindo suas URLs
Desligado · armazenamento cobrado
RAM congelada · retomada instantânea
Erro durante uma operação
Duplicação assíncrona em andamento
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
Pause o trabalho em execução. Faça snapshot de máquinas inteiras.
Congele a RAM com pause/resume. Capture sistema de arquivos, processos e memória com snapshots com estado. Restaure um contêiner para um momento anterior sem reinicializar nada.
Sono do contêiner, não desligamento
- —Estado da RAM congelado no lugar; arquivos abertos e pools de conexão de BD mantidos
- —Pause um LLM no meio da inferência — retome sem re-aquecer o contexto
- —Pause uma tarefa de automação durante a noite — retome de manhã
- —POST /containers/ID/pause · POST /containers/ID/resume
Git para computadores
- —Criar enquanto em execução = com estado (sistema de arquivos + processos + memória)
- —Criar enquanto parado = sem estado (apenas sistema de arquivos)
- —Alias do snapshot com até 100 caracteres, auto-expiração opcional em dias
- —POST /containers/ID/snapshots · PATCH /containers/ID/snapshots/NAME para restaurar
Crie um branch de contêiner. Mantenha-o sincronizado.
Copie o estado completo de um contêiner — incluindo histórico de snapshots — para outro servidor ou região. Sync propaga mudanças incrementais da origem para a cópia.
container-67e89abc…
server: node-us-east-1
container-abc1234d…
server: node-eu-west-1
target_project_id para cópia entre projetos
source_snapshot para copiar um estado específico
Tempo típico: 3–5 min no mesmo servidor (50GB), 10–15 min entre servidores (50GB)
Sync sobrescreve alterações locais na cópia. Não é bidirecional — mudanças da origem fluem para a cópia, nunca o contrário.
Isolamento e cobrança são primitivos de API
Realms definem o escopo do próprio host da API. A separação da carteira impede que um comprometimento esvazie seu orçamento de infraestrutura.
Multi-tenancy no nível da API
- —Agentes de IA no realm A literalmente não conseguem ver recursos do realm B
- —Tokens têm escopo para realms específicos via realm_ids
- —O isolamento de realm fica acima do RBAC de projeto — ele muda o host da API
Saldos geral e de IA
- —Carga de trabalho de IA comprometida não pode drenar o orçamento de infra
- —Stripe (compatível com PCI), 100+ criptos (NOWPayments), transferência bancária
- —Faturas PDF geradas automaticamente · histórico de transações paginado
A superfície completa da API
Agrupada por recurso. Cada endpoint tem uma spec OpenAPI.
Auth & Tokens
25+ endpoints
OAuth, cadastro, login JWT/refresh/logout, 2FA com códigos de backup, tokens hdy_ de longa duração com whitelist de IP por CIDR e escopo de realm
Contêineres & Ciclo de vida
20+ endpoints
CRUD, stats, start/stop/pause/resume/restart, regras de firewall, network start/stop
Snapshots, Cópia & Sync
10+ endpoints
CRUD de snapshots com alias e expiração, cópia assíncrona entre servidores, sync incremental unidirecional
Carteira & Cobrança
20+ endpoints
Saldos, transações, métodos de pagamento (Stripe + cripto + banco), pagamentos, faturas com PDF, transferências geral→IA
Realms & Projetos
5+ endpoints
Listagem de realms com stats de uso opcionais, CRUD de projetos, listagem de contêineres por projeto
Aliases de proxy · permissões · logs
31 endpoints
Servido pelo Control Plane mas documentado em /platform/proxy — aliases (6), permissões (17), logs (8)
Cada serviço publica sua própria spec OpenAPI (p.ex. Hoody SQLite, Hoody Terminal, Hoody Cron) — gere clientes tipados em qualquer linguagem.
O que a orquestração tradicional pede que você monte
Terraform, kubectl, AWS SDK e APIs do Docker daemon cobrem partes do que o Control Plane cobre em uma única superfície. Aqui está uma divisão honesta.
| Capacidade | Control Plane | Stack tradicional |
|---|---|---|
| CRUD de contêineres | POST /projects/ID/containers | Terraform provider + module + apply |
| Pausar estado da RAM | POST /containers/ID/pause · /resume | Sem análogo direto (VMware suspend) |
| Snapshot em execução + RAM | POST /containers/ID/snapshots | Scripts customizados + snapshots de VM |
| Cópia entre servidores | POST /containers/ID/copy + /sync | rsync + bootstrap manual + re-registro |
| Isolamento de API multi-tenant | realm_ids[] · REALM.api.hoody.com | Camadas de RBAC + disciplina de namespace |
| Cobrança unificada + créditos de LLM | general → AI transfer (one-way) | Stripe + fatura separada do provedor de LLM |
| Respostas de API assinadas | X-Hoody-Signature (ED25519) | Apenas TLS (conteúdo não assinado) |
| Cliente tipado a partir da spec | GET /api/v1/openapi.json | Escreva seu próprio SDK |
Quando você precisar do modelo plan/apply do Terraform, do scheduling do kubectl ou dos serviços gerenciados da AWS, use-os. O Control Plane ganha seu espaço quando contêineres são o primitivo e você quer o ciclo de vida completo — incluindo pause e snapshot — em uma API.
Seu primeiro contêiner leva um POST.
Obtenha um token de API, escolha uma imagem e seu contêiner terá todas as URLs de serviço Kit antes do HTTP 201 chegar.
Veja também — /platform/proxy para como essas URLs roteiam e autenticam.