Skip to content
Hoody.com

The container endpoints let you list, inspect, create, update, and delete Hoody containers. Use these endpoints to manage the lifecycle of your containers, fetch live resource statistics, and issue offline-verifiable authorization claims for container-aware tooling.

All container hostnames follow the pattern {projectId}-{containerId}-{service}-{instance}.{server}.containers.hoody.com. When concrete IDs are required for examples, both the project ID and the container ID are 24-character lowercase hexadecimal strings.

Returns every container owned by the authenticated user across all projects, with pagination, filtering, and sorting.

NameInTypeRequiredDescription
pagequerynumberNoPage number for pagination. Starts from 1. Default: 1.
limitquerynumberNoNumber of containers to return per page. Maximum 100. Default: 50.
sort_byquerystringNoField to sort containers by. Allowed: id, name, status, created_at, updated_at. Default: "created_at".
sort_orderquerystringNoSort direction. Allowed: asc, desc. Default: "desc".
realm_idquerystringNoFilter by realm ID. Returns only containers belonging to this realm.
runtimequerystringNoInclude live runtime information. Accepts "true", "false", or a URL-encoded JSON string such as {"displays":true}. An empty object {} fetches all info. Results are cached for 2 seconds.
include_proxy_domainsquerystringNoWhen true, adds a proxy_domains array to each container. Allowed: "true", "false".
include_proxy_permissionsquerystringNoWhen true, includes the full proxy-permissions documents (contains credentials). Allowed: "true", "false". Auth tokens additionally require the resources.proxy_aliases permission.
include_prespawnquerystringNoInclude prespawn containers. Default excludes them. Allowed: "true", "false".
include_expiredquerystringNoInclude containers expired due to server termination. Default excludes them. Allowed: "true", "false".
include_deletingquerystringNoInclude containers currently being deleted. Default excludes them. Allowed: "true", "false".
Terminal window
curl -X GET "https://api.hoody.com/api/v1/containers/?page=1&limit=50&sort_by=created_at&sort_order=desc" \
-H "Authorization: Bearer <token>"

Returns a single container by its ID, including server metadata, optional runtime info, and optional proxy-permissions documents.

NameInTypeRequiredDescription
idpathstringYesUnique identifier of the container to retrieve.
runtimequerystringNoInclude live runtime information. Accepts "true", "false", or a URL-encoded JSON string such as {"displays":true}. An empty object {} fetches all info. Results are cached for 2 seconds.
include_proxy_domainsquerystringNoWhen true, adds a proxy_domains array to the container. Allowed: "true", "false".
include_proxy_permissionsquerystringNoWhen true, includes the full proxy-permissions documents (contains credentials). Allowed: "true", "false". Auth tokens additionally require the resources.proxy_aliases permission.
Terminal window
curl -X GET "https://api.hoody.com/api/v1/containers/507f1f77bcf86cd799439011?runtime=%7B%22displays%22%3Atrue%7D" \
-H "Authorization: Bearer <token>"

Returns real-time resource usage for a container, including CPU, memory, disk, ramdisk, and network metrics. The container must be addressable; CPU and memory stats are null when the container is stopped.

NameInTypeRequiredDescription
idpathstringYesUnique identifier of the container.
Terminal window
curl -X GET "https://api.hoody.com/api/v1/containers/507f1f77bcf86cd799439011/stats" \
-H "Authorization: Bearer <token>"

Returns every container belonging to the specified project, with pagination, filtering, and sorting.

NameInTypeRequiredDescription
idpathstringYesProject ID.
pagequerynumberNoPage number for pagination. Starts from 1.
limitquerynumberNoNumber of containers to return per page. Maximum 100. Default: 50.
sort_byquerystringNoField to sort containers by. Allowed: id, name, status, created_at, updated_at.
sort_orderquerystringNoSort direction. Allowed: asc, desc.
runtimequerystringNoInclude live runtime information. Accepts "true", "false", or a URL-encoded JSON string such as {"displays":true}. An empty object {} fetches all info. Results are cached for 2 seconds.
include_proxy_domainsquerystringNoWhen true, adds a proxy_domains array to each container. Allowed: "true", "false".
include_proxy_permissionsquerystringNoWhen true, includes the full proxy-permissions documents (contains credentials). Allowed: "true", "false". Auth tokens additionally require the resources.proxy_aliases permission.
include_prespawnquerystringNoInclude prespawn containers. Default excludes them. Allowed: "true", "false".
include_deletingquerystringNoInclude containers currently being deleted. Default excludes them. Allowed: "true", "false".
Terminal window
curl -X GET "https://api.hoody.com/api/v1/projects/507f1f77bcf86cd799439011/containers?page=1&limit=20" \
-H "Authorization: Bearer <token>"

Issues a signed, portable container authorization claim. The returned container_claim is an ED25519-signed credential that proves the identity of the user (sub, type), the authorized container (containerId, projectId), and when Hoody issued the authorization (iat, exp).

Container programs can verify this claim offline using Hoody’s public key from GET /api/v1/meta/public-key — no API round-trip is needed during verification. Claims expire after HOODY_CONTAINER_CLAIM_EXPIRES_IN (default 6 hours). Clients should re-call this endpoint to refresh before expiry.

The response also carries an X-Hoody-Signature header in the format t=<unix_ts>,kid=<keyId>,path=<urlPath>,sig=<128-hex> so the entire response body can be independently verified.

