Skip to content

Proxy aliases let you create custom short URLs that route to a container, masking the underlying Project ID and Container ID. Instead of sharing https://{projectId}-{containerId}.{server_name}.containers.hoody.com/, you can share https://{alias}.{server_name}.containers.hoody.com/. This page covers listing, retrieving, creating, updating, enabling/disabling, and deleting proxy aliases.

GET /api/v1/proxy/aliases

List all proxy aliases for your account with optional filtering by project, container, realm, enabled status, or expiration.

NameInTypeRequiredDescription
project_idquerystringNoFilter by project ID
container_idquerystringNoFilter by container ID
realm_idquerystringNoFilter by realm ID. Alternative to using realm subdomain in URL.
enabledquerystringNoFilter by enabled status ("true" or "false")
expiredquerystringNoFilter by expiration: "true" = only expired, "false" = only non-expired
{
"statusCode": 200,
"message": "Proxy aliases retrieved successfully",
"data": {
"aliases": [
{
"id": "507f1f77bcf86cd799439022",
"user_id": "507f1f77bcf86cd799439088",
"project_id": "507f1f77bcf86cd799439033",
"container_id": "507f1f77bcf86cd799439011",
"alias": "my-portfolio",
"program": "http",
"index": 3000,
"target_path": null,
"allow_path_override": true,
"expires_at": null,
"enabled": true,
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T10:30:00.000Z",
"server_id": "507f1f77bcf86cd799439044",
"server_name": "node-sg-sin-1",
"url": "https://my-portfolio.node-sg-sin-1.containers.hoody.com"
},
{
"id": "507f1f77bcf86cd799439055",
"project_id": "507f1f77bcf86cd799439033",
"container_id": "507f1f77bcf86cd799439066",
"alias": "c3a8f1b2e4d5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3",
"program": "https",
"index": 8443,
"target_path": "/v1",
"allow_path_override": true,
"expires_at": "2025-06-30T23:59:59.000Z",
"enabled": true,
"created_at": "2025-01-10T08:00:00.000Z",
"updated_at": "2025-01-10T08:00:00.000Z",
"server_id": "507f1f77bcf86cd799439044",
"server_name": "node-sg-sin-1",
"subserver_name": "user-slice-7",
"url": "https://c3a8f1b2e4d5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3.node-sg-sin-1.containers.hoody.com"
}
],
"count": 2
}
}
for await (const alias of client.api.proxyAliases.listIterator({ project_id: "507f1f77bcf86cd799439033" })) {
console.log(alias.alias, alias.url);
}

GET /api/v1/proxy/aliases/{id}

Retrieve detailed information about a specific proxy alias, including the associated project and container.

NameInTypeRequiredDescription
idpathstringYesProxy alias ID
{
"statusCode": 200,
"message": "Proxy alias retrieved successfully",
"data": {
"id": "507f1f77bcf86cd799439022",
"user_id": "507f1f77bcf86cd799439077",
"project_id": "507f1f77bcf86cd799439033",
"container_id": "507f1f77bcf86cd799439011",
"alias": "my-app",
"program": "http",
"index": 3000,
"target_path": "/api",
"allow_path_override": true,
"expires_at": "2025-12-31T23:59:59.000Z",
"enabled": true,
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T10:30:00.000Z",
"url": "https://my-app.node-sg-sin-1.containers.hoody.com",
"server_id": "507f1f77bcf86cd799439044",
"server_name": "node-sg-sin-1",
"subserver_name": "user-slice-7",
"project": {
"id": "507f1f77bcf86cd799439033",
"alias": "production"
},
"container": {
"id": "507f1f77bcf86cd799439011",
"name": "web-app-1"
}
}
}
const alias = await client.api.proxyAliases.get("507f1f77bcf86cd799439022");
console.log(alias.data.url);

POST /api/v1/proxy/aliases

Create a custom domain alias for a container. You can supply a custom alias (3–61 characters, lowercase a–z, 0–9, hyphens) or omit alias (or pass null/false) to auto-generate a 48-character hex string for maximum obscurity.

