Folder
A tenant-scoped, named storage location: a name bound to exactly one transport plus a root path/prefix within it, so files, workflow nodes and scripts can choose where bytes live without knowing how they get there. The binding is flattened here to a kind discriminator plus the at-most-one matching reference ID.
TypeID of this folder (e.g. "fld_01K…"); stable file handles reference it.
TypeID of the owning tenant (e.g. "ten_01K…"); folders are tenant-scoped.
nameString!Human-facing folder name. Unique per tenant.
descriptionStringOptional free-text note about the folder's purpose (max 1000 characters); null when unset.
Discriminator for the folder's binding; tells you which of storageBackendId / controllerId is populated.
TypeID of the bound storage backend (e.g. "sbk_01K…"). Non-null only when kind is STORAGE_BACKEND; null otherwise.
TypeID of the bound edge controller (e.g. "ctl_01K…"). Non-null only when kind is CONTROLLER; null otherwise. The controller always belongs to this tenant.
rootPathString!Location within the bound transport. For cloud bindings (CONTROL_CLOUD, STORAGE_BACKEND) this is a key prefix — possibly empty, never leading "/". For CONTROLLER it is an absolute filesystem path starting with "/". Never contains a ".." segment.
isDefaultBoolean!True for the single folder per tenant that receives files stored without an explicit folder selection. Exactly one folder per tenant carries this flag.
createdAtString!ISO-8601 timestamp of when the folder was created.
updatedAtString!ISO-8601 timestamp of the folder's last modification; equals createdAt until first update.
View exact SDL
"""
A tenant-scoped, named storage location: a name bound to exactly one transport plus a root path/prefix within it, so files, workflow nodes and scripts can choose *where* bytes live without knowing *how* they get there. The binding is flattened here to a kind discriminator plus the at-most-one matching reference ID.
"""
type Folder @iac_resource(name: "folder") @iac_ops(create: "createFolder", read: "folder", update: "updateFolder", delete: "deleteFolder") {
"""
TypeID of this folder (e.g. "fld_01K…"); stable file handles reference it.
"""
id: FolderID! @iac_identity(assignedBy: SERVER) @iac_computed
"""
TypeID of the owning tenant (e.g. "ten_01K…"); folders are tenant-scoped.
"""
tenantId: TenantID! @iac_computed
"""Human-facing folder name. Unique per tenant."""
name: String!
"""
Optional free-text note about the folder's purpose (max 1000 characters); null when unset.
"""
description: String
"""
Discriminator for the folder's binding; tells you which of storageBackendId / controllerId is populated.
"""
kind: FolderBindingKind!
"""
TypeID of the bound storage backend (e.g. "sbk_01K…"). Non-null only when kind is STORAGE_BACKEND; null otherwise.
"""
storageBackendId: StorageBackendID @iac_ref(resource: "storage_backend")
"""
TypeID of the bound edge controller (e.g. "ctl_01K…"). Non-null only when kind is CONTROLLER; null otherwise. The controller always belongs to this tenant.
"""
controllerId: ControllerID @iac_ref(resource: "controller")
"""
Location within the bound transport. For cloud bindings (CONTROL_CLOUD, STORAGE_BACKEND) this is a key prefix — possibly empty, never leading "/". For CONTROLLER it is an absolute filesystem path starting with "/". Never contains a ".." segment.
"""
rootPath: String!
"""
True for the single folder per tenant that receives files stored without an explicit folder selection. Exactly one folder per tenant carries this flag.
"""
isDefault: Boolean!
"""ISO-8601 timestamp of when the folder was created."""
createdAt: String! @iac_computed
"""
ISO-8601 timestamp of the folder's last modification; equals createdAt until first update.
"""
updatedAt: String! @iac_computed
}One stable address across all schema views. Follow a field’s type to explore connections between domains.