Skip to content
Hoody.com

Create, manage, and mount shared storage between containers. A storage share exposes a directory from a source container to either a specific target container (1:1 share) or every container in a target project (project-wide share). Source containers control what to share, while target mount paths are determined automatically by the server.

Incoming shares describe storage that the calling container or account is configured to receive. They include direct shares and project-level shares, with deduplication and filtering applied.

GET /api/v1/containers/{id}/storage/incoming

Get all shares targeting this container (both direct shares and project-level shares). Shows what storage this container is configured to receive. Includes deduplication (direct shares take priority over project shares) and filters out self-shares and expired shares.

NameInTypeRequiredDescription
idpathstringYesContainer ID
Terminal window
curl -X GET "https://api.hoody.com/api/v1/containers/{id}/storage/incoming" \
-H "Authorization: Bearer <token>"

PATCH /api/v1/containers/{id}/storage/incoming/{shareId}/mount

Enable or disable mounting of an incoming share. Allows the target container owner to accept or reject incoming shares. Both the creator’s enabled flag and the receiver’s mount flag must be true for the share to be mounted.

NameInTypeRequiredDescription
idpathstringYesTarget container ID (receiver container)
shareIdpathstringYesShare ID to toggle
FieldTypeRequiredDescription
mountbooleanYesSet to true to accept and mount the share, false to reject or unmount it
Terminal window
curl -X PATCH "https://api.hoody.com/api/v1/containers/{id}/storage/incoming/{shareId}/mount" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"mount": true}'

The endpoints in this section return shares aggregated across every container you own. Use them for account-wide dashboards, auditing, or cross-project queries.

GET /api/v1/storage/incoming

Get all shares targeting your containers across all projects. Shows what storage you are receiving from others.

NameInTypeRequiredDescription
realm_idquerystringNoFilter by realm ID. Alternative to using realm subdomain in URL.
Terminal window
curl -X GET "https://api.hoody.com/api/v1/storage/incoming" \
-H "Authorization: Bearer <token>"

GET /api/v1/storage/shares

List all storage shares you have created across all your containers. This returns shares you are providing to others.

NameInTypeRequiredDescription
realm_idquerystringNoFilter by realm ID. Alternative to using realm subdomain in URL.
Terminal window
curl -X GET "https://api.hoody.com/api/v1/storage/shares" \
-H "Authorization: Bearer <token>"

These endpoints are scoped to a specific source container and let you list, retrieve, create, update, and delete the shares originating from that container.

GET /api/v1/containers/{id}/storage/shares

List all shares from this source container. Use query filters to narrow results.

NameInTypeRequiredDescription
idpathstringYesSource container ID
target_typequerystringNoFilter by target type (container or project)
labelquerystringNoFilter by label
statusquerystringNoFilter by status (active or failed)
enabledquerybooleanNoFilter by enabled status
include_expiredquerybooleanNoInclude expired shares (default: false)
realm_idquerystringNoFilter by realm ID. Alternative to using realm subdomain in URL.
Terminal window
curl -X GET "https://api.hoody.com/api/v1/containers/{id}/storage/shares?target_type=container&status=active" \
-H "Authorization: Bearer <token>"

GET /api/v1/containers/{id}/storage/shares/{shareId}

Retrieve details of a specific storage share.

NameInTypeRequiredDescription
idpathstringYesSource container ID
shareIdpathstringYesShare ID
Terminal window
curl -X GET "https://api.hoody.com/api/v1/containers/{id}/storage/shares/{shareId}" \
-H "Authorization: Bearer <token>"

POST /api/v1/containers/{id}/storage/shares

Share a directory from the source container with a target container or an entire project. The share is mounted automatically on the target(s).

NameInTypeRequiredDescription
idpathstringYesSource container ID
FieldTypeRequiredDescription
source_pathstringYesAbsolute path in the source container. Path is normalized, blocks system paths (/proc/*, /sys/*, /dev/*, /boot/*, /run/*, /var/run/*), rejects path traversal and null bytes
target_container_idstringNoTarget container ID for a 1:1 share. Mutually exclusive with target_project_id
target_project_idstringNoTarget project ID for a project-wide share that auto-mounts on every container. Mutually exclusive with target_container_id
modestringYesreadonly or readwrite
aliasstringNoOptional human-friendly alias (lowercase alphanumeric with hyphens or underscores, 3 to 63 characters)
labelstringNoOptional label for grouping shares (3 to 63 characters)
descriptionstringNoOptional description (up to 1000 characters)
enabledbooleanNoWhether to enable the share (default: true)
expires_atnumberNoUnix timestamp (seconds) when the share should expire
Terminal window
curl -X POST "https://api.hoody.com/api/v1/containers/{id}/storage/shares" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"source_path": "/home/shared/documents",
"target_container_id": "507f1f77bcf86cd799439033",
"mode": "readonly",
"alias": "shared-docs",
"label": "documentation",
"description": "Read-only access to team documentation"
}'

PATCH /api/v1/containers/{id}/storage/shares/{shareId}

Update share properties such as mode, alias, label, description, enabled state, or expiration. Only the fields you provide are updated. To clear an optional string field, send it as null.

NameInTypeRequiredDescription
idpathstringYesSource container ID
shareIdpathstringYesShare ID
FieldTypeRequiredDescription
modestringNoreadonly or readwrite
aliasstringNoAlias (3 to 63 characters, lowercase alphanumeric with hyphens or underscores). Send null to remove
labelstringNoLabel (3 to 63 characters). Send null to remove
descriptionstringNoDescription (up to 1000 characters). Send null to remove
enabledbooleanNoEnable or disable the share
expires_atnumberNoUnix timestamp (seconds) when the share expires. Send null to never expire
Terminal window
curl -X PATCH "https://api.hoody.com/api/v1/containers/{id}/storage/shares/{shareId}" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"mode": "readwrite",
"alias": "prod-data-rw",
"description": "Updated to read-write access",
"expires_at": null
}'

DELETE /api/v1/storage/shares/{shareId}

Remove a storage share by ID. Share IDs are globally unique, so the source container ID is not required. The share is unmounted from the target container(s) automatically.

NameInTypeRequiredDescription
shareIdpathstringYesShare ID (globally unique, no container ID needed)
Terminal window
curl -X DELETE "https://api.hoody.com/api/v1/storage/shares/{shareId}" \
-H "Authorization: Bearer <token>"