Skip to content

Storage shares let you expose a directory from one container to another container or to an entire project. The source container controls what path is shared; the target mount path is determined automatically by the server infrastructure. Shares support read-only and read-write modes, optional expiration, and can be toggled on the receiving side.

Use the endpoints on this page to create, list, inspect, update, and delete shares, as well as to view and accept incoming shares targeted at your containers.


Incoming shares are the receiver view — storage that other containers are sharing with a specific target. They include both 1:1 container shares and project-wide shares, deduplicated so that direct shares take priority over project shares. Self-shares and expired shares are excluded.

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

Section titled “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
{
"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_project_id": "507f1f77bcf86cd799439055",
"target_container_id": null,
"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 { data } = await client.api.storageShares.listIncoming({
id: "507f1f77bcf86cd799439033"
});

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.
{
"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 { data } = await client.api.storageShares.listIncomingGlobalIterator({});

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

Section titled “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 appear in container configuration.

NameInTypeRequiredDescription
idpathstringYesTarget container ID (receiver container)
shareIdpathstringYesShare ID to toggle
FieldTypeRequiredDescription
mountbooleanYesSet to true to accept and mount the share, false to reject/unmount it
{
"mount": true
}
{
"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 }
});

Outgoing shares are what your containers are exposing to others. The endpoints below let you list, inspect, create, update, and delete shares. Share IDs are globally unique.

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

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

List all shares originating from this source container. Use query parameters to narrow results by target type, label, status, or enabled state.

NameInTypeRequiredDescription
idpathstringYesSource container ID
target_typequerystringNoFilter by target type. Allowed values: container, project.
labelquerystringNoFilter by label
statusquerystringNoFilter by status. Allowed values: active, failed.
enabledquerystringNoFilter by enabled status. Allowed values: true, false.
include_expiredquerystringNoInclude expired shares. Allowed values: true, false. Default: false.
realm_idquerystringNoFilter by realm ID. Alternative to using realm subdomain in 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_project_id": "507f1f77bcf86cd799439055",
"target_container_id": null,
"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 { data } = await client.api.storageShares.listIterator({
id: "507f1f77bcf86cd799439022",
target_type: "container",
enabled: "true"
});

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

NameInTypeRequiredDescription
realm_idquerystringNoFilter by realm ID. Alternative to using realm subdomain in 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 { data } = await client.api.storageShares.listGlobalIterator({});

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

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

Retrieve details of a specific 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 { data } = 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 with a target container or an entire project. The share is automatically mounted on the target(s).

NameInTypeRequiredDescription
idpathstringYesSource container ID
FieldTypeRequiredDescription
source_pathstringYesAbsolute path in the source container to share
target_container_idstringNo1:1 container share target. Mutually exclusive with target_project_id.
target_project_idstringNoProject-wide share target. Auto-mounts on all containers in the project. Mutually exclusive with target_container_id.
modestringYesMount mode. Allowed values: readonly, readwrite.
aliasstringNoOptional human-friendly alias (lowercase alphanumeric, hyphens, underscores; 3–63 chars)
labelstringNoOptional label for grouping shares (3–63 chars)
descriptionstringNoOptional description (max 1000 chars)
enabledbooleanNoWhether to enable the share (default: true)
expires_atnumberNoUnix timestamp (seconds) when the share should expire
{
"source_path": "/home/shared/documents",
"target_container_id": "507f1f77bcf86cd799439033",
"mode": "readonly",
"alias": "shared-docs",
"label": "documentation",
"description": "Read-only access to team documentation"
}
{
"statusCode": 201,
"message": "Storage share created successfully",
"data": {
"id": "507f1f77bcf86cd799439020",
"source_container_id": "507f1f77bcf86cd799439012",
"source_path": "/data/shared",
"target_project_id": "507f1f77bcf86cd799439010",
"target_container_id": null,
"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"
}
}
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 such as mode, alias, label, description, enabled state, and expiration. Only the fields provided in the request body are updated; omit a field to leave it unchanged. Pass null for an explicit clear (where supported).

NameInTypeRequiredDescription
idpathstringYesSource container ID
shareIdpathstringYesShare ID
FieldTypeRequiredDescription
modestringNoMount mode. Allowed values: readonly, readwrite.
aliasstring | nullNoAlias (null to remove)
labelstring | nullNoLabel (null to remove)
descriptionstring | nullNoDescription (null to remove)
enabledbooleanNoEnable or disable the share
expires_atnumber | nullNoUnix timestamp (seconds) when the share expires (null to never expire)
{
"mode": "readwrite",
"alias": "prod-data-rw",
"description": "Updated to read-write access",
"expires_at": null
}
{
"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"
}
}
await client.api.storageShares.update({
id: "507f1f77bcf86cd799439022",
shareId: "507f1f77bcf86cd799439011",
data: {
mode: "readwrite",
description: "Updated to read-write access"
}
});

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

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