FieldTypeRequiredDefaultDescription
container_idstringYesContainer ID this alias points to. You must own this container.
programstringYesBuilt-in Hoody program (terminal, files, code, browser, agent, display, …) or transport protocol (http, https, ssh). Use http/https with port to reach an HTTP server running inside the container (e.g. program: "http" + port: 3000). Must exist in container-programs.json.
aliasstring | null | falseNoCustom alias name (lowercase a–z, 0–9, hyphens; 3–61 chars; cannot start/end with hyphen) or null/false to auto-generate a 48-char hex. Must be unique across your account.
portintegerNoTarget port for the http/https protocol (1–65535). The port your server listens on inside the container. Takes precedence over index and any port embedded in program (e.g. http-3000). Ignored for built-in programs.
indexintegerNoInstance index for built-in programs (≥ 1), or legacy port for http/https. Defaults to 1. Prefer the port field for HTTP.
target_pathstring | nullNoBase path for routing. Auto-prefixed with / if missing. Max 2048 characters.
allow_path_overridebooleanNotrueWhether to allow URL paths beyond target_path.
expires_atstringNoOptional ISO 8601 expiration date. The alias is automatically disabled after this date.
enabledbooleanNotrueWhether the alias is initially enabled.
{
"statusCode": 201,
"message": "Proxy alias created successfully",
"data": {
"id": "507f1f77bcf86cd799439022",
"user_id": "507f1f77bcf86cd799439088",
"project_id": "507f1f77bcf86cd799439033",
"container_id": "507f1f77bcf86cd799439011",
"alias": "my-app",
"program": "http",
"index": 3000,
"target_path": "/api",
"allow_path_override": true,
"expires_at": "2025-12-31T23:59:59.000Z",
"enabled": true,
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T10:30:00.000Z",
"server_id": "507f1f77bcf86cd799439044",
"server_name": "node-sg-sin-1",
"subserver_name": "user-slice-7",
"url": "https://my-app.node-sg-sin-1.containers.hoody.com"
}
}
const alias = await client.api.proxyAliases.create({
container_id: "507f1f77bcf86cd799439011",
alias: "my-app",
program: "http",
port: 3000
});
console.log(alias.data.url);

PATCH /api/v1/proxy/aliases/{id}

Update an existing proxy alias. Only the fields you include are modified. Renaming the alias also renames the underlying file on the server.

NameInTypeRequiredDescription
idpathstringYesProxy alias ID to update
FieldTypeRequiredDescription
aliasstringNoNew alias name (3–61 chars; lowercase a–z, 0–9, hyphens; cannot start/end with hyphen). Must be unique across your account.
programstringNoBuilt-in Hoody program (terminal, files, code, …) or transport protocol (http, https, ssh). Use http/https with port to reach an HTTP server running inside the container. Order of authority for ports is port > port embedded in program (http-3000) > index. Must exist in container-programs.json.
portintegerNoTarget port for the http/https protocol (1–65535). The port your server listens on inside the container. Takes precedence over index and any port embedded in program. Ignored for built-in programs.
indexintegerNoInstance index (≥ 1), or legacy target port for http/https. Prefer the port field when set.
target_pathstring | nullNoBase path for routing. Set to null to remove the path prefix. Max 2048 characters.
allow_path_overridebooleanNoWhether to allow paths beyond target_path.
expires_atstring | number | nullNoExpiration date — ISO 8601 string, Unix timestamp (seconds or milliseconds), or null to remove expiration.
enabledbooleanNoWhether the alias is enabled.
{
"statusCode": 200,
"message": "Proxy alias updated successfully",
"data": {
"id": "507f1f77bcf86cd799439022",
"user_id": "507f1f77bcf86cd799439077",
"project_id": "507f1f77bcf86cd799439033",
"container_id": "507f1f77bcf86cd799439011",
"alias": "updated-app-name",
"program": "http",
"index": 8080,
"target_path": "/v2",
"allow_path_override": false,
"expires_at": null,
"enabled": true,
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T14:45:00.000Z",
"url": "https://updated-app-name.node-sg-sin-1.containers.hoody.com",
"server_id": "507f1f77bcf86cd799439044",
"server_name": "node-sg-sin-1",
"subserver_name": "user-slice-7"
}
}
const result = await client.api.proxyAliases.update("507f1f77bcf86cd799439022", {
alias: "my-new-name",
enabled: false
});
console.log(result.data.alias);

PATCH /api/v1/proxy/aliases/{id}/state

Temporarily enable or disable a proxy alias without deleting it. Disabled aliases return 404 but can be re-enabled later.

NameInTypeRequiredDescription
idpathstringYesProxy alias ID
FieldTypeRequiredDescription
enabledbooleanYesSet to true to enable, false to disable.
{
"statusCode": 200,
"message": "Proxy alias disabled successfully",
"data": {
"id": "507f1f77bcf86cd799439022",
"user_id": "507f1f77bcf86cd799439077",
"project_id": "507f1f77bcf86cd799439033",
"container_id": "507f1f77bcf86cd799439011",
"alias": "my-app",
"program": "http",
"index": 3000,
"target_path": "/api",
"allow_path_override": true,
"expires_at": "2025-12-31T23:59:59.000Z",
"enabled": false,
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T14:45:00.000Z",
"url": "https://my-app.node-sg-sin-1.containers.hoody.com",
"server_id": "507f1f77bcf86cd799439044",
"server_name": "node-sg-sin-1",
"subserver_name": "user-slice-7"
}
}
const result = await client.api.proxyAliases.setState("507f1f77bcf86cd799439022", {
enabled: false
});
console.log(result.data.enabled);

DELETE /api/v1/proxy/aliases/{id}

Permanently delete a proxy alias and remove its file from the server. The alias URL immediately returns 404.

NameInTypeRequiredDescription
idpathstringYesProxy alias ID to delete
{
"statusCode": 200,
"message": "Proxy alias deleted successfully"
}
await client.api.proxyAliases.delete("507f1f77bcf86cd799439022");