Skip to content

Storage shares let you mount a directory from a source container into one or more target containers. Shares can target a single container (1:1) or every container in a project (project-wide). The source container controls what path is shared; target mount paths are assigned automatically by the server.

Use these endpoints to create, list, retrieve, update, toggle, and delete storage shares, and to inspect incoming shares (storage that other containers share with you).


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

Section titled “GET /api/v1/containers/{id}/storage/incoming”

Get all shares targeting a specific container. Returns both direct shares and project-level shares, with deduplication (direct shares take priority over project shares) and self-shares / expired shares filtered out.

NameInTypeRequiredDescription
idpathstringYesContainer ID
{
"statusCode": 200,
"message": "Incoming shares retrieved successfully",
"data": [
{
"id": "507f1f77bcf86cd799439011",
"source_container_id": "507f1f77bcf86cd799439022",
"source_path": "/etc/app/config",
"target_container_id": "507f1f77bcf86cd799439033",
"target_project_id": null,
"target_type": "container",
"mode": "readonly",
"enabled": true,
"status": "active",
"status_message": null,
"expires_at": null,
"created_by": "507f1f77bcf86cd799439044",
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T10:30:00.000Z"
},
{
"id": "507f1f77bcf86cd799439077",
"source_container_id": "507f1f77bcf86cd799439088",
"source_path": "/opt/shared-libs",
"target_container_id": null,
"target_project_id": "507f1f77bcf86cd799439055",
"target_type": "project",
"mode": "readonly",
"enabled": true,
"status": "active",
"status_message": null,
"expires_at": null,
"created_by": "507f1f77bcf86cd799439044",
"created_at": "2025-01-01T00:00:00.000Z",
"updated_at": "2025-01-01T00:00:00.000Z"
}
]
}
const shares = await client.api.storageShares.listIncoming({
id: "507f1f77bcf86cd799439033"
});

Get all shares targeting any of your containers across all projects. Useful for an account-wide inventory of incoming storage.

NameInTypeRequiredDescription
realm_idquerystringNoFilter by realm ID. Alternative to using the realm subdomain in the URL.
{
"statusCode": 200,
"message": "All incoming shares retrieved successfully",
"data": [
{
"id": "507f1f77bcf86cd799439011",
"source_container_id": "507f1f77bcf86cd799439022",
"source_path": "/home/app/shared-data",
"target_container_id": "507f1f77bcf86cd799439033",
"target_project_id": null,
"target_type": "container",
"mode": "readonly",
"enabled": true,
"status": "active",
"status_message": null,
"expires_at": 1735689599,
"created_by": "507f1f77bcf86cd799439044",
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T10:30:00.000Z"
}
]
}
const incoming = await client.api.storageShares.listIncomingGlobalIterator({
realm_id: "507f1f77bcf86cd799439010"
});

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

Section titled “GET /api/v1/containers/{id}/storage/shares”

List every share that originates from a specific source container. Supports filters by target type, label, status, enabled flag, expiry, and realm.

NameInTypeRequiredDescription
idpathstringYesSource container ID
target_typequerystringNoFilter by target type. Allowed: container, project.
labelquerystringNoFilter by label
statusquerystringNoFilter by status. Allowed: active, failed.
enabledquerystringNoFilter by enabled status. Allowed: true, false.
include_expiredquerystringNoInclude expired shares. Allowed: true, false. Default: false.
realm_idquerystringNoFilter by realm ID. Alternative to using the realm subdomain in the URL.
{
"statusCode": 200,
"message": "Storage shares retrieved successfully",
"data": [
{
"id": "507f1f77bcf86cd799439011",
"source_container_id": "507f1f77bcf86cd799439022",
"source_path": "/home/app/shared-data",
"target_container_id": "507f1f77bcf86cd799439033",
"target_project_id": null,
"target_type": "container",
"mode": "readonly",
"alias": "prod-data-share",
"label": "production",
"description": "Shared application data directory",
"enabled": true,
"status": "active",
"status_message": null,
"expires_at": 1735689599,
"expiry_notified": false,
"created_by": "507f1f77bcf86cd799439044",
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T10:30:00.000Z"
},
{
"id": "507f1f77bcf86cd799439066",
"source_container_id": "507f1f77bcf86cd799439022",
"source_path": "/var/log/app",
"target_container_id": null,
"target_project_id": "507f1f77bcf86cd799439055",
"target_type": "project",
"mode": "readwrite",
"alias": null,
"label": "logs",
"description": "Application logs shared with project",
"enabled": true,
"status": "active",
"status_message": null,
"expires_at": null,
"expiry_notified": false,
"created_by": "507f1f77bcf86cd799439044",
"created_at": "2025-01-10T08:00:00.000Z",
"updated_at": "2025-01-10T08:00:00.000Z"
}
]
}
const shares = await client.api.storageShares.listIterator({
id: "507f1f77bcf86cd799439022",
target_type: "container",
status: "active",
include_expired: "false"
});