NameInTypeRequiredDescription
idpathstringYesContainer ID (24-char hex).
Terminal window
curl -X POST "https://api.hoody.com/api/v1/containers/507f1f77bcf86cd799439011/authorize" \
-H "Authorization: Bearer <token>"

Creates a new container in the specified project. The container is provisioned on the server named in server_id and enters the creating lifecycle state.

NameInTypeRequiredDescription
idpathstringYesProject ID.
NameTypeRequiredDescription
server_idstringYesServer on which to provision the container.
namestringNoContainer name. 3-100 characters, alphanumeric with hyphens and underscores. Use "rand" to generate a random name.
colorstringNoHEX color (e.g. #FF0000 or FF0000). The # prefix is added if missing.
container_imagestringNoContainer image. Shorthand such as "debian" or "debian-13" is resolved to the canonical image.
aibooleanNoEnable AI features. Default: true.
environment_varsobjectNoEnvironment variables as key-value string pairs. Maximum 200 keys; each value up to 65536 characters.
ssh_public_keystringNoSSH public key for container access. Must be unique per container. Inherits from project defaults if omitted.
commentstringNoOptional comment, up to 16000 characters.
hoody_kitbooleanNoEnable the Hoody Kit bundle. Default: true.
dev_kitbooleanNoEnable dev_kit development tools. Cannot be updated after creation.
kvmbooleanNoEnable /dev/kvm passthrough. Rentable dedicated servers only — never free tier. Default: false.
dev_kvmbooleanNoAlias of kvm. If both are sent, kvm wins and both must agree.
autostartbooleanNoStart automatically on host boot. Default: true.
ramdiskbooleanNoMount a ramdisk at /ramdisk. Default: true.
cachebooleanNoUse cached images during creation. Default: true.
cache_imagebooleanNoForce creation of a new cached image. Admin-only. Default: false.
prespawnbooleanNoInternal. Not user-settable. true is rejected (403); false is accepted. Default: false.
bypass_prespawnbooleanNoBypass prespawn container claiming and create a fresh container. Default: false.
realm_idsarrayNoRealm IDs to assign the container to. Merged with the realm of the subdomain when creating from a realm subdomain.
Terminal window
curl -X POST "https://api.hoody.com/api/v1/projects/507f1f77bcf86cd799439011/containers" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"server_id": "507f1f77bcf86cd799439014",
"name": "backend-api",
"container_image": "debian/13",
"environment_vars": {
"DATABASE_URL": "postgresql://user:pass@db:5432/app",
"REDIS_URL": "redis://cache:6379"
},
"ssh_public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl user@host",
"comment": "Backend API server with PostgreSQL connection"
}'

Updates mutable fields on a container. Omitted fields are preserved. dev_kit cannot be updated after creation. Container edits on expired containers are rejected.

NameInTypeRequiredDescription
idpathstringYesUnique identifier of the container to update.
NameTypeRequiredDescription
namestringNoHuman-readable name. 1-100 characters. Must be unique within the project.
colorstringNoHEX color (e.g. #FF0000 or FF0000). The # prefix is added if missing.
aibooleanNoWhether AI features are enabled. Preserved if omitted.
autostartbooleanNoWhether the container starts automatically on host boot. Preserved if omitted.
ramdisk_scopestringNoSharing scope for /ramdisk. Allowed: container, project. project is refused when the project has other members.
ramdiskbooleanNoWhether to mount a ramdisk at /ramdisk. Preserved if omitted.
environment_varsobjectNoEnvironment variables as key-value pairs. Maximum 200 keys; each value up to 65536 characters.
ssh_public_keystring | nullNoSSH public key. Re-sending the same key is a no-op. Set to null to clear or inherit from project defaults.
commentstring | nullNoOptional comment, up to 16000 characters. Set to null to clear.
realm_idsarrayNoRealm membership. Only unrestricted tokens and admins can modify realm membership.
Terminal window
curl -X PUT "https://api.hoody.com/api/v1/containers/507f1f77bcf86cd799439011" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"name": "web-app-1-renamed",
"color": "#10B981",
"comment": "Renamed for the v2 release",
"environment_vars": {
"NODE_ENV": "staging"
}
}'

Enables or disables /dev/kvm passthrough so the container can run full virtual machines. Available on rented or dedicated (bare-metal) servers only — never on free-tier servers. The container must be stopped. Send kvm: true to enable or kvm: false to disable. dev_kvm is accepted as an alias of kvm.

NameInTypeRequiredDescription
idpathstringYesUnique identifier of the container.
NameTypeRequiredDescription
kvmbooleanNoEnable (true) or disable (false) /dev/kvm passthrough.
dev_kvmbooleanNoAlias of kvm. If both are sent, kvm wins and both must agree.
Terminal window
curl -X PUT "https://api.hoody.com/api/v1/containers/507f1f77bcf86cd799439011/kvm" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"kvm": true
}'

Deletes a container. The container must be in a state that allows deletion. Expired containers cannot be deleted.

NameInTypeRequiredDescription
idpathstringYesUnique identifier of the container to delete.
Terminal window
curl -X DELETE "https://api.hoody.com/api/v1/containers/507f1f77bcf86cd799439011" \
-H "Authorization: Bearer <token>"