Skip to content
Hoody.com

The Projects API lets you create and manage logical groupings for your containers, networks, and resources. Projects enforce optional container quotas, can be shared across realms, and support fine-grained per-user access control with read, edit, or delete permission levels. This page also documents the aggregated statistics endpoint for a project and the server rental runtime aliases that surface live host metrics.

All endpoints below use the Hoody control-plane host https://api.hoody.com. The TypeScript SDK is published as hoody-sdk.

GET /api/v1/projects/

List every project you own or have been granted access to. Supports pagination, sorting, and an optional realm filter.

Terminal window
curl -X GET "https://api.hoody.com/api/v1/projects/?page=1&limit=10&sort_by=created_at&sort_order=desc" \
-H "Authorization: Bearer <token>"
NameInTypeRequiredDescription
pagequerynumberNoPage number (1-based). Default: 1
limitquerynumberNoItems per page (max 100). Default: 10
sort_byquerystringNoField to sort by. Allowed values: id, alias, created_at, updated_at. Default: "created_at"
sort_orderquerystringNoSort direction. Allowed values: asc, desc. Default: "desc"
realm_idquerystringNoFilter by realm ID. Only returns projects that belong to this realm. Alternative to using the realm subdomain in the URL

GET /api/v1/projects/{id}

Retrieve a single project by ID. Pass include_permissions=true to also receive the list of users with access.

Terminal window
curl -X GET "https://api.hoody.com/api/v1/projects/507f1f77bcf86cd799439011?include_permissions=true" \
-H "Authorization: Bearer <token>"
NameInTypeRequiredDescription
idpathstringYesProject ID
include_permissionsquerybooleanNoInclude project permissions with user details in the response. Default: false

POST /api/v1/projects/

Create a new project to organize containers, networks, and resources. The alias must be unique across your projects.

Terminal window
curl -X POST "https://api.hoody.com/api/v1/projects/" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"alias": "Production Environment",
"color": "#EF4444",
"max_containers": 100
}'

This endpoint takes no path, query, or header parameters.

PUT /api/v1/projects/{id}

Update an existing project. You must be the owner or hold edit permission. The alias field is required in the body; other fields are only updated when supplied.

Terminal window
curl -X PUT "https://api.hoody.com/api/v1/projects/507f1f77bcf86cd799439011" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"alias": "Production v2",
"color": "#10B981",
"max_containers": 75
}'
NameInTypeRequiredDescription
idpathstringYesProject ID to update

DELETE /api/v1/projects/{id}

Permanently delete a project and tear down its associated resources. If deletion cannot be fully completed, the project remains available so you can retry safely. You must be the owner or hold delete permission.

Terminal window
curl -X DELETE "https://api.hoody.com/api/v1/projects/507f1f77bcf86cd799439011?include_deleted_items=true" \
-H "Authorization: Bearer <token>"
NameInTypeRequiredDescription
idpathstringYesProject ID to delete
include_deleted_itemsquerybooleanNoInclude a lightweight list of deleted container IDs and names in the response for confirmation UX. Default: false

GET /api/v1/projects/{id}/permissions

List every user who has been granted access to a project, including their permission level. Supports pagination and sorting.

Terminal window
curl -X GET "https://api.hoody.com/api/v1/projects/507f1f77bcf86cd799439011/permissions?page=1&limit=10&sort_by=user_id&sort_order=asc" \
-H "Authorization: Bearer <token>"
NameInTypeRequiredDescription
idpathstringYesProject ID
pagequerynumberNoPage number (1-based)
limitquerynumberNoItems per page (max 100)
sort_byquerystringNoField to sort by. Allowed values: id, user_id, permission_level, created_at, updated_at
sort_orderquerystringNoSort direction. Allowed values: asc, desc

POST /api/v1/projects/{id}/permissions

Grant another user access to your project. You must be the owner or hold edit permission. Use read for view-only access, edit to allow modifications, or delete to allow destroying the project.

Terminal window
curl -X POST "https://api.hoody.com/api/v1/projects/507f1f77bcf86cd799439011/permissions" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"user_id": "507f1f77bcf86cd799439044",
"permission_level": "edit"
}'
NameInTypeRequiredDescription
idpathstringYesProject ID

PUT /api/v1/projects/{id}/permissions/{permissionId}

Change an existing permission level for a user. Use this to upgrade from read to edit, downgrade from edit to read, or grant delete rights. You must be the owner or hold edit permission.

Terminal window
curl -X PUT "https://api.hoody.com/api/v1/projects/507f1f77bcf86cd799439011/permissions/507f1f77bcf86cd799439033" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{ "permission_level": "edit" }'
NameInTypeRequiredDescription
idpathstringYesProject ID
permissionIdpathstringYesPermission ID to update

DELETE /api/v1/projects/{id}/permissions/{permissionId}

Revoke a user’s access to a project. The user immediately loses all access. You must be the owner or hold edit permission.

Terminal window
curl -X DELETE "https://api.hoody.com/api/v1/projects/507f1f77bcf86cd799439011/permissions/507f1f77bcf86cd799439033" \
-H "Authorization: Bearer <token>"
NameInTypeRequiredDescription
idpathstringYesProject ID
permissionIdpathstringYesPermission ID to remove

GET /api/v1/projects/{id}/stats

Aggregate resource usage statistics for every container in a project. Returns per-container CPU, memory, ramdisk, disk, and network counters, plus a summary block with container count and total processing time.

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

The endpoints in this section expose live CPU, memory, and disk counters for rented physical servers and their subserver slices. Data is served from a short-TTL cache so it can be polled frequently. First-party JWT is required. GET /api/v1/servers/{id}/runtime is an alias for GET /api/v1/rentals/{id}/runtime.

NameInTypeRequiredDescription
idpathstringYesid path parameter

GET /api/v1/rentals/{id}/runtime

Terminal window
curl -X GET "https://api.hoody.com/api/v1/rentals/507f1f77bcf86cd799439077/runtime" \
-H "Authorization: Bearer <token>"
NameInTypeRequiredDescription
idpathstringYesRental or server ID

GET /api/v1/servers/{id}/runtime

Alias for GET /api/v1/rentals/{id}/runtime. Returns the same payload, statuses, and error codes.

Terminal window
curl -X GET "https://api.hoody.com/api/v1/servers/507f1f77bcf86cd799439077/runtime" \
-H "Authorization: Bearer <token>"
NameInTypeRequiredDescription
idpathstringYesServer ID