List every storage share you have created across all of your containers (what you are sharing with others).

NameInTypeRequiredDescription
realm_idquerystringNoFilter by realm ID. Alternative to using the realm subdomain in the URL.
{
"statusCode": 200,
"message": "All storage shares retrieved successfully",
"data": [
{
"id": "507f1f77bcf86cd799439011",
"source_container_id": "507f1f77bcf86cd799439022",
"source_path": "/home/app/shared-data",
"target_container_id": "507f1f77bcf86cd799439033",
"target_project_id": null,
"target_type": "container",
"mode": "readonly",
"alias": "prod-data-share",
"label": "production",
"description": "Shared application data directory",
"enabled": true,
"status": "active",
"status_message": null,
"expires_at": 1735689599,
"expiry_notified": false,
"created_by": "507f1f77bcf86cd799439044",
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T10:30:00.000Z"
}
]
}
const shares = await client.api.storageShares.listGlobalIterator();

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

Section titled “GET /api/v1/containers/{id}/storage/shares/{shareId}”

Retrieve the full details of a single storage share.

NameInTypeRequiredDescription
idpathstringYesSource container ID
shareIdpathstringYesShare ID
{
"statusCode": 200,
"message": "Storage share retrieved successfully",
"data": {
"id": "507f1f77bcf86cd799439011",
"source_container_id": "507f1f77bcf86cd799439022",
"source_path": "/home/app/shared-data",
"target_container_id": "507f1f77bcf86cd799439033",
"target_project_id": null,
"target_type": "container",
"mode": "readonly",
"alias": "prod-data-share",
"label": "production",
"description": "Shared application data directory",
"enabled": true,
"status": "active",
"status_message": null,
"expires_at": 1735689599,
"expiry_notified": false,
"created_by": "507f1f77bcf86cd799439044",
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T10:30:00.000Z"
}
}
const share = await client.api.storageShares.get({
id: "507f1f77bcf86cd799439022",
shareId: "507f1f77bcf86cd799439011"
});

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

Section titled “POST /api/v1/containers/{id}/storage/shares”

Share a directory from a source container to either a single target container or to every container in a target project. The share is automatically mounted on the target(s).

NameInTypeRequiredDescription
idpathstringYesSource container ID
NameTypeRequiredDescription
source_pathstringYesAbsolute path inside the source container. Subject to the path-security rules above.
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. Mutually exclusive with target_container_id.
modestringYesMount mode. Allowed: readonly, readwrite.
aliasstringNoOptional lowercase alphanumeric alias (3–63 chars, hyphens/underscores allowed).
labelstringNoOptional label for grouping shares (same constraints as alias).
descriptionstringNoOptional description (max 1000 chars).
enabledbooleanNoEnable the share on creation. Default: true.
expires_atnumberNoUnix timestamp (seconds) when the share should auto-expire.
{
"statusCode": 201,
"message": "Storage share created successfully",
"data": {
"id": "507f1f77bcf86cd799439020",
"source_container_id": "507f1f77bcf86cd799439012",
"source_path": "/data/shared",
"target_container_id": null,
"target_project_id": "507f1f77bcf86cd799439010",
"target_type": "project",
"mode": "readonly",
"alias": "team-shared-data",
"label": "production",
"description": "Shared project files for team collaboration",
"enabled": true,
"status": "active",
"status_message": null,
"expires_at": 1738252800,
"expiry_notified": false,
"created_by": "507f1f77bcf86cd799439001",
"created_at": "2025-01-29T15:00:00.000Z",
"updated_at": "2025-01-29T15:00:00.000Z"
}
}
const share = await client.api.storageShares.create({
id: "507f1f77bcf86cd799439012",
data: {
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}

Section titled “PATCH /api/v1/containers/{id}/storage/shares/{shareId}”

Update share properties. Only the fields you include are changed. Pass null to clear alias, label, description, or expires_at.

NameInTypeRequiredDescription
idpathstringYesSource container ID
shareIdpathstringYesShare ID
NameTypeRequiredDescription
modestringNoMount mode. Allowed: readonly, readwrite.
aliasstringNoAlias (lowercase alphanumeric, 3–63 chars). Pass null to remove.
labelstringNoLabel for grouping shares. Pass null to remove.
descriptionstringNoDescription (max 1000 chars). Pass null to remove.
enabledbooleanNoEnable or disable the share.
expires_atnumberNoUnix timestamp (seconds) for auto-expiry. Pass null to never expire.
{
"statusCode": 200,
"message": "Storage share updated successfully",
"data": {
"id": "507f1f77bcf86cd799439011",
"source_container_id": "507f1f77bcf86cd799439022",
"source_path": "/home/app/shared-data",
"target_container_id": "507f1f77bcf86cd799439033",
"target_project_id": null,
"target_type": "container",
"mode": "readwrite",
"alias": "prod-data-rw",
"label": "production",
"description": "Updated to read-write access",
"enabled": true,
"status": "active",
"status_message": null,
"expires_at": null,
"expiry_notified": false,
"created_by": "507f1f77bcf86cd799439044",
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T14:45:00.000Z"
}
}
const updated = await client.api.storageShares.update({
id: "507f1f77bcf86cd799439022",
shareId: "507f1f77bcf86cd799439011",
data: {
mode: "readwrite",
description: "Updated to read-write access"
}
});

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

Section titled “PATCH /api/v1/containers/{id}/storage/incoming/{shareId}/mount”

Allow the target (receiver) container owner to accept or reject an incoming share. A share is only mounted if both the creator’s enabled flag and the receiver’s mount override are true.

NameInTypeRequiredDescription
idpathstringYesTarget container ID (receiver container)
shareIdpathstringYesShare ID to toggle
NameTypeRequiredDescription
mountbooleanYesSet to true to accept and mount the share, false to reject or unmount it.
{
"statusCode": 200,
"message": "Share enabled for mounting successfully",
"data": {
"share": {
"id": "507f1f77bcf86cd799439011",
"source_container_id": "507f1f77bcf86cd799439022",
"source_path": "/home/app/shared-data",
"target_container_id": "507f1f77bcf86cd799439033",
"target_project_id": null,
"target_type": "container",
"mode": "readonly",
"alias": "prod-data-share",
"label": "production",
"description": "Shared application data directory",
"enabled": true,
"status": "active",
"status_message": null,
"expires_at": 1735689599,
"expiry_notified": false,
"created_by": "507f1f77bcf86cd799439044",
"created_at": "2025-01-15T10:30:00.000Z",
"updated_at": "2025-01-15T14:45:00.000Z"
},
"override": {
"id": "507f1f77bcf86cd799439099",
"share_id": "507f1f77bcf86cd799439011",
"container_id": "507f1f77bcf86cd799439033",
"mount": true,
"created_at": "2025-01-15T14:45:00.000Z",
"updated_at": "2025-01-15T14:45:00.000Z"
}
}
}
await client.api.storageShares.toggleIncomingMount({
id: "507f1f77bcf86cd799439033",
shareId: "507f1f77bcf86cd799439011",
data: { mount: true }
});

Remove a storage share. The share ID is globally unique, so the source container ID is not required. The share is automatically unmounted from all targets.

NameInTypeRequiredDescription
shareIdpathstringYesShare ID (globally unique, no container ID needed)
{
"statusCode": 200,
"message": "Storage share deleted successfully"
}
await client.api.storageShares.delete({
shareId: "507f1f77bcf86cd799439011"
});